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

Báo cáo Nêu các cách quản lý bộ nhớ ảo trên Windows 7

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 (386.4 KB, 28 trang )

Nguyên lý hệ điều hành
Đề 10 : Nêu các cách quản lý bộ nhớ ảo
trên win 7
Sinh viên thực hiện:
Nguyễn Thị Dung
Phạm Thị Tươi
Nguyễn Thị Tuyết Nhung
Lớp :Tin kinh tế k56
Phân chia công việc:
Nguyễn Thi Dung : Giới thiệu chung , quản lý
phân trang và phân đoạn
Phạm Thị Tươi: Quản lý phân trang
Nguyễn Thị Tuyết Nhung : Quản lý phân đoạn


Mục Lục


1.Giới thiệu chung
Bộ nhớ ảo là một kỹ thuật hiện đại giúp cho người dùng được giải phóng hoàn
toàn khỏi mối bận tâm về giới hạn bộ nhớ.
1.1 Cơ chế bộ nhớ ảo
Nếu đạt toàn bộ không gian địa chỉ vào bộ nhớ vật lý, thì kicks thước của chương
trình bị giới hạn bởi kích thước bộ nhớ vật lý. Thực tế, trong nhiều trường hợp,
chúng ta đang phải nạp toàn bộ chương trình vào bộ nhớ vật lý cùng một lúc, vì tại
một thời điểm chỉ có một chỉ thị của tiến trình được xử lý. Ví dụ, các chương trình
đều có một đoạn code xử lý lỗi, nhưng đoạn code này hầu như rất ít khi được sử
dụng vì hiếm khi xảy ra lỗi, trong trường hợp này, không cần thiết phải nap đoạn
code xử lý lỗi từ đầu.
Từ nhận xét trên, một giải pháp được đề xuất là cho phép thực hiện một chương
trình chỉ được nạp từng phần vào bộ nhớ vật lý.Ý tưởng chính của giải pháp này là


tại mỗi thời điểm chỉ lưu trữ trong bộ nhớ vật lý các chỉ thị và dữ liệu của chương
trình cần thiết cho việc thi hành tại thời điểm đó. Khi cần đến các chỉ thị khác,
những chỉ thị mới sẽ được nạp vào bộ nhớ, tại thời điểm trước đó bị chiếm giữ bởi
các chỉ thị nay không còn cần đến nữa. Với giải pháp này, một chương trình chể
lớn hơn kích thước của vùng nhớ cấp phát cho nó.
Một cách để thưc hiện ý tưởng của giải pháp trên đây là sử dụng kỹ thuật overlay.
Kỹ thuật overlay không đòi hỏi bất cứ sự trợ giúp đặc biệt nào của hệ điều hành,
nhưng trái lại, lập trình viên phải biết cách lập trình theo cấu trúc overlay, và điều
này đòi hỏi khá nhiều công sức. Để giải phóng lập trình viên khỏi các suy tư về
giới hạn của bộ nhớ, mà cũng không tăng thêm khó khăn cho công việc lập trình
của họ, người ta nghĩ đến các kỹ thuật tự động, cho phép xử lý một chương trình
có kích thước lớn chỉ với một vùng nhowscos kích thước nhỏ. Giair pháp được tìm
thấy với khái niệm bộ nhớ ảo (virtual memory).

 Định nghĩa:
Bộ nhớ ảo là một kỹ thuật cho phép xử lý một tiến trình koong được nạp toàn bộ
vào bộ nhớ vật lý. Bộ nhớ ảo mô hình hóa bộ nhớ như một bảng lưu trữ rất lớn và
đồng nhất, tách biệt hẳn không gian địa chỉ và không gian địa lý. Người sử dụng
chỉ nhìn thấy và làm việc trong không gian địa chỉ ảo, việc chuyển đổi sang không


gian vật lý do hệ điều hành thực hiện với sự trợ giúp của các cơ chế phần cứng cụ
thể.
1.2.Các cách quản lý bộ nhớ ảo
*Quản lý bộ nhớ ảo bằng phân trang
*Quản lý bộ nhớ ảo bằng phân đoạn
*Quản lý bộ nhớ ảo bằng phân đoạn kết hợp phân trang

2. Quản lý bộ nhớ ảo phân trang


2.1. Nguyên lý hoạt động :
khi lập trình, các lệnh truy xuất các địa chỉ trong không gian
phẳng có dùng lượng rất lớn (4GB). Không gian này được gọi là
luận lý (ảo). Nếu phần mềm hạn chế truy xuất trong không gian
này thì HĐH sẽ đảm bảo nó chạy tốt cho dù kích thước thật của
RAM nhỏ hơn nhiều.
Để quản lý việc swap (nạp vào/ghi ra) bộ nhớ ảo, HĐH chia bộ
nhớ ảo của ứng dụng ra thành nhiều đơn vị quản lý có kích
thước đồng nhất, mỗi đơn vị được gọi là trang ảo. Kích thước
trang ảo = 2i (256, 512, 1K, 2K, 4K, 8K,...).
Bộ nhớ RAM cũng được chia thành nhiều đơn vị quản lý, mỗi
đơn vị được gọi là trang thật (page frame). Kích thước thật =
kích thước trang ảo.
Trang thật là nơi chứa trang ảo khi cần thiết, tại từng thời điểm,


mỗi trang thật chứa tốt đa 1 trang ảo, nhưng theo thời gian nó
có thể chứa nhiều trang ảo khác nhau.
Khi ứng dụng truy xuất 1 ô nhớ theo địa chỉ tuyến tính số
nguyên, HĐH biết ngay ô nhớ đó thuộc trang ảo nào, nằm ở
Offset nào trong trang ảo.
� Để quản lý quá trình ánh xạ các trang ảo của chương trình vào
trang thật, HĐH dùng 1 bảng đặc tả trang ảo cho mỗi chương trình,
bảng này có số phần tử = số trang ảo của chương trình tương ứng,
mỗi phần tử của bảng là 1 record chứa các thông số quản lý trang
ảo tương ứng

