Tải bản đầy đủ (.pdf) (28 trang)

đồ án nhóm nền tảng hệ thống máy tính đề tài quản lý bộ nhớ trong hệ điều hành linux

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.86 MB, 28 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b> </b>

<b> BỘ GIÁO DỤC VÀ ĐÀO TẠO ĐẠI HỌC DUY TÂN KHOA KỸ THUẬT MẠNG MÁY TÍNH & TRUYỀN THƠNG</b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>1.2.Quản lý bộ nhớ trong Linux...4</b>

CHƯƠNG 2.TỔNG QUAN VỀ QUẢN LÝ BỘ NHỚ TRONG LINUX...7

<b>2.1.Các thành phần chính và chức năng của hệ thống quản lý bộ nhớ:....7</b>

<b>2.2.Chiến lược quản lý bộ nhớ trong Linux...8</b>

CHƯƠNG 3. CƠ CHẾ PHÂN ĐOẠN, PHÂN TRANG...10

<b>3.1.Sự phân đoạn...10</b>

<b>3.2.Sự phân trang...10</b>

CHƯƠNG 4.QUẢN LÍ BỘ NHỚ ẢO VÀ THỜI GIAN HỐN ĐỔI...17

<b>4.1 Khái niệm bộ nhớ ảo, khơng gian hốn đổi...17</b>

<b>4.2.Mơ hình bộ nhớ ảo trong Linux...17</b>

<b>4.3.Chiến lược demand paging và cách xử lý lỗi trang...20</b>

CHƯƠNG 5. CƠ CHẾ QUẢN LÝ BỘ NHỚ VẬT LÝ, ÁNH XẠ BỘ NHỚ..23

<b>5.1.Quản lý bộ nhớ vật lý...23</b>

<b>5.2.Ánh xạ bộ nhớ (mm3 - Memory Mapping)...24</b>

C.KẾT LUẬN...26

D.TÀI LIỆU THAM KHẢO...27

E.PHÂN CÔNG VÀ ĐÁNH GIÁ...28

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

A.LỜI MỞ ĐẦU

Trong thời đại ngày nay, hệ điều hành Linux đã trở thành một phần không thể thiếu của hệ thống máy tính, từ máy tính cá nhân đến các máy chủ doanh nghiệp quy mô lớn. Một trong những yếu tố quan trọng quyết định sự ổn định và hiệu suất của hệ điều hành là cách nó quản lý bộ nhớ.

Bộ nhớ, hay RAM (Random Access Memory), đóng vai trị quan trọng trong việc lưu trữ và xử lý dữ liệu ngắn hạn của hệ thống. Quản lý hiệu quả bộ nhớ không chỉ ảnh hưởng đến tốc độ thực hiện các nhiệm vụ mà còn đối ảnh lớn đến sự ổn định và độ tin cậy của hệ thống. Trong nền công nghiệp công nghệ thông tin ngày nay, khi ứng dụng ngày càng phức tạp và yêu cầu nguồn tài nguyên cao, việc nghiên cứu và tối ưu hóa quản lý bộ nhớ trở thành một thách thức quan trọng.

Bài học về quản lý bộ nhớ trong hệ điều hành Linux tập trung vào cách hệ thống quản lý và sử dụng bộ nhớ. Nó bao gồm các khái niệm như bộ nhớ vật lý và ảo, quản lý trang, swapping, và cách các tiến trình tương tác với bộ nhớ. Học viên sẽ hiểu cách kernel của Linux quản lý bộ nhớ, cách các tiến trình được cấp phát bộ nhớ, và cách thực hiện giải phóng bộ nhớ khi cần thiết để tối ưu hiệu suất hệ thống

Đề tài này tập trung vào việc khảo sát và phân tích cách mà hệ điều hành Linux quản lý bộ nhớ, với mục tiêu là hiểu rõ cơ chế hoạt động, các thuật toán quản lý bộ nhớ, và cách chúng ảnh hưởng đến hiệu suất hệ thống. Qua đó, chúng tơi hy vọng rằng đề tài sẽ đóng góp kiến thức hữu ích cho cộng đồng người sử dụng Linux, những người quan tâm đến tối ưu hóa hiệu suất hệ thống và tăng cường ổn định trong môi trường sử dụng thực tế.

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

