Tìm hiểu về quản lý bộ nhớ trong hệ điều hành Linux sử dụng kỹ thuật memory mapping

MỤC LỤC

Code thực thi

Quản lý tiến trình

Chức năng quản lý process bao gồm hai chức năng đó là liệt kê ra tất cả các process đang hoạt động và chức năng gửi signal tới từng process. Mô tả Chức năng này sẽ tiến hành hiển thị tất cả các process đang được thực thi ở trong máy. Mô tả Chức năng này sẽ tiến hành gửi signal tới process được chỉ định bằng id.

Client

Lập trình Kernel 1. Giới thiệu về Kernel

Kernel chịu trách nhiệm giao tiếp giữa phần cứng và phần mềm và phân bổ các tài nguyên có sẵn. Tất cả các bản phân phối Linux đều dựa trên một nhân được xác định trước. Tuy nhiên, nếu bạn muốn tắt một số tùy chọn và trình điều khiển hoặc thử các bản vá thử nghiệm, bạn cần phải xây dựng một nhân Linux.

Mô-đun nhân là đoạn mã, có thể được tải và dỡ tải từ nhân theo yêu cầu. Mô-đun nhân cung cấp một cách dễ dàng để mở rộng chức năng của hạt nhân cơ sở mà không cần phải xây dựng lại hoặc biên dịch lại hạt nhân. Hầu hết các trình điều khiển được triển khai dưới dạng mô-đun nhân Linux.

Khi những trình điều khiển đó không cần thiết, chúng tôi chỉ có thể dỡ bỏ trình điều khiển cụ thể đó, điều này sẽ làm giảm kích thước hình ảnh hạt nhân. Trên một hệ thống linux bình thường, các module nhân sẽ nằm bên trong thư mục / lib / modules /. + Tìm số phần tử chia hết cho 1 số cho trước trong ma trận + Tìm các số nguyên trong ma trận.

Makefile để tạo module nhân tương ứng

Kết quả thực thi - Tính giai thừa

Kết quả Tìm số nguyên tố giữa hai số - Đếm số phần tử nhỏ hơn số cho trước trong ma trận. Đếm số phần tử nhỏ hơn số cho trước trong ma trận - Đếm số phần tử chia hết cho 1 số cho trước trong ma trận. Đếm số phần tử chia hết cho 1 số cho trước trong ma trận - Đếm các số nguyên tố trong ma trận.

TÌM HIỂU VỀ MEMORY MAPPING 3.1. Tổng quan

  • Các struct được sử dụng cho quá trình ánh xạ bộ nhớ

    PFN có thể được tính toán từ địa chỉ vật lý bằng cách chia số đó với kích cỡ của một trang (hoặc có thể dịch phải địa chỉ vật lý với các bit PAGE_SHIFT). Vì các lý do liên quan đến vấn đề hiệu năng, vùng không gian địa chỉ ảo được chia thành không gian người dùng và không gian kernel. Cũng chính vì lý do trên mà không gian kernel chứa một vùng bộ nhớ đã ánh xạ (memory mapped zone) hay còn gọi là lowmem, được ánh xạ liên tục trên bộ nhớ vật lý.

    Trên các hệ thống 32-bit, không phải toàn bộ bộ nhớ trống sẽ được ánh xạ trên lowmem, và vì thế nên trong không gian kernel sẽ có một vùng riêng biệt là highmem để ánh xạ tới bộ nhớ vật lý một cách trừu tượng, ngẫu nhiên. Vùng nhớ được cấp phát bởi vmalloc() sẽ không liên tục nhau và sẽ không nằm trong lowmem (mà nó sẽ có một vùng nhớ được để dành sẵn trên highmem). Trước khi đi vào cơ chế ánh xạ bộ nhớ của một thiết bị, ta sẽ đi vào một số kiểu dữ liệu struct được sử dụng trong hệ thống quản lý bộ nhớ của nhân Linux.

    Các loại struct này bao gồm:st-hourruc năng Change permissiont-hour pag Change permissione permission, st-hourruc năng Change permissiont-hour vm_are permissiona_st-hourruc năng Change permissiont-hour, st-hourruc năng Change permissiont-hour mm_st-hourruc năng Change permissiont-hour. - Một vùng nhớ (memory area) có các thông số đặc trưng là địa chỉ bắt đầu (start address), địa chỉ kết thúc (stop address), độ rộng (length) và quyền truy cập (permission). Từ điểm nhìn của một driver, việc ánh xạ bộ nhớ cho phép truy cập trực tiếp bộ nhớ tới không gian người dùng của thiết bị.

    Nếu như đã được implement, tiến trình trong không gian người dùng có thể sử dụng lời gọi hệ thống mmap() với một file descriptor tương ứng với thiết bị. Để ánh xạ địa chỉ giữa thiết bị và không gian người dùng, tiến trình của người dùng phải mở thiết bị và đưa ra lời gọi hệ thống mmap() với file descriptor tương ứng. Một driver cần cấp phát bộ nhớ (bằng kmalloc(), vmalloc(), alloc_pages()) rồi được ánh xạ tới vùng địa chỉ của không gian người dùng.

    + addr - không gian địa chỉ ảo từ nơi bắt đầu ánh xạ, bảng trang cho không gian địa chỉ ảo với kích cỡ cần thiết sẽ được tạo ra khi nhu cầu phát sinh. Đây là một ví dụ sử dụng hàm trên, ánh xạ liên tục bộ nhớ vật lý, bắt đầu từ số khung trang pfn (bộ nhớ mà trước đó đã cấp phát) tới địa chỉ ảo vma ->. Đối với mỗi kmalloc năng Change permission(), vmalloc năng Change permission(), alloc năng Change permission_pag Change permissione permissions(),chúng ta phải sử dụng một cách tiếp cận khác nhau.