2.2. Chuyển đổi địa chỉ trong hệ thống phân trang:
Chương trình của người sử dụng sử dụng địa chỉ logic hoặc virtual gồm: page
number và offset để truy xuất dữ liệu trên bộ nhớ chính. Bộ phận quản lý bộ nhớ

phải chuyển địa chỉ virtual này thành địa chỉ vật lý tương ứng bao gồm: page
number và offset. Để thực hiện việc này bộ phận quản lý bộ nhớ phải dựa vào
bảng trang (PCT). Vì kích thước của PCT có thể lớn và thay đổi theo kích thước
của tiến trình do đó trong kỹ thuật bộ nhớ ảo hệ điều hành thường chứa PCT trong
bộ nhớ chính và dùng một thanh ghi để ghi địa chỉ bắt đầu của bộ nhớ nơi lưu trữ
PCT của tiến trình khi tiến trình được nạp vào bộ nhớ chính để chạy.


Hình 1: Sơ đồ chuyển địa chỉ trong hệ thống phân trang.
Đa số các hệ điều hành đều thiết kế một bảng trang riêng cho mỗi tiến trình.
Nhưng mỗi tiến trình có thể chiếm giữ một không gian lớn bộ nhớ ảo, trong
trường hợp này bảng trang rất lớn và hệ thống phải tốn không gian bộ nhớ để chứa
nó. Ví dụ, nếu một tiến trình có đến 231 = 2GB bộ nhớ ảo, mỗi trang có kích thước
29 = 512 byte, thì tiến trình này phải cần đến 222 phần tử trong bảng trang. Để khắc
phục vấn đề này, trong các kỹ thuật bộ nhớ ảo hệ thống lưu trữ bảng trang trong
bộ nhớ ảo chứ không lưu trữ trong bộ nhớ thực, và bản thân bảng trang cũng phải
được phân trang. Khi tiến trình thực hiện, chỉ có một phần của bản trang được nạp
vào bộ nhớ chính, đây là phần chứa các phần tử của các trang đang thực hiện tại
thời điểm hiện tại.
Một số processor sử dụng lược đồ hai cấp (two-level) để tổ chức các bảng trang
lớn, trong lược đồ này có một thư mục bảng trang (page directory) mà mỗi phần tử
trong nó trỏ đến một bảng trang. Trong trường hợp này, nếu chiều dài của thư mục
trang là X và chiều dài tối đa của một bảng trang là Y thì tiến trình có thể có X x Y
trang. Chiều dài tối đa của một bảng trang chỉ bằng kích thước của một trang.
Chúng ta sẽ xem ví dụ minh họa về bảng trang hai cấp sau đây:


Hình 2: Cấu trúc bảng trang 2 cấp.
Giả sử có một không gian địa chỉ ảo 32 bít, được chia thành 3 trường: PT1 10 bít,
PT2 10 bít và Offset 12 bít. Hình vẽ 3.10.c cho thấy cấu trúc của bảng trang 2 cấp

tương ứng với không gian địa chỉ ảo 32 bít. Bên trái là top-level của bảng trang
(bảng trang cấp 1), nó gồm có 1024 mục vào (tương ứng với 10 bít của PT1), tức
là PT1 của địa chỉ ảo dùng để chỉ mục đến một phần tử trong bảng trang cấp 1.
Mỗi mục vào dùng để mô tả 4Mb bộ nhớ, vì toàn bộ 4 GB (32 bit) không gian địa
chỉ ảo được chia thành 1024 phần. Entry được chỉ mục trong bảng trang cấp 1 từ
PT1 sẽ cho ra địa chỉ hoặc số hiệu khung trang của bản trang thứ hai (secondlevel). Có 1024 bảng trang cấp 2, đánh số từ 0 đến 1023, bảng trang cấp 2 thứ nhất
(0) quản lý không gian nhớ 4Mb từ 0Mb đến 4Mb, bảng trang cấp 2 thứ hai (1)
quản lý không gian nhớ 4Mb từ 8Mb,…. Trường PT2 bây giờ được dùng để chỉ
mục đến bảng trang cấp 2 để tìm ra số hiệu khung trang của page tương ứng. Giá
trị tìm được ở đây sẽ được kết hợp với thành phần Offset để có được địa chỉ vật lý
của ô nhớ tương ứng với địa chỉ ảo 32 bit được phát sinh ban đầu.
2.3. Phân trang theo yêu cầu
Một hệ thống phân trang theo yêu cầu tương tự một hệ thống phân trang với hoán
vị (hình VIII-2). Các quá trình định vị trong bộ nhớ phụ (thường là đĩa). Khi
chúng ta muốn thực thi một quá trình, chúng ta hoán vị nó vào bộ nhớ. Tuy nhiên,
thay vì hoán vị toàn bộ quá trình ở trong bộ nhớ, chúng ta dùng một bộ hoán vị
lười (lazy swapper). Bộ hoán vị lười không bao giờ hoán vị một trang vào trong
bộ nhớ trừ khi trang đó sẽ được yêu cầu. Vì bây giờ chúng ta xem một quá trình
như một chuỗi các trang hơn là một không gian địa chỉ liên tục có kích thước lớn,
nên dùng hoán vị là không phù hợp về kỹ thuật. Một bộ hoán vị thao tác toàn bộ
quá trình, ngược lại một bộ phân trang (pager) được quan tâm với các trang riêng


rẻ của một quá trình. Do đó, chúng ta dùng bộ phân trang (hơn là bộ hoán vị) trong
nối kết với phân trang theo yêu cầu.