B.NỘI DUNG

<b>CHƯƠNG 1.GIỚI THIỆU CHUNG VỀ LINUX VÀ QUẢN LÝ BỘ NHỚTRONG LINUX.</b>

<b>1.1.Hệ điều hành Linux</b>

Linux là một hệ điều hành họ UNIX miễn phí được sử dụng rộng rãi hiện nay. Được viết vào năm 1991 bởi Linus Toward, hệ điều hành Linux đã thu được những thành công nhất định. Là một hệ điều hành đa nhiệm, đa người dùng, Linux có thể chạy trên nhiều nền phần cứng khác nhau. Với tính năng ổn định và mềm dẻo, Linux đang dần được sử dụng nhiều trên các máy chủ cũng như các máy trạm trong các mạng máy tính. Linux cịn cho phép dễ dàng thực hiện việc tích hợp nó và các hệ điều hành khác trong một mạng máy tính như Windows, Novell, Apple ... Ngồi ra, với tính năng mã nguồn mở, hệ điều hành này cịn cho phép khả năng tùy biến cao, thích hợp cho các nhu cầu sử dụng cụ thể.

Là hệ điều hành mã nguồn mở, linh hoạt, ổn định, sử dụng kernel Linux. Được sử dụng trên nhiều thiết bị, từ máy tính cá nhân đến máy chủ và nhúng. Các bản phân phối như Ubuntu, Fedora phổ biến, hỗ trợ đồ họa và dòng lệnh. Linux thường được chọn cho máy chủ web, nhúng và phát triển phần mềm mã nguồn mở.

<b>1.2.Quản lý bộ nhớ trong Linux.1.2.1.Tổng quan về bộ nhớ</b>

Trong hệ thống máy tính, bộ nhớ là một tài nguyên khan hiếm. Cho dù có bao nhiêu bộ nhớ đi chăng nữa thì vẫn khơng đáp ứng đủ nhu cầu của người sử dụng. Các máy tính cá nhân hiện nay đã trang bị ít nhất 128Mb bộ nhớ. Các máy chủ server có thể lên đến hàng gigabyte bộ nhớ. Thế nhưng nhu cầu bộ nhớ vẫn không được thỏa mãn.

Linux có cách tiếp cận và quản lý bộ nhớ rất rõ ràng. Các ứng dụng trên Linux không bao giờ được phép truy cập trực tiếp vào địa chỉ vật lý của bộ nhớ. Linux cung cấp cho các chương trình chạy dưới HĐH - cịn gọi là tiến trình - một mơ hình đánh địa chỉ phăng khơng phân đoạn segment:offset như DOS. Mỗi tiến trình chỉ thấy được một vùng không gian địa chỉ của riêng nó. Hầu như tất cả các

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

phiên bản của UNIX đều cung cấp cách bảo vệ bộ nhớ theo cơ chế bảo đảm khơng có tiến trình nào có thể ghi đè lên vùng nhớ của tiến trình khác đang hoạt động hoặc vùng nhớ của hệ thống. Nói chung, bộ nhớ mà hệ thống cấp phát cho một tiến trình khơng thể nào đọc hoặc ghi bởi một tiên trình khác.

