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ó.
Trang 1Phâ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
Trang 2Mục Lục
Trang 31.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ạimộ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ởicá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ìmthấ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
Trang 4gian 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,
Trang 5mỗ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
Trang 6Hì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ắcphụ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ụctrang 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 Ytrang 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:
Trang 7Hì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 (second-level) 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
Trang 8rẻ của một quá trình Do đó, chúng ta dùng bộ phân trang (hơn là bộ hoán vị) trongnố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
Trang 9Ngượ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ểntrang « 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íchhoạ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 10trang (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
4) Khởi động lại quá trình
Trang 11Hì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
Trang 12Có 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
Trang 13tham 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 taxem 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 đượcphát hiện như là một kết quả
Trang 14Hì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 đượcdù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
Trang 15trong 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-recently-used (LRU)