Hình 3: Chuyển bộ nhớ được phân trang tới không gian đĩa liên tục
2.4. Lỗi trang
Truy xuất đến một trang được đánh dấu bất hợp lệ sẽ làm phát sinh một lỗi
trang (page fault). Khi dò tìm trong bảng trang để lấy các thông tin cần thiết cho

việc chuyển đổi địa chỉ, nếu nhận thấy trang đang được yêu cầu truy xuất là bất
hợp lệ, cơ chế phần cứng sẽ phát sinh một ngắt để báo cho hệ điều hành. Hệ điều
hành sẽ xử lý lỗi trang như sau :
Kiểm tra truy xuất đến bộ nhớ là hợp lệ hay bất hợp lệ
Nếu truy xuất bất hợp lệ : kết thúc tiến trình


Ngược lại : đến bước 3
Tìm vị trí chứa trang muốn truy xuất trên đĩa.
Tìm một khung trang trống trong bộ nhớ chính :
Nếu tìm thấy : đến bước 5
Nếu không còn khung trang trống, chọn một khung trang « nạn nhân » và chuyển
trang « nạn nhân » ra bộ nhớ phụ (lưu nội dung của trang đang chiếm giữ khung
trang này lên đĩa), cập nhật bảng trang tương ứng rồi đến bước 5
Chuyển trang muốn truy xuất từ bộ nhớ phụ vào bộ nhớ chính : nạp trang cần
truy xuất vào khung trang trống đã chọn (hay vừa mới làm trống ) ; cập nhật nội
dung bảng trang, bảng khung trang tương ứng.
Tái kích hoạt tiến trình người sử dụng.

Hình 4: Các giai đoạn xử lý lỗi trang
2.5. Thay trang
Thay thế trang thực hiện tiếp cận sau. Nếu không có khung trống, chúng ta tìm
một khung hiện không được dùng và giải phóng nó. Khi chúng ta giải phóng một
khung bằng cách viết nội dung của nó tới không gian hoán vị và thay đổi bảng


trang (và các bảng trang khác) để hiển thị rằng trang không còn ở trong bộ nhớ
(hình VIII-5). Bây giờ chúng ta có thể dùng khung được giải phóng để quản lý
trang cho quá trình bị lỗi. Chúng ta sửa đổi thủ tục phục vụ lỗi trang để chứa thay
thế trang:

1) Tìm vị trí trang mong muốn trên đĩa
2) Tìm khung trang trống
a) Nếu có khung trống, dùng nó.
b) Nếu không có khung trống, dùng một giải thuật thay thế trang để chọn khung
“nạn nhân”
c) Viết trang “nạn nhân” tới đĩa; thay đổi bảng trang và khung trang tương ứng.
3) Đọc trang mong muốn vào khung trang trống; thay đổi bảng trang và khung
trang.
4) Khởi động lại quá trình.


Hình 5: Thay thế trang
2.6. Sự thi hành phân trang theo yêu cầu
Việc áp dụng kỹ thuật phân trang theo yêu cầu có thể ảnh hưởng mạnh đến tình
hình hoạt động của hệ thống.
Gỉa sử p là xác suất xảy ra một lỗi trang (0≤ p ≤ 1):
p = 0 : không có lỗi trang nào
p = 1 : mỗi truy xuất sẽ phát sinh một lỗi trang
Thời gian thật sự cần để thực hiện một truy xuất bộ nhớ (TEA) là:
TEA = (1-p)ma + p (tdp) [+ swap out ] + swap in + tái kích hoạt
Trong công thức này, ma là thời gian truy xuất bộ nhớ, tdp thời gian xử lý lỗi
trang.


Có thể thấy rằng, để duy trì ở một mức độ chấp nhận được sự chậm trễ trong
hoạt động của hệ thống do phân trang, cần phải duy trì tỷ lệ phát sinh lỗi
trang thấp.
Hơn nữa, để cài đặt kỹ thuật phân trang theo yêu cầu, cần phải giải quyết hai
vấn đề chính yếu : xây dựng một thuật toán cấp phát khung trang, và thuật toán
thay thế trang.


2.7. Các giải thuật thay trang
Mục tiêu:
Giảm thiểu tỷ lệ page fault thấp nhất
Đánh giá giải thuật bằng cách chạy nó trên một chuỗi riêng biệt các
tham chiếu bộ nhớ và tính số page fault trên chuỗi đó.
Các giải thuật thay thế trang phụ thuộc vào resident set (số frame cấp cho mỗi
process)
Trong tất cả các ví dụ. Chuỗi tham chiếu là
1, 2, 3, 4, 1, 2, 5, 1, 2, 3,4,5

2.7.1.Thay thế trang FIFO
Giải thuật thay thế trang đơn giản nhất là giải thuật FIFO. Giải thuật này gắn với
mỗi trang thời gian khi trang đó được mang vào trong bộ nhớ. Khi một trang phải
được thay thế, trang cũ nhất sẽ được chọn. Chú ý rằng, nó không yêu cầu nghiêm
ngặt để ghi thời gian khi trang được mang vào. Chúng ta có thể tạo một hàng đợi
FIFO để quản lý tất cả trang trong bộ nhớ. Chúng ta thay thế trang tại đầu hàng
đợi. Khi trang được mang vào bộ nhớ, chúng ta chèn nó vào đuôi của hàng đợi.
Cho một thí dụ về chuỗi tham khảo, 3 khung của chúng ta ban đầu là rỗng. 3 tham
khảo đầu tiên (7, 0, 1) gây ra lỗi trang và được mang vào các khung rỗng này.
Tham khảo tiếp theo (2) thay thế trang 7, vì trang 7 được mang vào trước. Vì 0 là
tham khảo tiếp theo và 0 đã ở trong bộ nhớ rồi, chúng ta không có lỗi trang cho