Trong hầu hết các hệ thống Linux và UNIX, con trỏ được sử dụng là một số nguyên 32 bit trỏ đến một ô nhớ cụ thể. Với 32 bit, hệ thống có thể đánh địa chỉ lên đến 4 GB bộ nhớ. Mơ hình bộ nhớ phẳng này dễ truy xuất và xử lý hơn bộ nhớ phân đoạn segment:offset. Ngoài ra, một vài hệ thống cịn sử dụng mơ hình địa chỉ 64 bit, như vậy khơng gian địa chỉ có thể mở rộng ra đến terabyte. Để tăng dung lượng bộ nhớ sẵn có, Linux cịn cài đặt chương trình phân trang đĩa tức là một lượng khơng gian hốn đổi nào đó có thể phân bố trên đĩa. Khi hệ thống yêu cầu nhiều bộ nhớ vật lý, nó sẽ đưa các trang khơng hoạt động ra đĩa, nhờ vậy bạn có thể chạy những ứng dụng lớn hơn và cùng lúc hỗ trợ nhiều người sử dụng. Tuy vậy, việc hoán đổi khơng thay được RAM vật lý, nó chậm hơn vì cần nhiều thời gian để truy cập đĩa. Kernel cũng cài đặt khối bộ nhớ hợp nhất cho các chương trình người sử dụng và bộ đệm đĩa tạm thời (disk cache). Theo cách này, tất cả bộ nhớ trống dành để nhớ tạm và bộ nhớ đệm (cache) sẽ giảm xuống khi bộ xử lý chạy những chương trình lớn.

<b>1.2.2.Tầm quan trọng của quản lý bộ nhớ.</b>

Quản lý bộ nhớ trong Linux đóng vai trị quan trọng với nhiều khía cạnh của hệ thống. Điều này khơng chỉ liên quan đến hiệu suất và tối ưu hóa sử dụng tài ngun, mà cịn đảm bảo tính ổn định và an toàn. Ngăn chặn tràn bộ nhớ, tối ưu hóa bộ nhớ ảo, quản lý tiến trình, giảm fragmentation - tất cả đóng góp vào việc duy trì một hệ thống Linux linh hoạt, hiệu quả và bảo mật. Điều này trở nên ngày càng quan trọng trong bối cảnh môi trường máy chủ và thiết bị ngày càng phức tạp và đa dạng.

<i>*Fragmentation (tách thành phân) trong ngữ cảnh của bộ nhớ đề cập đến hiệntượng mà không gian bộ nhớ không liên tục và được chia thành các phần nhỏ,không nối tiếp.</i>

a)Hiệu Suất Hệ Thống:

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

Quản lý bộ nhớ giúp tối ưu hóa hiệu suất hệ thống bằng cách cung cấp cơ chế hiệu quả để cấp phát và giải phóng bộ nhớ. Điều này đảm bảo rằng tài nguyên bộ nhớ được sử dụng một cách hiệu quả và không gây chậm trễ khơng cần thiết. b)An Tồn và Ổn Định:

Quản lý bộ nhớ đóng vai trị quan trọng trong việc bảo vệ hệ thống khỏi các vấn đề liên quan đến bộ nhớ như tràn bộ nhớ (buffer overflow). Bằng cách kiểm sốt quyền truy cập và đảm bảo tính tồn vẹn của bộ nhớ, hệ thống trở nên an toàn và ổn định hơn.

<b>c)Tối Ưu Hóa Sử Dụng Tài Nguyên:</b>

Quản lý bộ nhớ giúp tối ưu hóa sử dụng tài nguyên bằng cách ngăn chặn sự lãng phí và fragmentation. Bằng cách cấp phát và giải phóng bộ nhớ một cách thơng minh, hệ thống Linux có thể giữ cho khơng gian bộ nhớ được tổ chức một cách hiệu quả, giảm thiểu sự phân tán và tăng cường khả năng sử dụng tối ưu của tài nguyên.

d)Tối Ưu Hóa Bộ Nhớ Ảo:

Linux sử dụng kỹ thuật swap để tối ưu hóa bộ nhớ ảo, giúp hệ thống chạy đồng thời nhiều ứng dụng mà không gặp vấn đề về sự giới hạn bộ nhớ vật lý. Quản lý bộ nhớ đảm bảo rằng quá trình swapping diễn ra hiệu quả và không gây ảnh hưởng đáng kể đến hiệu suất tổng thể.

e)Đảm Bảo An Ninh Hệ Thống:

