Linux và các khái niệm cơ phiên bản Tổng quan khóa học trình làng hệ quản lý điều hành Linux System call C Library với C Compiler cách xử trí lỗi điện thoại tư vấn System gọi hoặc hàm tủ sách file Input/Output reviews về tệp tin I/O làm việc file vào Linux file I/O Buffering con trỏ file I/O Multiplexing - select() I/O Multiplex - poll() thống trị tiến trình bao quát về tiến trình thao tác với quá trình thống trị tiến trình bé Process Scheduling Thread vào Linux Thread với Posix Thread quản lý Posix thread Thread Synchronization-Mutex Thread Synchronization-Biến đk Thread Cancellation cai quản lý bộ lưu trữ bộ nhớ lưu trữ ảo (Virtual Memory) cung cấp phát bộ nhớ Memory Mapping Memory Mapping (continue)
bài học kinh nghiệm trước Bài kế tiếp

Le Minh
cung cấp kênh theo dõi

Bộ ghi nhớ ảo (Virtual Memory)


Trong bài học kinh nghiệm Khái quát mắng về tiến trình, bọn họ đã lướt qua những thành phần bộ nhớ lưu trữ (được hotline là những segment) cấu thành bộ lưu trữ của một tiến trình. Trong bài xích này, bọn họ cần phát âm rằng các thành phần và bộ lưu trữ của quá trình được nhắc đó là bộ lưu trữ ảo (virtual memory). Vậy bộ nhớ ảo là gì, lý do lại bắt buộc dùng đến nó với nó hoạt động như gắng nào?

Giống như đa số các kernel hiện đại, Linux sử dụng 1 nghệ thuật được call là quản lý bộ nhớ ảo (virtual memory management) nhằm mục đích mục đích sử dụng hiệu quả cả CPU cùng RAM (bộ nhớ đồ lý hay, cũng hoàn toàn có thể được hotline là bộ nhớ lưu trữ thật). Nghệ thuật này khai thác 1 đặc điểm chung về truy tìm cập bộ lưu trữ của hầu hết các lịch trình là locality of reference (dịch nôm na là tham chiếu vùng), được thể hiện qua 2 tính năng sau:

Spatial locality: công tác có xu hướng tham chiếu đến địa chỉ bộ nhớgần với phân vùng bộ lưu trữ mà nó sẽ truy cập. Vị chương trình C xử lý các chỉ lệnh một cách tuần tự,hoặc công tác xử lýcác struct(vùngnhớ của những thành phần của struct được sắp xếp liền kề nhau)

Temporal locality: chương trình tất cả xu hướng truy cập cùng 1 vùng nhớ trong các thời điểm khôn xiết gần nhau. Lấy ví dụ như trường hợp cách xử lý vòng lặp, các vùng nhớ hoàn toàn có thể được truy vấn nhiều lần các thời điểm sát nhau mỗi một khi vòng lặp con quay lại.

Bạn đang xem: Bộ nhớ ảo là gì

Nhìn vào đăc tính locality of reference này, bạn cũng có thể rút ra là 1 trong những chương trình hoàn toàn có thể chạy được khi chỉ cần 1 phần không gian địa chỉ của nó bên trên RAM, thay bởi vì tải toàn bộ không gian bộ lưu trữ của tiến trình.

Một bộ nhớ ảo phân tách không gian bộ lưu trữ của 1 quy trình ra làm nhiều đoạn nhỏ dại có kích thước cố định và thắt chặt được điện thoại tư vấn là các trang (page). Tương tự, RAM cũng được chia làm nhiều đoạn nhỏ cùng kích thước được call là page frame. Trong một thời điểm, chỉ 1 vài trang của tiến trình cần phải có mặt trong số frame của RAM để chạy. Những trang không được sử dụng của chương trình sẽ tiến hành để vào phân vùng swap (là phân vùng dự trữ của ổ cứng hỗ trợ lưu trũ bổ sung cập nhật cho RAM) và sẽ được tải vào RAM khi cần thiết.

Page table

Để ánh xạ giữa những trang của ko gian bộ nhớ ảo đến các frame của bộ nhớ lưu trữ vật lý, kernel tạo nên 1 bảng trang (page table) cho từng tiến trình. Mỗi entry của page table ứng với 1 trang của bộ nhớ ảo cho phép chỉ ra địa điểm của trang đó trong RAM hoặc chỉ ra nó đang nằm ở vị trí phân vùng swap của ổ cứng.

Để tưởng tượng rõ hơn về page table, bọn họ xem hình bên dưới đây:

*

Hình 1: Page Table của một tiến trình

Trong thực tế, không cần thiết phải xây dựng bảng ánh xạ cho tất cả không gian add bộ lưu giữ ảo của tiến trình. Trái lại, hay chỉ có một trong những phần số lượng những trang trong các đó được áp dụng và rất cần được có bảng ánh xạ cho các trang đó. Vày vậy, về mặt lý thuyết không rất cần được xây dựng entry cho toàn cục không gian bộ nhớ ảo của tiến trình.

Demand Paging