tham khảo này. Tham khảo đầu tiên tới 3 dẫn đến trang 0 đang được thay thế vì
thế nó là trang đầu tiên của 3 trang trong bộ nhớ (0, 1, 2) để được mang vào. Bởi
vì thay thế này, tham khảo tiếp theo, tới 0, sẽ bị lỗi. Sau đó, trang 1 được thay thế
bởi trang 0. Quá trình này tiếp tục như được hiển thị trong hình VIII-6. Mỗi khi
một lỗi xảy ra, chúng ta hiển thị các trang ở trong 3 khung của chúng ta. Có 15 lỗi
cả thảy


Hình 6: giải thuật thay thế trang FIFO

Giải thuật thay thế trang FIFO rất dễ hiểu và lập trình. Tuy nhiên, năng lực của nó
không luôn tốt. Trang được cho để thay thế có thể là trang chức nhiều dữ liệu cần
thiết, thường xuyên được sử dụng nên được nạp sớm, do vậy khi chuyển ra bộ nhớ
phụ sẽ nhanh chóng gây ra lỗi trang.
Để hiển thị các vấn đề có thể phát sinh với giải thuật thay thế trang FIFO, chúng ta
xem xét chuỗi tham khảo sau: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5. Hình VIII-7 hiển thị
đường cong lỗi trang khi so sánh với số khung sẳn dùng. Chúng ta chú ý rằng số
lượng lỗi cho 4 khung (10) là lớn hơn số lượng lỗi cho 3 khung (9). Hầu hết các
kết quả không mong đợi này được gọi là sự nghịch lý Belady; đối với một số giải
thuật thay thế trang, tỉ lệ lỗi trang có thể tăng khi số lượng khung được cấp phát
tăng. Chúng ta sẽ mong muốn rằng cho nhiều bộ nhớ hơn tới một quá trình sẽ cải
tiến năng lực của nó. Trong một vài nghiên cứu trước đây, các nhà điều tra đã kết
luận rằng giả thuyết này không luôn đúng. Sự không bình thường của Belady được
phát hiện như là một kết quả.


Hình 7: Đường cong lỗi trang cho thay thế FIFO trên chuỗi tham
khảo

2.7.2.Thay thế trang tối ưu hoá
Kết quả phát hiện sự nghịch lý của Belady là tìm ra một giải thuật thay thế trang
tối ưu. Giải thuật thay thế trang tối ưu có tỉ lệ lỗi trang thấp nhất trong tất cả các
giải thuật và sẽ không bao giờ gặp phải sự nghịch lý của Belady. Giải thuật như
thế tồn tại và được gọi là OPT hay MIN. Nó đơn giản là: thay thế trang mà nó
không được dùng cho một khoảng thời gian lâu nhất. Sử dụng giải thuật thay thế
trang đảm bảo tỉ lệ lỗi trang nhỏ nhất có thể cho một số lượng khung cố định.
Thí dụ, trên một chuỗi tham khảo mẫu, giải thuật thay thế trang tối ưu sẽ phát sinh

9 lỗi trang, như được hiển thị trong hình VIII-8. 3 tham khảo đầu tiên gây ra lỗi
điền vào 3 khung trống. Tham khảo tới trang 2 thay thế trang 7 vì 7 sẽ không được
dùng cho tới khi tham khảo 18, trái lại trang 0 sẽ được dùng tại 5 và trang 1 tại 14.
Tham khảo tới trang 3 thay thế trang 1 khi trang 1 sẽ là trang cuối cùng của 3 trang


trong bộ nhớ được tham khảo lần nữa. Với chỉ 9 lỗi trang, thay thế tối ưu là tốt
hơn nhiều giải thuật FIFO, có 15 lỗi. (Nếu chúng ta bỏ qua 3 lỗi đầu mà tất cả giải
thuật phải gặp thì thay thế tối ưu tốt gấp 2 lần thay thế FIFO.) Thật vậy, không có
giải thuật thay thế nào có thể xử lý chuỗi tham khảo trong 3 khung với ít hơn 9 lỗi.
Tuy nhiên, giải thuật thay thế trang tối ưu là khó cài đặt vì nó yêu cầu kiến thức
tương lai về chuỗi tham khảo. Do đó, giải thuật tối ưu được dùng chủ yếu cho
nghiên cứu so sánh. Thí dụ, nó có thể có ích để biết rằng, mặc dù một giải thuật
không tối ưu nhưng nó nằm trong 12.3% của tối ưu là tệ, và trong 4.7% là trung
bình

Hình 8: giải thuật thay thế trang tối ưu