Quản lý bộ nhớ trong Linux đóng vai trị quan trọng trong việc ngăn chặn các loại tấn công liên quan đến bộ nhớ như buffer overflow. Bằng cách kiểm soát việc truy cập và sử dụng bộ nhớ, hệ thống Linux giữ cho các ứng dụng chạy trong mơi trường an tồn và độ tin cậy cao, giảm nguy cơ bị tấn công từ phía người dùng xấu.

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<b>CHƯƠNG 2.TỔNG QUAN VỀ QUẢN LÝ BỘ NHỚ TRONG LINUX.2.1.Các thành phần chính và chức năng của hệ thống quản lý bộ nhớ:</b>

a)Các thành phần chính.

+Bộ nhớ vật lý (RAM)

+Bộ nhớ ảo (virtual memory)

+Trang lưu trữ(Page Cache)

+Vùng nhớ được bảo vệ (protected memory)

+Trình tiện ích tráo đổi (kswapd)

+Bảng phân trang (page table)

b)Chức năng.

<i>Bộ nhớ vật lý trong Linux :là phần bộ nhớ RAM được sử dụng bởi hệ điều hành</i>

và các tiến trình để lưu trữ các lệnh và dữ liệu. Bộ nhớ vật lý có kích thước giới hạn bởi số bit của địa chỉ vật lý và số lượng RAM có sẵn trên hệ thống. Ví dụ, một hệ thống 32 bit có thể có tối đa 4 GB bộ nhớ vật lý, trong khi một hệ thống 64 bit có thể có tối đa 16 EB bộ nhớ vật lý.

<i>Bộ nhớ ảo (virtual memory) là cách mở rộng bộ nhớ có sẵn của hệ thống bằng</i>

cách sử dụng một phần bộ nhớ thứ cấp (như ổ cứng) để lưu trữ các trang hoặc đoạn bộ nhớ không cần thiết hoặc ít sử dụng. Bộ nhớ ảo cho phép chạy các chương trình có kích thước lớn hơn bộ nhớ vật lý và chuyển đổi giữa các chương trình một cách nhanh chóng.Bộ nhớ ảo giúp mở rộng khơng gian địa chỉ của mỗi tiến trình và tạo điều kiện cho việc quản lý tài nguyên bộ nhớ hiệu quả hơn.

<i>Bộ nhớ page cache được dùng để tăng tốc độ truy nhập ảnh và dữ liệu trên đĩa.Bộ nhớ page cache được dùng để lưu trữ thông tin logic của một file thuộc 1</i>

trang tại một thời điểm, được truy nhập thông qua file. Khi trang được đọc từ đĩa vào bộ nhớ, trang sẽ được lưu trữ ở bộ nhớ page cache.

<i>Vùng nhớ được bảo vệ (protected memory) là cách phân biệt các không gian địa</i>

chỉ của các tiến trình khác nhau, để đảm bảo rằng một tiến trình khơng thể truy

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

cập hoặc thay đổi bộ nhớ của một tiến trình khác. Vùng nhớ được bảo vệ giúp tăng cường tính bảo mật và ổn định của hệ thống.

<i>Trình tiện ích tráo đổi (kswapd) là một tiến trình đặc biệt của nhân Linux, có</i>

nhiệm vụ giải phóng các trang nhớ vật lý đang lưu trữ dữ liệu khi bộ nhớ vật lý trở nên ít đi. Trình tiện ích tráo đổi sẽ chọn các trang nhớ vật lý phù hợp để đưa ra khỏi bộ nhớ và lưu vào bộ nhớ thứ cấp, hoặc loại bỏ nếu không cần thiết.

<i>Bảng phân trang (page table): là cấu trúc dữ liệu dùng để ánh xạ các địa chỉ ảo</i>

sang các địa chỉ vật lý. Mỗi trang bộ nhớ ảo được ánh xạ với một trang bộ nhớ vật lý thông qua một bảng phân trang. Linux áp dụng các bảng phân trang ba mức để tối ưu hóa việc tìm kiếm và cập nhật các ánh xạ.

<b>2.2.Chiến lược quản lý bộ nhớ trong Linux.</b>

+Linux là một hệ điều hành đa nhiệm, đa người dùng, có thể chạy trên nhiều loại bộ vi xử lý khác nhau. Để tận dụng hiệu quả tài nguyên bộ nhớ, Linux sử dụng các cơ chế như phân đoạn, phân trang, bộ nhớ ảo và khơng gian hốn đổi.