Demand paging nghĩa là xuất bản bảng paging table và tải những page của các bước theo nhu cầu. Như vẫn nói tại phần trên, trong một thời điểm chỉ cần 1 phần không gian bộ lưu trữ của các bước được kiến thiết bảng paging table cùng được tải vào RAM, các phần sót lại được đặt tại phân vùng swap. Vậy trường hợp tiến trình truy cập vào phân vùng hiện tại chưacó trong RAM hoặc thậm chí không được xây dựng bảng paging table thì sao?

Trong trường đúng theo này, CPU sẽ ra đời 1 page fault, và kernel kế tiếp sẽ tải bộ nhớ lưu trữ mà tiến trình đang cần đó trường đoản cú phân vùng swap vào RAM. Thông thường, page fault ko phải là một trong lỗi rất lớn như tên của nó, mà chỉ dễ dàng là CPU biết rằng tiến trình sẽ bị tạm ngừng thực thi cho đến khi kernel hoàn tất tải bộ nhớ lưu trữ nó đang nên vào RAM. Chuyên môn này được call là demand paging.

Tuy nhiên, chắc chắn là là bạn không thích CPU yêu cầu ngồi không chờ kernel tải bộ nhớ từ swap vào RAM. Để buổi tối ưu hóa xử lý, CPU sẽ đưa sang thực thi quá trình khác đang chờ và vẫn có bộ nhớ lưu trữ cần thiết vào RAM và sẽ trở lại thực thi tiến trình trước từ chính câu lệnh đã ra đời page fault sau khoản thời gian kernel tải xong bộ lưu trữ cần thiết.

Xem thêm: Eau De Parfum Spray Vaporisateur Là Gì ? Hướng Dẫn “Đọc Thông Tin” Trên Bao Bì Nước Hoa

Kỹ thuật cai quản lý bộ lưu trữ ảo đi cùng với demand paging đã tách biệt không gian địa chỉ cửa hàng ảo của quy trình với ko gian địa chỉ cửa hàng vật lý trên RAM. Kỹ thuật này đem đến một số ưu điểm sau:

Các quy trình trong hệ thống chạy bóc tách biệt nhau, và bóc biệt khỏi kernel. Một tiến trình không thể truy cập hoặc đổi khác bộ lưu giữ của tiến trình khác hoặc của kenrel. Điều này tiến hành được vày mỗi địa chỉ trong tiến trình được bảng page table trỏ mang lại 1 địa chỉ riêng biệt trên RAM (hoặc phân vùng swap)

Các tiến trình rất có thể chia sẻ bộ nhớ nếu ước ao (khi các tiến trình dùng thông thường text segment hoặc cần sử dụng shared memory). Bảng page table có thể ánh xạ địa chỉ cửa hàng bộ ghi nhớ ảo của các tiến trình cho cùng 1 showroom trên RAM.

Cho phép xúc tiến cơ chế bảo đảm an toàn bộ nhớ. Mỗi entry của bảng page table có thể được ghi lại để chỉ ra câu chữ của page này có thể chấp nhận được chỉ hiểu (readble), tốt chỉ ghi (writeable) hoặc cả hai. Điều này cũng tức là nếu các page của các tiến trình mọi ánh xạ mang đến cùng 1 showroom vật lý, kernel có thể cấu hình thiết lập quyền tróc nã cập không giống nhau trên một địa chỉ cửa hàng giữa các tiến trình khác nhau, tiến trình này chỉ rất có thể đọc, trong lúc tiến trình khác hoàn toàn có thể cả đọc và ghi.

Lập trình viên và các tool như compiler hoặc linker không cần phải để ý đến việc tổ chức showroom vật lý của quy trình trong RAM.

Vì chỉ cần một phần không gian địa chỉ của tiến trình cần có mặt vào RAM, chương trình sẽ được tải với chạy cấp tốc hơn. Điều này cũng chất nhận được hệ thống sử dụng dung tích RAM nhỏ dại hơn so với ko gian showroom ảo của tiến trình. Ví dụ ko gian địa chỉ cửa hàng ảo của 1 quá trình trong hệ thống 32 bit là 4 GB, nhưng rất có thể chạy được trên hệ thống với chỉ 1GB RAM.

Vì mỗi quy trình sử dụng ít RAM hơn, nhiều tiến trình có thể cùng mãi sau trong RAM. Vấn đề này làm cho tăng tác dụng rất các cho CPU, vì chưa hẳn chờ cho quy trình được tải vào RAM để thực thi.

Kết luận

Khái niệm về bộ nhớ ảo là giữa những kỹ thuật trẻ khỏe và không thể thiếu trong các khối hệ thống hiện đại về cai quản bộ nhớ. Vị vậy, lúc nói đến bộ nhớ hoặc showroom của của tiến trình, chúng ta cần hãy nhớ là đang bàn về bộ nhớ lưu trữ ảo của nó. Trong bài học kinh nghiệm sau, bọn họ sẽ mày mò các kỹ thuật cung cấp phát bộ lưu trữ khi lập trình sẵn trên khối hệ thống Linux.