2.7.3.Thay thế trang LRU
Nếu giải thuật tối ưu là không khả thi, có lẽ một xấp xỉ giải thuật tối ưu là có thể.
Sự khác biệt chủ yếu giữa giải thuật FIFO và OPT là FIFO dùng thời gian khi
trang được mang vào bộ nhớ; giải thuật OPT dùng thời gian khi trang được sử
dụng. Nếu chúng ta sẽ dụng quá khứ gần đây như một xấp xỉ của tương lai gần thì
chúng ta sẽ thay thế trang mà nó không được dùng cho khoảng thời gian lâu nhất
(hình VIII-9). Tiếp cận này là giải thuật ít được dùng gần đây nhất (least-recentlyused (LRU)


Hình 9: giải thuật thay thế trang LRU
Thay thế trang LRU gắn với mỗi trang thời gian sử dụng cuối cùng của trang. Khi
một trang phải được thay thế, LRU chọn trang không được dùng trong một khoảng

thời gian lâu nhất. Chiến lược này là giải thuật thay thế trang tối ưu tìm kiếm lùi
theo thời gian hơn là hướng tới. (gọi SR là trình tự ngược của chuỗi tham khảo S
thì tỉ lệ lỗi trang cho giải thuật OPT trên S là tương tự như tỉ lệ lỗi trang cho giải
thuật OPT trên SR. Tương tự, tỉ lệ lỗi trang đối với giải thuật LRU trên S là giống
như tỉ lệ lỗi trang cho giải thuật LRU trên SR)
Kết quả ứng dụng thay thế LRU đối với chuỗi tham khảo điển hình được hiển thị
trong hình VIII-10. Giải thuật LRU sinh ra 12 lỗi. 5 lỗi đầu tiên là giống như thay
thế tối ưu. Tuy nhiên, khi tham chiếu tới trang 4 xảy ra thay thế LRU thấy rằng 3
khung trong bộ nhớ, trang 2 được dùng gần đây nhất. Trang được dùng gần đây
nhất là trang 0, và chỉ trước khi trang 3 được dùng. Do đó, giải thuật LRU thay thế
trang 2, không biết rằng trang 2 để được dùng. Sau đó, khi nó gây lỗi trang 2, giải
thuật LRU thay thế trang 3, của 3 trang trong bộ nhớ {0, 3, 4} trang 3 ít được sử
dụng gần đây nhất. Mặc dù vấn đề này nhưng thay thế LRU với 12 lỗi vẫn tốt hơn
thay thế FIFO với 15.

Hình 10: giải thuật thay thế trang


Chính sách LRU thường được dùng như giải thuật thay thế trang và được xem là
tốt. Vấn đề chính là cách cài đặt thay thế LRU. Một giải thuật thay thế trang LRU
có thể yêu cầu sự trợ giúp phần cứng. Vấn đề là xác định thứ tự cho các khung
được định nghĩa bởi thời gian sử dụng gần nhất. Hai cách cài đặt khả thi là:
• Bộ đếm: trong trường hợp đơn giản nhất, chúng ta gắn mỗi mục từ bảng trang
một trường số lần sử dụng và thêm CPU một đồng hồ luận lý hay bộ đếm. Đồng
hồ được tăng cho mỗi tham khảo bộ nhớ. Bất cứ khi nào một tham khảo tới trang
được thực hiện, các nội dung của thanh ghi đồng hồ được chép tới trường số lần sử
dụng trong mục từ bảng trang cho trang đó. Trong cách này, chúng ta luôn có thời
gian của tham khảo cuối cùng tới mỗi trang. Chúng ta thay thế trang với giá trị số
lần sử dụng nhỏ nhất. Cơ chế này yêu cầu tìm kiếm bảng trang để tìm ra trang
LRU và viết tới bộ nhớ (tới trường thời gian dùng trong bảng trang) cho mỗi truy

xuất bộ nhớ. Số lần cũng phải được duy trì khi các bảng trang bị thay đổi (do định
thời CPU). Vượt quá giới hạn của đồng hồ phải được xem xét.
• Ngăn xếp: một tiếp cận khác để cài đặt thay thế LRU là giữ ngăn xếp số trang.
Bất cứ khi nào một trang được tham khảo, nó bị xoá từ ngăn xếp và đặt trên đỉnh.
Trong cách này, đỉnh của ngăn xếp luôn là trang được dùng gần nhất và đáy là
trang LRU (hình VIII-11). Vì các mục từ phải được xoá từ giữa ngăn xếp, nó được
cài đặt tốt nhất bởi một danh sách được liên kết kép với con trỏ đầu và đuôi. Xoá
một trang và đặt nó trên đỉnh của ngăn xếp sau đó yêu cầu thay đổi 6 con trỏ trong
trường hợp xấu nhất. Mỗi cập nhật là ít chi phí hơn nhưng không cần tìm một thay
thế; con trỏ đuôi chỉ tới đáy của ngăn xếp là trang LRU. Tiếp cận này đặc biệ Thay
thế tối ưu hoá và LRU không gặp phải sự nghịch lý của Belady. Có một lớp giải
thuật thay thế trang được gọi là giải thuật ngăn xếp, mà nó không bao giờ hiển thị
sự nghịch lý Belady. Một giải thuật ngăn xếp là một giải thuật mà nó có thể được
hiển thị rằng tập hợp trang trong bộ nhớ đối với n khung trang luôn là tập hợp con
của tập hợp các trang mà nó ở trong bộ nhớ với n + 1 khung. Đối với thay thế
LRU, tập hợp trang trong bộ nhớ là n trang được tham khảo gần đây nhất. Nếu số
trang được gia tăng thì n trang này sẽ vẫn là những trang được tham khảo gần đây
nhất và vì thế sẽ vẫn ở trong bộ nhớ.
Chú ý rằng cài đặt LRU sẽ có thể không có sự trợ giúp phần cứng ngoại trừ thanh
ghi TLB. Cập nhật các trường đồng hồ hay ngăn xếp phải được thực hiện cho mỗi
tham khảo bộ nhớ. Nếu chúng ta sử dụng ngắt cho mỗi tham khảo bộ nhớ, cho
phép phần mềm cập nhật cấu trúc dữ liệu thì nó sẽ làm chậm mỗi tham khảo bộ
nhớ gần 1 phần 10. Rất ít hệ thống có thể chịu cấp độ chi phí đó cho việc quản lý
bộ nhớ.


Hình 11: sử dụng ngăn xếp để ghi những tham khảo trang gần nhất

3.Quản lý bộ nhớ ảo phân đoạn
Trong kỹ thuật phân trang, mặc dù không gian ảo mà chương trình có thể truy

xuất có kích thước rất lớn (4GB), nhưng nó là không gian phẳng nên 1 số chương
trình lớn vẫn còn gặp phiền hà sau đây : chương trình tự chia không gian ảo của
mình ra thành nhiều partition khác nhau để chứa những thông tin độc lập cần được
xử lý, trong quá trình chạy, nếu 1 trong các partition không đủ chỗ chứa thông tin
thì chương trình sẽ bị dừng đột ngột.
Do đó, thay vì cấp phát cho chương trình 1 không gian phằng duy nhất, nếu hệ
thống cấp phát cho chương trình các không gian bộ nhớ độc lập có kích thước thay
đổi động theo nhu cầu (miễn sao tổng kích thước của chúng bị hạn chế trên nào
đó) thì chương trình sẽ không gặp vần đề tràn bộ nhớ.
Sự phân đoạn cho phép người lập trình xem bộ nhớ như bao gồm một tập các
không gian nhớ hoặc các đoạn (segment) có địa chỉ được xác định. Với bộ nhớ ảo
người lập trình không cần quan tâm đến giới hạn bộ nhớ được đưa ra bởi bộ nhớ
chính. Các segment có thể có kích thước không bằng nhau và được ấn định một


cách động. Địa chỉ tham chiếu bộ nhớ trong trường hợp này bao gồm: Segment
Number và Offset.
Đối với người lập trình thì sự phân đoạn không gian địa chỉ có một số thuận lợi
sau đây so với trường hợp không phân đoạn không gian địa chỉ:
1. Nó đơn giản để điều khiển các cấu trúc dữ liệu lớn dần (growing) trong quá
trình hoạt động của hệ thống. Nếu người lập trình không biết trước dữ liệu sẽ lớn
đến chừng nào tại thời điểm chạy thì việc ấn định kích thước của động cho
segment mang lại nhiều thuận lợi cho người lập trình.
2. Nó cho phép các chương trình không phụ thuộc vào sự thay đổi vào sự biên
dịch lại. Nó không yêu cầu thiết lập lại toàn bộ chương trình khi chương trình
được liên kết hoặc được nạp trở lại. Việc này chỉ có thể thực hiện bằng cách sử
dụng nhiều phân đoạn (Multiple Segment).
3. Nó thích hợp với chiến lược chia sẻ segment giữa các tiến trình. Người lập trình
có thể đặt một chương trình tiện ích hoặc một bảng dữ liệu thường sử dụng vào
một segment mà có thể được tham chiếu bởi nhiều tiến trình khác nhau.

4. Nó thích hợp với chiến lược bảo vệ bộ nhớ. Bởi vì một segment có thể được
sinh ra để chứa một tập xác định các thủ tục hoặc dữ liệu, sau đó người lập trình
hoặc người quản trị hệ thống có thể gán quyền truy cập với các độ ưu tiên thích
hợp nào đó.

3.1. Nguyên lí hoạt động
♦ khi lập trình, chương trình được phép truy xuất dữ liệu trong nhiều không
gian khác nhau, mỗi không gian được gọi là segment. Mỗi segment có kích thước
thay đổi được theo thời gian, ô nhớ đầu tiên của mỗi segment luôn bắt đầu từ 0.
♦ Bộ nhớ RAM có kích thước nhỏ nào đó. Các segment của chương trình
thường nắm trên đĩa cứng, khi cần thiết segment sẽ được nạp vào 1 vùng thích hợp
trong RAM.
♦ Tại từng thời điểm, 1 vùng nhớ RAM thật chứa tốt đa 1 segment ảo, nhưng
theo thời gian nó có thể chứa nhiều segment ảo khác nhau.


♦ Khi ứng dụng truy xuất 1 ô nhớ, nó xác định địa chỉ ô nhớ dạng phân cấp :
segment + offset.
♦ Để quản lý quá trình ánh xạ các segement ảo của chương trình vào các vùng
RAM, HĐH dùng 1 bảng đặc tả sgement cho mỗi chương trình, bảng này có số
phần tử = số segement của chương trình tương ứng, mỗi phần tử của bảng là 1
record chứa các thong số quản lý segement tương ứng : Protection ,
ModifiedAddress in disk , địa chỉ thật trong, RAM (start_addr) , inRAM
Cơ chế MMU trong kĩ thuật phân đoạn: cần phải xây dựng một ánh xạ để chuyển
đổi các địa chỉ 2 chiều được người dung định nghĩa thành địa chỉ vật lí 1 chiều.sự
chuyển đổi này được thực hiện qua một bảng phân chia.Mỗi thành phần trong
bảng phân đoạn bao gồm một thanh ghi nền và một thanh ghi giới hạn .Thanh ghi
nền lưu trữ địa chỉ vật lý nơi bắt đầu phân đoạn trong bộ nhớ,trong khi thanh ghi
giới hạn đặc tả chiều dài của phân đoạn.


3.2. Cài đặt bảng phân đoạn:
Có thể sử dụng các thanh ghi để lưu trữ bảng phân đoạn nếu số lượng phân đoạn
nhỏ. Trong trường hợp chương trình bao gồm quá nhiều phân đoạn,bảng phân
đoạn phải đuwơcj lưu trong bộ nhớ chính.Một thanh ghi nền bảng phân đoạn
(STBR) chỉ đến địa chỉ bắt đầu của bảng phân đoạn.Vì số lượng phân đoạn sử
dụng trong mọt chương trình biến động,cần sử dụng thêm một thanh ghi đặc tả
kích thước bảng phân đoạn(STLR).Với một địa chỉ logic <s,d>,trước tiên số hiệu
phân đoạn s được kiểm tra tính hợp lệ (sđể có được địa chỉ địa chỉ của phần tử thứ s trong bảng phân đoạn(STBR+S). Địa
chỉ vật lý cuối cùng là(STBR+s+d)

3.3. Tổ chức của hệ thống phân đoạn:
Trong kỹ thuật phân đoạn đơn, mỗi tiến trình sở hữu một bảng đoạn riêng, khi tất
cả các đoạn của tiến trình được nạp vào bộ nhớ chính thì bảng đoạn của tiến trình


được tạo ra và cũng được nạp vào bộ nhớ, mỗi phần tử trong bảng đoạn chứa địa
chỉ bắt đầu của đoạn tương ứng trong bộ nhớ chính và độ dài của đoạn. Trong kỹ
thuật bộ nhớ ảo cũng vậy, nhưng một phần tử trong bảng đoạn sẽ chứa nhiều
thông tin phức tạp hơn. Bởi vì trong kỹ thuật bộ nhớ ảo chỉ có một vài segment
của tiến trình được nạp vào bộ nhớ
chính, do đó cần phải có một bít để cho biết một đoạn tương ứng của tiến trình là
có hay không trên bộ nhớ chính và một bít cho biết đoạn có bị thay đổi hay không
so với lần nạp gần đây nhất. Cụ thể là nó phải có thêm các bít điều khiển:
♦ Bít M (Modify): Cho biết nội dung của đoạn tương ứng có bị thay đổi hay không
so với lần nạp gần đây nhất. Nếu nó không bị thay đổi thì việc phải ghi lại nội
dung của một đoạn khi cần phải đưa một đoạn ra lại bộ nhớ ngoài là không cần
thiết, điều này giúp tăng tốc độ trong các thao tác thay thế đoạn.

Hình 12:Một phần tử trong bảng Đoạn

thước khác nhau cho các phân đoạn của chương trình trên bộ nhớ vật lý, điều này
phức tạ
♦ Bít P (Present): Cho biết đoạn tưong ứng đang ở trên bộ nhớ chính (= 1) hay ở
trên bộ nhớ phụ (= 0).
♦ Các bít điều khiển khác: Các bít này phục vụ cho các mục đích bảo vệ trang và
chia sẻ các khung trang.

3.4. Qui trình đổi địa chỉ ảo sang địa chỉ thật :
1. từ địa chỉ mà chương trình truy xuất gồm 2 thành phần : segement (i) và offset.


2. Truy xuất record quản lý segement i trong bảng đặc tả segement. Nếu field
inRAM=1 thì địa chỉ thật tương ứng là :
start_addr + Offset và qui trình kết thúc.
3. Nếu inRAM =0, hệ thống sẽ tìm 1 vùng RAM thật rãnh (có địa chỉ bắt đầu là
base), nếu không có phải tìm cách giải phóng 1 vùng RAM thật ít gây phiền hà
nhất (có địa chỉ bắt đầu là base), dựa vào thong tin trong field "inDisk" để mở file
và đọc segment vào vùng RAM thật tìm được.
4. Hiệu chỉnh lại field inRAM = 1 và field start_addr = base rồi quay lại bước 2.

3.5 .Bảo vệ và chia sẻ trong phân đoạn:
Một ưu điểm đăc biệt của cơ chế phân đoạn là khả năng đặc tả thuộc tính bảo vệ
cho mỗi phân đoạn. vì mỗi phân đoạn biểu diễn cho 1 phần của chương trình với
ngữ nghĩa được người dung xác định ,người sử dụng có thể biết đc một phân đoạn
chứa đựng những gì bên trong,do vậy họ có thể đặc tả các thuộc tính bảo vệ thích
hợp cho từng phân đoạn.Cơ chế phần cứng phụ trách chuyển đổi địa c các bit bảo
vệ được gán với mỗi phần tử trong bảng phân đoạn để ngăn chặn các thao tác truy
xuất bất hợp lệ đến phân đoạn.
Các hệ điều hành cũng có thể sử dụng một chiến lược bảo vệ phức tạp hơn để cài
đặt sự bảo vệ các segment, đó là sử dụng cấu trúc vòng bảo vệ (ring protection).

Như đã biết trong hệ thống ring, bao gồm: ring 0, ring 1, ring 2, … thì mỗi ring có
một mức đặc quyền truy cập riêng, ring 0 có mức đặc quyền truy cập cao hơn so
với ring 1, ring 1 có mức đặc quyền truy cập cao hơn so với ring 2, …, ring thấp
nhất được sử dụng cho thành phần kernel của hệ điều hành, các ring cao hơn được
sử dụng cho các ứng dụng của người sử dụng. Nguyên lý cơ bản của hệ thống ring
là:
♦ Chương trình chỉ có thể truy cập đến dữ liệu trong cùng một ring hoặc dữ liệu ở
ring có mức đặc quyền truy cập thấp hơn.
♦ Chương trình có thể gọi các dịch vụ trong cùng một ring hoặc ở các ring có mức
đặc quyền truy cập cao hơn.
Một ưu điểm khác của kĩ thuật phân đoạn là khả năng chia sẻ ở mức độ phân
đoạn.Nhờ có khả năng này ,các tiến trình có thể chia sẻ với nhau từng phần


chương trình(ví dụ các thủ tục hàm),không nhất thiết phải chia sẻ toàn bộ chương
trình như trường hợp phân trang.Mỗi tiến trình có một bảng phân đoạn riêng,một
phân đoạn đc chia sẻ khi các phần tử trong bảng phân đoạn của hai tiến trình khác
nhau cùng chỉ tới một vị trí vật lý duy nhất.
Các thuật toán thông dụng để chọn một phân đoạn tự dotrong danh sách để cấp
phát cho tiến trình la:
♦ first-fit:cấp phát phân đoạn tự do đầu tiên đủ lớn.
♦ best-fit : cấp phát phân đoạn tự do nhỏ nhất nhưng đủ lớn để thỏa mãn nhu cầu.
♦ worst-fit: cấp phát phân đoạn tự do lớn nhất
Trong hệ thống sử dụng kĩ thuật phân đoạn ,hiện tượng phân mảnh ngoại vi lại
xuất hiện khi các khối nhớ tự do đều quá nhỏ ,không đủ để chúa một phân đoạn.

3.6. Nhận xét về kỹ thuật phân đoạn:
♦ Vì các segment có kích thước không bằng nhau nên sự phân đoạn tương tự như
sự phân vùng động. Sự khác nhau là với sự phân đoạn một chương trình có thể
chiếm giữ hơn một phân vùng, và các phân vùnh này có thể không liền kề với

nhau. Sự phân vùng loại trừ được sự phân mảnh nội vi, nhưng như sự phân vùng
động nó vẫn xuất hiện hiện tượng phân mảnh ngoại vi.
♦ Sự phân trang là không tường minh đối với người lập trình, trong khi đó sự phân
đoạn là tương minh đối với người lập trình, và nó cung cấp một sự thuận lợi để
người lập trình tổ chức chương trình và dữ liệu. Người lập trình hoặc trình biên
dịch có thể gán các chương trình và dữ liệu đến các đoạn nhớ khác nhau.
♦ Tương tự như trong kỹ thuật phân vùng động, kỹ thuật này cũng phải giải quyết
vấn đề cấp phát động, ở đây hệ điều hành thường dùng thuật toán best-fit hay firstfit.
♦ Kỹ thuật phân đoạn thể hiện được cấu trúc logic của chương trình, nhưng nó
phải cấp phát các khối nhớ có kích p hơn nhiều so với việc cấp phát các khung


trang. Để dung hòa vấn đề này các hệ điều hành có thể kết hợp cả phân trang và
phân đoạn.

4.Quản lý bộ nhớ ảo bằng phân đoạn và phân trang

4.1 .Nguyên lý hoạt động
-Chuyển đổi địa chỉ: mỗi địa chỉ logic là một bộ ba:(s,p,d)
-Số hiệu phân đoạn (s):sử dụng như chỉ mục đến phần tử tương ứng trong bảng
phân đoạn.
-Số hiệu trang(p):sử dụng như chỉ mục đến phần tử tương ứng trong bảng trang
của phân đoạn.
-Địa chỉ tương đối trong trang (d):kết hợp với địa chỉ bắt đầu của trang để tạo ra
địa chỉ vật lý mà trình quản lý bộ nhớ sử dụng.khi lập trình, các lệnh truy xuất các
địa chỉ trong không gian phẳng có dùng lượng rất lớn (4GB). Không gian này
được gọi làluận lý (ảo). Nếu phần mềm hạn chếtruy xuất trong không gian này thì
HĐH sẽ đảm bảo nó chạy tốt cho dù kích thước thật của RAM nhỏ hơn nhiều.
ƒ Đểquản lý việc swap (nạp vào/ghi ra) bộ nhớảo, HĐH chia bộ nhớ ảo của ứng
dụng ra thành nhiều đơn vị quản lý có kích thước đồng nhất, mỗi đơn vị được gọi

là trang ảo. Kích thước trang ảo = 2i (256, 512, 1K, 2K, 4K, 8K,...).
ƒ Bộ nhớRAM cũng được chia thành nhiều đơn vị quản lý, mỗi đơn vị được gọi là
trang thật (page frame). Kích thước thật = kích thước trang ảo.Trang thật là nơi
chứa trang ảo khi cần thiết, tại từng thời điểm, mỗi trang thật chứa tốt đa 1 trang
ảo, nhưng theo thời gian nócó thểchứa nhiều trang ảo khác nhau.
ƒ Khi ứng dụng truy xuất 1 ô nhớtheo địa chỉ tuyến tính sốnguyên, HĐH biết ngay
ô nhớ đóthuộc trang ảo nào, nằm ở Offset nào trong trang ảo.Đểquản lý quá trình


ánh xạcác trang ảo của chương trình vào các trang thật, HĐH dùng 1 bảng đặc
tảtrang ảo cho mỗi chương trình, bảng này có sốphần tử= sốtrang ảo của chương
trình tương ứng, mỗi phần tửcủa bảng là 1 record chứa các thông sốquản lý trang
ảo tương ứng khi lập trình, chương trình được phép truy xuất dữliệu trong nhiều
không gian khác nhau, mỗi không gian được gọi làsegment. Mỗi segment có kích
thước thay đổi được theo thời gian, ô nhớ đầu tiên của mỗi segment luôn bắt đầu
từ0.
ƒ BộnhớRAM có kích thước nhỏnào đó. Các segment của chương trình thường
nắm trên đĩa cứng, khi cần thiết segment sẽ được nạp vào 1 vùng thích hợp trong
RAM.
ƒ Tại từng thời điểm, 1 vùng nhớ RAM thật chứa tốt đa 1 segment ảo, nhưng theo
thời gian nó có thểchứa nhiều segment ảo khác nhau.
ƒ Khi ứng dụng truy xuất 1 ô nhớ, nó xác định địa chỉ ô nhớdạng phân cấp :
segment + offset.
Đểquản lý quá trình ánh xạcác segement ảo của chương trình vào vùng RAM,
HĐH dùng 1 bảng đặc tả sgement cho mỗi chương trình, bảng này có sốphần tử=
số segement của chương trình tương ứng, mỗi phần tử của bảng là 1 record chứa
các thông số quản lý segement tương ứng :

Qui trình đổi địa chỉảo sang địa chỉ thật ởslide trước có khuyết điểm trong trường
hợp quản lý segemnt có kích thước lớn : ta không tìm được vùng RAM trống chứa

nó. Vì lý do này, trong thực tế, người ta phải kết hợp 2 phương pháp quản lý phân
trang và phân đoạn lại, đây là phương pháp mạnh nhất hiện nay. ý tưởng
làhệthống sẽquản lý mỗi segment phần mềm nhưlà 1 không gian ảo nhiều trang
ảo, mỗi lần chương trình truy xuất ô nhớ nằm trong trang ảo nào của segment nào,
hệthống sẽtìm cách nạp nó vào RAM.

4.2. Qui trình đổi địa chỉảo sang địa chỉ thật :
1. từ địa chỉ mà chương trình truy xuất gồm 2 thành phần : segement (s) và offset,
hệ thống offset ra thành 2 thành phần page (p) + offset1.


×