<i>a)Phân đoạn:</i>

+Là cơ chế chia bộ nhớ thành các đoạn có kích thước khác nhau, mỗi đoạn có một địa chỉ cơ sở và một độ dài. Mỗi tiến trình có một bảng đoạn riêng biệt, chứa thơng tin về các đoạn của tiến trình đó. Phân đoạn giúp bảo vệ bộ nhớ, tăng khả năng chia sẻ và hỗ trợ các cấu trúc dữ liệu động.

<i>b)Phân trang:</i>

+Là cơ chế chia bộ nhớ thành các trang có kích thước cố định, thường là 4 KB. Mỗi trang có một địa chỉ trang và một địa chỉ trong trang. Mỗi tiến trình có một bảng trang riêng biệt, chứa thơng tin về các trang của tiến trình đó. Phân trang giúp giảm độ lãng phí bộ nhớ, tăng khả năng chia sẻ và hỗ trợ bộ nhớ ảo.

<i>c)Bộ nhớ ảo:</i>

+Là cơ chế cho phép tiến trình sử dụng nhiều bộ nhớ hơn bộ nhớ vật lý có sẵn. Bộ nhớ ảo được thực hiện bằng cách sử dụng một phần của ổ đĩa cứng làm khơng gian hốn đổi. Khi một trang của tiến trình khơng có trong bộ nhớ vật lý, hệ điều hành sẽ tìm trang đó trong khơng gian hốn đổi và đưa nó vào bộ nhớ vật lý. Quá

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

trình này được gọi là hoán đổi trang. Bộ nhớ ảo giúp tăng dung lượng bộ nhớ,

<i>tăng hiệu suất và tăng khả năng đa nhiệm.d)Không gian hoán đổi:</i>

+Là một phần của ổ đĩa cứng được sử dụng để lưu trữ các trang của tiến trình khi chúng không cần thiết trong bộ nhớ vật lý. Kích thước của khơng gian hốn đổi có thể được cấu hình bởi người dùng hoặc hệ điều hành. Khơng gian hoán đổi giúp mở rộng bộ nhớ ảo và giải phóng bộ nhớ vật lý cho các tiến trình khác.

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<b>CHƯƠNG 3. CƠ CHẾ PHÂN ĐOẠN, PHÂN TRANG3.1.Sự phân đoạn.</b>

Linux sử dụng cơ chế phân đoạn để phân tách các vùng nhớ đã cấp phát cho hạt nhân và các tiến trình. Hai phân đoạn liên quan đến 3GB đầu tiên ( từ 0 đen 0xBFFF FFFF) của khơng gian địa chỉ tiến trình và các nội dung của chúng có thể được đọc và chỉnh sửa trong chế độ người dùng và trong chế độ Kernel. Hai phân đoạn liên quan đến GB thứ 4 (từ 0xC000 0000 đến 0xFFFF FFFF) của không gian địa chỉ tiến trình và các nội dung của nó có thể được đọc và chỉnh sửa duy nhất trong chế độ Kernel. Theo cách này, dữ liệu và mã Kernel được bảo vệ khỏi sự truy cập không hợp lý của các tiến trình chế độ người dùng.

<b>3.2.Sự phân trang.</b>

<i>3.2.1. Nhu cầu phân trang</i>

Vì có q ít bộ nhớ vật lý so với bộ nhớ ảo nên HĐH phải chú trọng làm sao để khơng lãng phí bộ nhớ vật lý. Một cách để tiết kiệm bộ nhớ vật lý là chỉ load những trang ảo mà hiện đang được sử dụng bởi một chương trình đang thực thi. Ví dụ, một chương trình cơ sở dữ liệu thực hiện một truy vấn vào cơ sở dữ liệu. Trong trường hợp này khơng phải tồn bộ cơ sở dữ liệu được load vào bộ nhớ mà chỉ load những bản ghi có liên quan. Việc mà chỉ load những trang ảo vào bộ nhớ khi chúng được truy cập dẫn đến nhu cầu về phân trang.

