Các địa chỉ trong chương trình thực thi dạng exe là địa chỉ tương đối, và cần được chuyển đổi thành các địa chỉ tuyệt đối trong bộ nhớ chính.. Việc chuyển đổi có thể được xảy ra ở 3 giai
Trang 1HaNoi University of Science and Technology
Shool of Electronics and Telecomunication
BÁO CÁO BÀI TẬP LỚN
HỆ ĐIỀU HÀNH
Đề tài:
Mô phỏng quản lý bộ nhớ trong hệ điều hành Linux
GVHD: TS.Nguyễn Thanh Bình
SVTH:
Nguyễn Tất Đạt 20172455
Nguyễn Nhật Bằng 20172422
Phan Hà Duy 20172516
January 11, 2022
Trang 2MỤC LỤC
Mục tiêu 3
chương I: Tìm hiểu lý thuyết 4
1.1 Bộ nhớ chính (RAM) 5
1.1.1 Tổng quan 5
1.1.2 Swapping 6
1.1.3 Mô hình cấp phát không liên tục 6
1.2 Bộ nhớ ảo 10
Demand paging 10
1.2.1 Page Replacement 11
1.2.2 Cấp phát số lượng frame (Allocation of frames): 14
1.2.3 Thrashing 15
CHƯƠNG II: CÀI ĐẶT 16
2.1 Cài đặt FIFO 16
2.2 Cài đặt LRU 17
2.3 Cài đặt process 17
Chương III: Mô phỏng 18
3.1 Cấu trúc chương trình 18
3.2 Chạy mô phỏng 18
Tài liệu tham khảo 19
Trang 3DANH MỤC HÌNH ẢNH
HÌNH 1.1 MÔ HÌNH PHÂN TRANG 6 HÌNH 1.2 CƠ CHẾ MMU TRONG PAGING 7 HÌNH 1.3 CƠ CHÊ CHUYỂN ĐỔI ĐỊA CHỈ CỦA MMU 8 HÌNH 1.4 MỘT PAGE TABLE CÓ THÊM TRẠNG THÁI MỖI PHẦN TỬ 9 HÌNH 1.5 VÍ DỤ VỀ CHỈA SẺ BỘ NHỚ 9 HÌNH 1.6 QUY TRÌNH XỬ LÝ PAGE FAULT 10 HÌNH 1.7 THUẬT TOÁN CƠ HỘI THỨ 2 13 HÌNH 1.8 MÔ HÌNH WORKING-SET 15 HÌNH 3.1 VÍ DỤ VỀ MÔ PHỎNG 18
MỤC TIÊU
Tìm hiểu về quản lý bộ nhớ trong hệ điều hành
Trang 4 Làm quen được với hệ điều hành Linux-Ubuntu
Cài đặt được các thuật toán trong quản lý bộ nhớ
Mô phỏng một quá trình quản lý bộ nhớ mà trong đó sử dụng các phương pháp quản lý bộ nhớ khác nhau, qua đó so sánh độ hiệu quả giữa các thuật toán và phương pháp đó
CHƯƠNG I: TÌM HIỂU LÝ THUYẾT
Trang 5Quản lý bộ nhớ là chức năng của hệ điều hành xử lý hoặc quản lý bộ nhớ chính và di chuyển các quá trình qua lại giữa bộ nhớ chính và ổ đĩa trong quá trình thực thi Quản lý bộ nhớ theo dõi từng vị trí bộ nhớ, bất kể bộ nhớ đó đang được cấp phát cho một số quy trình hay chưa được
sử dụng Nó kiểm tra lượng bộ nhớ được cấp cho các tiến trình Nó quyết định tiến trình nào sẽ được ưu tiên chạy trước và tiến trình nào chạy sau Nó sẽ theo dõi trạng thái hiện tại của các vùng nhớ trong bộ nhớ và sẽ cập nhật lại trạng thái trong khi chạy các tiến trình
1.1 Bộ nhớ chính (RAM)
1.1.1 Tổng quan
CPU không thể truy câp vào bộ nhớ phụ, ổ đĩa mà chỉ có thể truy cập trực tiếp vào bộ nhớ chính và thanh ghi Vì vậy khi chương trình muốn chạy đươc thì cần phải truyền dữ liệu của chương trình đến một vị trí xác định trong bộ nhớ chính Các địa chỉ trong chương trình thực thi (dạng exe) là địa chỉ tương đối, và cần được chuyển đổi thành các địa chỉ tuyệt đối trong bộ nhớ chính Việc chuyển đổi có thể được xảy ra ở 3 giai đoạn như sau:
Thời điểm biên dịch (complie time): Nếu tại thời điểm biên dịch, có thể biết vị trí mà
tiến trình sẽ được nạp vào trong bộ nhớ, trình biên dịch có thể phát sinh ngay mã với các địa chỉ tuyệt đối Tuy nhiên, nếu sau đó có sự thay đổi vị trí của chương trình thì sẽ cần phải biên dịch lại chương trình
Thời điểm nạp (load time): Nếu tại thời điểm nạp, chưa thể biết vị trí mà tiến trình sẽ
được nạp vào bộ nhớ, trình biên dịch sẽ chỉ phát sinh mã tương đối Khi nạp chương trình vào bộ nhớ, hệ điều hành sẽ chuyển các địa chỉ tương đối thành địa chỉ tuyệt đối
do đã biết vị trí bắt đầu lưu trữ tiến trình Khi có sự cố thay đổi vị trí lưu trữ, cần nạp lại chương trình để thực hiện lại việc chuyển đổi địa chỉ, không cần biên dịch lại chương trình
Thời điểm xử lý (execution time): Nếu có nhu cầu di chuyển tiến trình từ vùng nhớ này
sang vùng nhớ khác trong quá trình tiến trình xử lý, thì việc chuyển đổi địa chỉ sẽ được thực hiện vào lúc tiến trình thực thi Chức năng chuyển đổi địa chỉ sẽ do phần cứng thực hiện được gọi là MMU (memory management unit)
Xử lý không gian địa chỉ
Địa chỉ logic: là địa chỉ do CPU tạo ra, còn được gọi là địa chỉ ảo.
Địa chỉ vậy lý: là địa chỉ thực trong bộ nhớ chính, địa chỉ mà memory có thể nhìn thấy,
còn được gọi là địa chỉ tuyệt đối
Địa chỉ ảo và địa chỉ vật lý giống nhau trong các lược đồ theo thời gian chỉ thời gian biên dịch và thời gian tải Địa chỉ ảo và địa chỉ vật lý khác nhau trong các lược đồ theo địa chỉ chỉ thời gian xử lý
Không gian địa chỉ ảo: là tập hợp tất cả các địa chỉ ảo của một tiến trình.
Trang 6 Không gian địa chỉ vật lý: là tập hợp tất cả các địa chỉ vật lý tương ứng với các địa chỉ ảo
của tiến trình đó
1.1.2 Swapping
Swapping là cơ chế trong đó khi mà bộ nhớ chính không đủ để cung cấp cho tiến trình, hệ
thống sẽ tạm thời di chuyển một số tiến trình đang không sử dụng từ bộ chính sang bộ nhớ phụ
và nhường phần bộ nhớ đó cho tiến trình đang cần sử dụng Tại một thời điểm sau, hệ thống sẽ hoán đổi lại từ bộ nhớ phụ về bộ nhớ chính
Cơ chế này tuy có thể giúp chạy song song nhiều tiến trình nhưng lại làm giảm hiệu suất hoạt động Tổng thời gian thực hiện bởi swap bao gồm thời gian cần thiết để di chuyển toàn bộ quá trình sang bộ nhớ phụ và sau đó sao chép trở lại bộ nhớ cùng với thời gian quá trình lấy lại
bộ nhớ chính
1.1.3 Mô hình cấp phát không liên tục
Mô hình phân trang (Paging):
Bộ nhớ vật lý được chia thành các khối có kích thước cố định và bằng nhau frame Không gian địa chỉ ảo cũng được chia thành các khối có cùng kích thước với frame và gọi
là trang (page) Khi một tiến trình được đưa vào bộ nhớ để xử lý, các trang của tiến trình
sẽ được cất vào những frame còn trống, như vậy một tiến trình kích thước N trang sẽ cần N khung trang trống
Hình 1.1 Mô hình phân trang
Cấu trúc địa chỉ ảo:
Để dễ dàng phân tích địa chỉ ảo thành số hiệu trang và địa chỉ tương đối, phần cứng qui định kích thước của trang là lũy thừa của 2n (9<=n<= 13) Nếu kích thước của không gian địa chỉ ảo là 2m (CPU dùng địa chỉ ảo m bít) và kích thước trang là 2n thì m-n
Trang 7bit cao của địa chỉ ảo sẽ biễu diễn số hiệu trang, và n bit thấp biễu diễn địa chỉ tương đối trong trang Khi đó mỗi địa chỉ ảo m bit sẽ có dạng (p,d) với p chiếm m-n bit và p là số hiệu trang, d chiếm n bit và là địa chỉ tương đối trong trang p
Số hiệu trang (p): được sử dụng như một chỉ mục trong một page table có chứa địa chỉ cơ sở của mỗi trang trong bộ nhớ vật lý
Địa chỉ tương đối trang (d): kết hợp với địa chỉ cơ sở để xác định địa chỉ bộ nhớ vật lý được gửi đến đơn vị bộ nhớ
Khi chương trình được nạp vào bộ nhớ, MMU ghi nhận lại số hiệu frame chứa trang vào pages table, còn CPU làm nhiệm vụ chuyển đổi tất cả các địa chỉ tương đối trong chương trình thành địa chỉ ảo Phần tử thứ p trong page table lưu số hiệu frame trong bộ nhớ vật lý đang chứa trang p Để chuyển địa chỉ ảo (p,d) thành địa chỉ vật lý, MMU truy xuất phần tử thứ p trong page table, lấy được giá trị f là số hiệu frame chứa trang p và từ đó tính được điạ chỉ vật lý = vị trí bắt đầu của frame f + d
Hình 1.2 Cơ chế MMU trong paging Trong thực tế, việc chuyển đổi địa chỉ ảo (p,d) được MMU thực hiện như sau: MMU truy xuất phần tử thứ p trong page table, lấy được giá trị f là số hiệu frame chứa trang p và tính điạ chỉ vật lý bằng cách chép d vào n bit thấp của địa chỉ vật lý và chép f vào (m-n) bit cao của địa chỉ vật lý
Trang 8Hình 1.3 Cơ chê chuyển đổi địa chỉ của MMU
Cài đặt page table:
Nếu page table có kích thước nhỏ có thể dùng một tập các thanh ghi để cài đặt page table Nếu page table có kích thước lớn, cần phải được lưu trữ trong bộ nhớ chính,
và phần cứng cung cấp một thanh ghi PTBR (Page Table Base Register) lưu địa chỉ bắt đầu của page table và thanh ghi PTLR (Page Table Limit Register) lưu số phần tử trong page table.Với một địa chỉ logic (p,d), trước tiên số hiệu trang p được kiểm tra tính hợp
lệ (p<PTLR) Kế tiếp, cộng giá trị p với PTBR (PTBR+s) để có được địa chỉ của phần tử thứ
p trong bảng frame và MMU truy xuất phần tử thứ p trong page table, lấy được giá trị f
là số hiệu frame chứa trang p và từ đó tính được điạ chỉ vật lý = vị trí bắt đầu của frame
f + d
Trang 9Hình 1.4 Một page table có thêm trạng thái mỗi phần tử
Chia sẻ bộ nhớ:
Trong kỹ thuật paging, hệ điều hành cũng có thể cho phép các tiến trình dùng chung một số frame, bằng cách ghi cùng số hiệu fame vào page table của mỗi tiến trình
Hình 1.5 Ví dụ về chỉa sẻ bộ nhớ
Trang 101.2 Bộ nhớ ảo
Bộ nhớ ảo là kỹ thuật dùng bộ nhớ phụ lưu trữ tiến trình, các phần của tiến trình được chuyển vào-ra giữa bộ nhớ chính và bộ nhớ phụ để cho phép thực thi một tiến trình mà không cần nạp toàn bộ vào bộ nhớ vật lý Với kỹ thuật bộ nhớ ảo, hệ điều hành sẽ tăng được mức độ
đa chương của hệ thống, có thể thực thi được những chương trình kích thước rất lớn so với kích thước bộ nhớ vật lý và người lập trình không cần quan tâm máy tính có đủ RAM để thực thi chương trình hay không Có hai phương pháp cài đặt kỹ thuật bộ nhớ ảo đó là phân trang theo yêu cầu (Demand paging) hoặc phân đoạn theo yêu cầu (Demand segmentation)
Demand paging
Cơ chế paging sử dụng page table có trạng thái của mỗi trang và swap các dữ liệu cần giữa
bộ nhớ chính và bộ nhớ phụ Trong cơ chế này có thể xảy ra tình trạng page fault, khi một chương trình cố truy cập vào một dữ liệu trong một page chưa được xác định (chưa ánh xạ đến
bộ nhớ vật lý) Quy trình handling page fault sẽ được thực hiện theo các bước sau:
Hình 1.6 Quy trình xử lý page fault
Chương trình cố gắng truy cập page M Trong Pages Table, page M chưa có thông tin mapping với bộ nhớ vật lý, hiện tại nó được mapping vào disk - ổ cứng
Trang 11 Hệ thống lưu lại trạng thái lệnh hiện tại, tạo ra một Trap Page Fault lên hệ điều hành Page Fault là một ngoại lệ - exception, linux kernel gọi hàm xử lý ngoại lệ exception handler tương ứng với loại ngoại lệ Page Fault
Trong trường hợp này, hàm xử lý ngoại lệ sẽ đọc thông tin từ ổ cứng disk
Chọn một frame trên bộ nhớ vật lý, ghi dữ liệu từ ổ cứng vào bộ nhớ vật lý RAM Trong trường hợp không có frame nào free, hệ thống sẽ chọn một frame (victim frame) để ghi ngược vào disk để free một frame
Reset Page Tables để cập nhật mapping từ M sang frame/page vật lý mới
Quay trở lại trạng thái được lưu trước đó
1.2.1 Page Replacement
Nếu không có frame trống, thì mỗi khi xảy ra page fault cần phải thực hiện hai thao tác chuyển trang : chuyển một trang ra bộ nhớ phụ và nạp một trang khác vào bộ nhớ chính Có thể giảm bớt số lần chuyển trang bằng cách sử dụng thêm một bit "cập nhật" (dirty bit) Giá trị của bit được phần cứng đặt là 1 nếu nội dung trang có bị sửa đổi Khi cần thay thế một trang, nếu bit cập nhật có giá trị là 1 thì trang này cần được lưu lại trên đĩa, ngược lại, nếu bit cập nhật là
0, nghĩa là trang không bị thay đổi, thì không cần lưu trữ trang trở lại đĩa
1.2.1.1 Thời gian thực hiện một yêu cầu truy xuất bộ nhớ
Gọi xác suất xảy ra page fault là p: 0 ≤ p ≤ 1.0, nếu p = 0 nghĩa là không có page fault, nếu
p = 1 nghĩa là mỗi lần truy xuất đều xảy ra lỗi Memory access (MA) là thời gian một lần truy xuất bộ nhớ Effective Access Time (EAT) là thời gian thực hiện một yêu cầu truy xuất bộ nhớ Page fault overhead (pfo) là thời gian xử lý một lỗi trang Swap page in (SPI) là thời gian chuyển trang từ đĩa vào bộ nhớ Swap page out (SPO) là thời gian chuyển trang ra đĩa (swap page out
có thể bằng 0) Restart overhead (RO) là thời gian tái khởi động lại việc truy xuất bộ nhớ
Có:
EAT = (1 – p) x MA+ p (PFO + [SPO] + SPI + RO)
1.2.1.2 Các thuật toán chọn victim frame
Thuật toán FIFO (First in first out):
Frame ở trong bộ nhớ lâu nhất sẽ được chọn làm victim frame (vào trước ra trước) Không cần ghi nhận thời điểm trang được nạp vào bộ nhớ, mà chỉ cần quản lý các trang trong bộ nhớ bằng một danh sách FIFO, khi đó nếu có page fault thì trang truy xuất được đưa vào cuối danh sách và nếu hết frame thì trang đầu danh sách sẽ được chọn làm victim frame
Thuật toán FIFO đơn giản, dễ cài đặt, nhưng nếu trang được chọn là trang thường xuyên được sử dụng, thì khi bị chuyển ra bộ nhớ phụ sẽ nhanh chóng gây ra page fault
Thuật toán OPT (Optimal Page Replacement Algorithm):
Trang 12Chọn frame lâu được sử dụng nhất trong tương lai.
Thuật toán này bảo đảm số lượng lỗi trang phát sinh là thấp nhất Tuy nhiên đây là một thuật toán khó cài đặt vì thường không thể biết trước chuỗi truy xuất của tiến trình
Thuật toán LRU (Least-recently-used):
Thuật toán LRU sẽ dùng thời điểm cuối cùng trang được truy xuất (dùng quá khứ gần để
dự đoán tương lai gần) Với mỗi trang, ghi nhận thời điểm cuối cùng trang được truy cập, trang được chọn để thay thế sẽ là trang lâu nhất chưa được truy xuất vì với suy nghĩ là trang này có khả năng ít được sử dụng nhất
_ Cài đặt thuật toán LRU:
Sử dụng bộ đếm: Thêm vào cấu trúc của mỗi phần tử trong page table một
trường ghi nhận “thời điểm truy xuất gần nhất”, và thêm vào cấu trúc của CPU một thanh ghi đếm (counter) Mỗi lần thực hiện truy xuất đến một trang, giá trị của counter tăng lên 1 và ghi giá trị counter vào trường “thời điểm truy xuất gần nhất” của phần tử tương ứng với trang trong page table Khi đó victim frame là trang có giá trị trường “thời điểm truy xuất gần nhất” là nhỏ nhất
Sử dụng danh sách liên kết: Dùng một một dslk lưu trữ các số hiệu trang, trang
ở cuối danh sách là trang được truy xuất gần nhất, và trang ở đầu danh sách là trang lâu nhất chưa được sử dụng Nếu có page fault và nếu có frame trống thì thêm nút chứa số hiệu trang đang truy xuất vào cuối danh sách, nếu không có khung trống thì trang được chọn làm victim frame sẽ là trang ở đầu danh sách, khi đó hủy nút đầu và thêm nút chứa số hiệu trang đang truy xuất vào cuối danh sách Nếu không có page fault thì chuyển nút chứa số hiệu trang hiện hành xuống cuối danh sách
Các thuật toán xấp xỉ LRU:
Thuật toán dùng các bit lịch sử:
Mỗi page sử dụng thêm 8 bit lịch sử (history) Sau từng khoảng thời gian nhất định (thường là 100 milliseconds), một ngắt đồng hồ được phát sinh và quyền điều khiển được chuyển cho hệ điều hành Hệ điều hành sẽ cập nhật các bit lịch
sử của mỗi page bằng cách dịch các bit lịch sử sang phải 1 vị trí để loại bỏ bit thấp nhất và đặt bit reference của mỗi page vào bit cao nhất trong 8 bit history của page đó 8 bit history sẽ lưu trữ tình hình truy xuất đến page trong 8 chu kỳ cuối cùng
Nếu 8 bit history là 00000000 thì page tương ứng có khả năng không được dùng trong 8 chu kỳ cuối, nếu 8 bit history là 11111111 thì page tương ứng được dùng đến ít nhất 1 lần trong mỗi 8 chu kỳ cuối Nếu xét 8 bit history như một số nguyên không dấu thì victim frame là frame có giá trị history nhỏ nhất Số lượng
Trang 13các bit history có thể thay đổi tùy theo phần cứng, số bít history nhiều thì việc chọn victim frame sẽ chính xác hơn
Thuật toán cơ hội thứ 2:
Tìm một page theo nguyên tắc FIFO, rồi kiểm tra bit reference của page đó Nếu bit reference là 0, chọn page này, nếu bit reference là 1 thì gán lại là 0 rồi tìm page FIFO tiếp theo (cho page này một cơ hội thứ hai) Một page đã được cho cơ hội thứ hai sẽ không bị thay thế cho tới khi tất cả những page khác được thay thế hoặc được cho cơ hội thứ hai Nếu page thường xuyên được sử dụng, bit reference của nó sẽ duy trì được giá trị 1 và page hầu như không bao giờ bị thay thế Nếu tất cả các bít reference là 1 thì thuật toán trở thành FIFO Thuật toán có thể cài đặt bằng dslk vòng
Hình 1.7 Thuật toán cơ hội thứ 2
Thuật toán cơ hội thứ 2 nâng cấp (NRU):
Xem các bit reference và dirty bit như một cặp có thứ tự và tạo thành 4 lớp sau :