3.2.2.Trang lưu trữ (page cache)

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

* Trang P được đọc trong suốt quá trình hoạt động của đầu đọc cluster ánh xạ bộ nhớ. Trong trường hợp này, một chuỗi các trang liền nhau tiếp sau trang lỗi trong file ánh xạ bộ nhớ được đọc. Những trang này bắt đầu vòng đời của chúng trong page cache kết hợp với file ánh xạ bộ nhớ và trong active_list.

2. Trang P được ghi bởi tiến trình, do đó có chứa dữ liệu ( dirty ). Lúc này trang P vẫn ở trên active_list.

3. Trang P không được sử dụng trong một thời gian. Sự kích hoạt định ki của hàm kswapd() (kernel swap daemon) sẽ giảm dần biển đêm page->age. Hàm kswapd() sẽ hoạt động nhiều hơn khi nhu cầu về bộ nhớ tăng. Thời gian tồn tại của trang P sẽ giảm dần xuống 0 (age == 0) nếu nó khơng cịn được tham chiếu, dẫn đến sự kích hoạt của hàm re fill inactive()

4. Nếu bộ nhớ đã đầy, hàm swap_out sẽ được gọi bởi hàm kswapd) để cố gắng lấy lại các trang từ không gian địa chỉ ảo của tiến trình A. Vì trang P khơng cịn được tham chiếu và có age == 0, nên các mục trong bảng trang sẽ bị xóa. Tất nhiên, trong thời gian này sẽ khơng có tiến trình nào ánh xạ đến. Hàm swap_out thực ra không đưa trang P ra ngoài mà đơn giản là chỉ loại bỏ sự tham chiếu của tiến trình đền trang. Nhờ vào page cache và cơ chế swap mà trang sẽ bảo đảm được ghi lên đĩa khi cần.

5. Thời gian xử lý ít hay nhiều là tùy thuộc vào nhu cầu sử dụng bộ nhớ 6. Tiếp theo, hàm refill_inactive_scan) tìm các trang mà có thể đưa đến inactive_dirty list. Từ khi trang P không được ánh xạ bởi một tiến trình nào và có age == 0 thì nó được đưa từ active_list đến inactive_dirty list.

7. Tiên trình A truy cập vào trang P, nhưng nó hiện khơng có trong bộ nhớ ảo tiên trình các mục trong bảng trang đã bị xóa bởi hàm swap_out(). Trình điều khiển lỗi gọi hàm find page nolock() để xác định vị trí trang P trong page cache. Sau khi tìm thây, các mục trong bảng trang sẽ được phục hồi ngay lập tức và trang P được đưa đến active_list.

8. Quá trình này mất nhiều thời gian do hàm swap_out() xóa các mục trong bảng trang của tiến trình A, hàm refill_inactive_scan() vơ hiệu hóa trang P, đưa nó đến inactive_dirty list. Việc tốn nhiều thời gian sẽ làm bộ nhớ trở nên chậm.

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

9. Hàm page launder() được kích hoạt để làm sạch các trang dirty. Nó tìm trang P trong inactive_dirty list và ghi trang P ra đĩa. Sau đó, trang được đưa đến inactive_clean_list. Khi hàm page_ launder() thực sự quyết định ghi lên trang thì sẽ thực hiện các bước sau:

-Khóa trang

- Gọi phương thức writepage. Lời gọi này kích hoạt một vài đoạn mã đặc biệt để thực hiện ghi lên đĩa ( không đồng bộ ) với trang đã bị khóa. Lúc này, hàm page launder() đã hoàn thành nhiệm vụ, trang vẫn ở trong inactive_dirty_list và sẽ được mở khóa cho đến khi việc ghi hoàn tất.

Hàm page launder() được gọi lại để tìm trang clean để đưa nó đến inactive_clean_list, giả sử trong thời gian này khơng có tiến trình nào tham chiếu đến nó trong page cache.

10. Hàm page launder() thực hiện lại để tìm các trang không sử dụng và clean, đưa chúng đền inactive_clean_list

11. Giả sử cần một trang trống riêng lẻ. Điều này có thể thực hiện bằng cách lấy lại một trang inactive_clean, trang P sẽ được chọn. Hàm reclaim_page() loại bỏ trang P ra khỏi page cache ( điều này bảo đàm răng khơng có tiên trình nào khác tham chiếu đến nó trong q trình quản lý lỗi trang ), và nó được đưa cho lời gọi như là một trang trồng.

Hàm kreclaimd() cố găng tạo bộ nhớ trồng. Nó giành lại trang P và xóa nó. Đây chỉ là một chuỗi các sự kiện hợp lý : một trang có thể sống trong page cache trong một thời gian dài, rồi chết đi, rồi lại được phục hồi trở lại, Trang có thể được phục hồi từ inactive_clean, active lists hay inactive_dirty list. Trang chỉ đọc là những trang khơng phải dirty, vì vậy hàm page launder() có thể đưa chúng từ inactive_dirty_list đến inactive_clean_list để làm trồng nó.

Các trang trong inactive clean list được kiểm tra định kì nhằm tạo ra các khối nhớ trống lớn liên tiếp nhau để đáp ứng khi có yêu cầu. Tóm lại, trang P thực chất chỉ là một trang logic, do đó nó được thể hiện bằng một vài trang vật lý cụ thể. 3.Bảng trang (page table)

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

Linux giả sử rằng có 3 mức bảng trang. Mỗi bàng trang chứa số khung trang của bảng trang ở mức tiếp theo. Hình 1 chỉ ra cách mà địa chỉ ảo được chia thành các trường. Mỗi trường cung cấp một địa chỉ offset đến một bảng trang cụ thể. Để chuyển địa chỉ ào thành địa chỉ vật lý, bộ xử lý phải lấy nội dung của các trường rồi chuyển thành địa chỉ offset đến trang vật lý chứa bảng trang và đọc số khung trang của bảng trang ở mức tiếp theo. Việc này lặp lại 3 lần cho đến khi số khung trang của trang vật lý chứa địa chỉ ảo được tìm ra. Bây giờ, trường cuối cùng trong địa chỉ ảo được sử dụng để tìm dữ liệu trong trang.

Mỗi nền mà Linux chạy trên đó phải cung cấp sự chuyển đổi các macro cho phép kernel có thể hiểu được các bảng trang tương ứng trên nền đó. Do đó, kernel không cần biết định dạng của các mục trong bảng trang cũng như cách sắp xếp của nó. Điều này giúp cho Linux thành công trong việc sử dụng cùng một đoạn mã để xử lý các bảng trang đối với bộ xử lý Alpha ( có 3 mức bảng trang ) và đối với bộ xử lý Intel x86 ( có 2 mức bảng trang ).

4. Định vị và giải phóng trang

Có nhiều nhu cầu về trang vật lý trong hệ thống. Ví dụ, khi một ảnh được load vào bộ nhớ, HĐH cần định vị trang. Những trang này sẽ được làm trống khi ảnh đã xử lý xong và khơng cịn load nữa. Một cơng dụng khác của trang vật lý là chứa cấu trúc dữ liệu cụ thể về kernel như cấu trúc của chính các trang này. Cơ chế và cấu trúc dữ liệu được sử dụng để định vị và giải phóng trang có ý nghĩa vô cùng quan trọng trong việc quản lý một cách hiệu quả bộ nhớ ảo.

Tất cả các trang vật lý trong hệ thống được mô tả bởi cấu trúc dữ liệu mem_map, đây là một danh sách gồm các cấu trúc dữ liệu mem_map_t được khởi tạo lúc khởi động. Mỗi mem_map_t mô tả một trang vật lý trong hệ thơng. Các trường quan trọng có liên quan đến việc quản lý bộ nhớ là :

- Count : lưu số lượng người sử dụng của trang này. Count > 1 khi trang được chia sẻ bởi nhiều tiên trình

age : trường này mơ tả "tuổi" của trang và được dùng để quyết định trang bị loại bỏ hay hoán đổi

map_nr : đây là số khung trang vật lý mà mem_map_t này mô tả

</div>

×