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

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

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 (490.62 KB, 20 trang )

HaNoi 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
Nguyễn Nhật Bằng
Phan Hà Duy
January 11, 2022
1


MỤC LỤ
Mục tiêu....................................................................................................................
chương I: Tìm hiểu lý thuyết..................................................................................

1.1.Bộ nhớ chính (RAM).......................................................
1.1.1. Tổng quan..................................................................................................
1.1.2. Swapping...................................................................................................
1.1.3. Mơ hình cấp phát khơng liên tục..............................................................

1.2.Bộ nhớ ảo......................................................................
Demand paging.................................................................................................

1.2.1. Page Replacem


1.2.2. Cấp phát số lượng frame (Allocation of frames):.................................

1.2.3. Thrashing.......
CHƯƠNG II: CÀI ĐẶT........................................................................................

2.1.Cài đặt FIFO...................................................................

2.2.Cài đặt LRU.....................................................................

2.3.Cài đặt process..............................................................
Chương III: Mơ phỏng..........................................................................................

3.1.Cấu trúc chương trình...................................................
3.2. Chạy mô phỏng..............................................................................................
Tài liệu tham khảo.................................................................................................

2


DANH MỤC HÌNH ẢNH
HÌNH 1.1. MƠ HÌNH PHÂN TRANG
HÌNH 1.2. CƠ CHẾ MMU TRONG PAGING
HÌNH 1.3. CƠ CHÊ CHUYỂN ĐỔI ĐỊA CHỈ CỦA MMU
HÌNH 1.4. MỘT PAGE TABLE CĨ THÊM TRẠNG THÁI MỖI PHẦN TỬ
HÌNH 1.5. VÍ DỤ VỀ CHỈA SẺ BỘ NHỚ
HÌNH 1.6. QUY TRÌNH XỬ LÝ PAGE FAULT
HÌNH 1.7. THUẬT TỐN CƠ HỘI THỨ 2
HÌNH 1.8. MƠ HÌNH WORKING-SET
HÌNH 3.1. VÍ DỤ VỀ MƠ PHỎNG


MỤC TIÊU
Tìm hiểu về quản lý bộ nhớ trong hệ điều hành
3


Làm quen được với hệ điều hành Linux-Ubuntu Cài
đặt được các thuật tốn trong quản lý bộ nhớ

Mơ phỏng một q 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 tốn và phương pháp đó.

CHƯƠNG I: TÌM HIỂU LÝ THUYẾT
4


Quả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
q 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.
5


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 tồn bộ
q trình sang bộ nhớ phụ và sau đó sao chép trở lại bộ nhớ cùng với thời gian q 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 2 n (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
6


bit 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ý.

7


Hì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ệ (pp 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.

8


Hì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ớ
9


1.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 tồ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.
10


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):
11


Chọ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 tố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 tốn LRU (Least-recently-used):
Thuật tố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ố
ngun khơng dấu thì victim frame là frame có giá trị history nhỏ nhất. Số lượng
12


cá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 tố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 tốn trở thành FIFO. Thuật tố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 :
13



- Lớp 1 (0,0): gồm những page có (ref,dirty)=(0,0). Những page thuộc lớp này
không được truy xuất gần đây và không bị sửa đổi, đây là những paeg tốt nhất
để thay thế.
- Lớp 2 (0,1): page không truy xuất gần đây nhưng đã bị sửa đổi. Trường hợp này
không thật tốt, vì page cần được lưu trữ lại trước khi thay thế.
- Lớp 3 (1,0): page được truy xuất gần đây, nhưng khơng bị sửa đổi. Page có thể
nhanh chóng được tiếp tục được sử dụng.
- Lớp 4 (1,1): page được truy xuất gần đây, và bị sửa đổi. Page có thể nhanh
chóng được tiếp tục được sử dụng và trước khi thay thế cần phải được lưu trữ
lại.
Lớp 1 có độ ưu tiên thấp nhất, và lớp 4 có độ ưu tiên cao nhất. Một page sẽ thuộc về
một trong bốn lớp trên và page được chọn làm victim frame là page đầu tiên tìm
thấy trong lớp có độ ưu tiên thấp nhất.
 Các thuật toán thống kê:
Sử dụng một biến đếm lưu số lần truy xuất đến một trang.
+ Thuật toán LFU (least frequently used): Thay thế page có giá trị biến đếm nhỏ nhất,
nghĩa là page ít được sử dụng nhất.
+ Thuật toán MFU (most frequently used): Thay thế page có giá trị biến đếm lớn
nhất, nghĩa là page được sử dụng nhiều nhất.

1.2.2. Cấp phát số lượng frame (Allocation of frames):
Với mỗi tiến trình, cần phải cấp phát một số frame tối thiểu nào đó để tiến trình có thể
hoạt động. Số frame tối thiểu được qui định bởi kiến trúc máy tính, trong khi số frame tối đa
được xác định bởi dung lượng bộ nhớ vật lý có thể sử dụng.

1.2.2.1.

Các cách cấp phát frame:
 Cấp phát ngang bằng:


Nếu có m frame và n tiến trình, mỗi tiến trình được cấp m/n frame. Cấp phát này đơn
giản nhưng không hiệu quả.
 Cấp phát theo tỉ lệ kích thước:
Tùy vào kích thước của tiến trình để cấp phát số frame.
 Cấp phát theo tỉ lệ độ ưu tiên:
Số lượng frame cấp cho tiến trình phụ thuộc vào độ ưu tiên của tiến trình. Tiến trình có
độ ưu tiên cao sẽ được cấp nhiều frame hơn để tăng tốc độ thực hiện.

1.2.2.2.

Cấp phát toàn cục và cấp phát cục bộ:
 Thay thế toàn cục:
14


Chọn victim frame từ tập tất cả các frame trong hệ thống, frame đó có thể đang được
cấp phát cho một tiến trình khác. Ví dụ có thể chọn trang của tiến trình có độ ưu tiên
thấp hơn làm victim frame. Thuật tốn thay thế tồn cục cho phép hệ thống có nhiều
khả năng lựa chọn hơn, số frame cấp cho một tiến trình có thể thay đổi, nhưng các tiến
trình khơng thể kiểm sốt được tỷ lệ phát sinh page fault của mình.
 Thay thế cục bộ:
Chỉ chọn trang thay thế trong tập các frame được cấp cho tiến trình phát sinh page fault,
khi đó số frame cấp cho một tiến trình sẽ khơng thay đổi.

1.2.3. Thrashing
Khi tiến trình khơng có đủ các frame để chứa những trang cần thiết cho việc xử lý, thì nó
sẽ thường xun phát sinh các page fault, vì thế phải dùng đến rất nhiều thời gian sử dụng CPU
để thực hiện thay thế trang. Hệ điều hành thấy hiệu quả sử dụng CPU thấp sẽ tăng mức độ đa
chương, dẫn đến trì trệ tồn bộ hệ thống. Để ngăn cản tình trạng trì trệ này xảy ra, cần phải cấp
cho tiến trình đủ các frame cần thiết để hoạt động. Vấn đề là làm sao biết được mỗi tiến trình

cần bao nhiêu trang?


Mơ hình Working-set:

Tập làm việc của tiến trình tại thời điểm t là tập các trang được tiến trình truy xuất đến
trong Δ lần truy cập cuối cùng tính tại thời điểm t.

Hình 1.8. Mơ hình Working-set

Gọi WSSi ( Δ , t) là số phần tử của tập working set của tiến trình Pi tại thời điểm t.
m là số frame trống. D = ∑WSSi là tổng số frame yêu cầu cho toàn hệ thống .
Hệ điều hành giám sát working set của mỗi tiến trình Pi và tại thời điểm t sẽ cấp phát cho
tiến
trình Pi số frame bằng với số phần tử trong tập làm việc (WSSi)(Δ, t-1).
Nếu tổng số frame yêu cầu của các tiến trình trong hệ thống vượt q các frame có thể
sử dụng (D>m), thì sẽ xảy ra tình trạng thrashing. Khi đó hệ điều hành chọn một tiến trình để
15


tạm dừng, giải phóng các frame của tiến trình đã chọn để các tiến trình khác có đủ frame hồn
tất cơng việc.

CHƯƠNG II: CÀI ĐẶT
Ở chương này nhóm quyết định sẽ cài đặt và mơ phỏng về 2 thuật tốn thay thế trang là
FIFO và LRU. Để cài đặt 2 thuật toán này bọn em sử dụng 2 kiểu dữ liệu là list và
unordered_map. Kiểu list sẽ tạo ra 1 danh sách liên kết với mục đích là chọn victim
frame theo thứ tự trong danh sách, victim frame được chọn là phần tử ở cuối danh sách
và theo đó phần tử ở đầu danh sách là trang có độ ưu tiên chọn làm victim frame thấp
nhất. Kiểu unordered_map là 1 khoảng chứa 2 thành phần là số hiệu vị trí và danh sách

liên kết để thể hiện sự ánh xạ từ page đến frame.
Cấu trúc chung của 2 thuật toán sẽ bao gồm:
4 thành phần:



dq: Danh sach liên kết thể hiện độ sử dụng của frame.
ma: Map lưu trữ giá trị tham chiếu vào bộ nhớ .
nframe: Số lượng frame cấp phát .
pfault: Biến đếm page fault.


Hàm tạo



void set_frame(int n): Hàm đặt số lượng frame cấp phát cho tiến trình.


void refer(int x): Hàm cấp 1 frame để tiến trình sử dụng và tìm victim
frame để thay thế nếu bộ nhớ đầy.

int get_pfault(): Hàm trả về giá trị page fault sau quá trình chạy và sử
dụng bộ nhớ của tiến trình.

nhớ

void display(): Hàm hiển thị các frame cấp phát đang được đặt trong bộ




void free(): Giải phóng bộ nhớ

Về cơ bản thì 2 thuật tốn FIFO và LRU sử dụng các thành phần và hàm giống nhau
nhưng
sẽ khác nhau ở hàm refer.

2.1. Cài đặt FIFO
Khi thực hiện cấp phát 1 frame, hàm refer thực hiện tìm trong map xem frame đó đã
được nạp vào bộ nhớ chính chưa:

16



Nếu đã được nạp sẵn trong bộ nhớ thì chỉ việc cho tiến trình sử dụng và khơng
cập nhật lại danh sách dq và map ma.


Nếu chưa được nạp trong bộ

nhớ thì thực hiện: Tăng số lượng page
fault lên 1
Kiểm tra danh sách liên kết có chiều dài bằng lượng frame tối đa cấp phát cho
tiến trình khơng. Nếu bằng có nghĩa là bộ nhớ đầy và thực hiện giải thuật FIFO để
tìm ra victim frame, sau đó thay thế trang đó bằng frame được yêu cầu. FIFO
thực hiện xóa phần tử cuối cùng trong dq và ma, theo đó bộ nhớ sẽ trống. Việc
cấp phát 1 frame sẽ thêm frame đó vào đầu dq và ma.
Vì vậy việc đẩy phần tử cận cuối lúc đầu thành phần tử cuối cùng của danh sách và đảm
bảo cơ chế vào trước ra trước.


2.2. Cài đặt LRU
Khi thực hiện cấp phát 1 frame, hàm refer thực hiện tìm trong map xem frame đó đã
được nạp vào bộ nhớ chính chưa:

Nếu đã được nạp sẵn trong bộ nhớ thì xóa phần tử đó khỏi danh sách dq và map
ma rồi sau đó cập nhật lại bằng cách thêm frame yêu cầu vào đầu danh sách.


Nếu chưa được nạp trong bộ

nhớ thì thực hiện: Tăng số lượng page
fault lên 1
Kiểm tra danh sách liên kết có chiều dài bằng lượng frame tối đa cấp phát cho
tiến trình khơng. Nếu bằng có nghĩa là bộ nhớ đầy và thực hiện giải thuật LRU để
tìm ra victim frame, sau đó thay thế trang đó bằng frame được yêu cầu. LRU thưc
hiện xóa phần tử cuối cùng trong dq và ma, bộ nhớ sẽ trống. Frame được yêu
cầu sẽ thêm vào đầu dánh sách.
Phần tử cuối dánh sách sẽ luôn là victim frame, nhưng khi 1 frame nào đó được sử dụng
mà đã có trong bộ nhớ( kể cả phẩn tử cuối ) thì frame đó sẽ được chuyển lên đầu tức là khả
năng bị chọn làm victim frame sẽ thấp nhất.

2.3. Cài đặt process
Do trọng tâm của đề tài là về cơ chế thay thế trang nên nhóm sẽ mơ phỏng 1 tiến trình
hết sức đơn giản, gồm 3 thành phần chính:


id: ID của tiến trình




stat: Trạng thái của tiến trình



Hai kiểu sử dụng bộ nhớ là FIFO và LRU: mem1, mem2

Ứng với mỗi loại bộ nhớ sử dụng mà sẽ có các hàm thực hiện chức năng tương ứng:


Hàm tạo


17




req1/req2: Thực hiện yêu cầu cấp phát bộ nhớ



get_pf1/get_pf2: Tính tốn giá trị page fault sau q trình sử dụng bộ nhớ




disp1/disp2: Hiển thị thơng tin tiến trình
stop: Dừng tiến trình


CHƯƠNG III: MƠ PHỎNG
3.1. Cấu trúc chương trình
Chương trình sẽ thực hiện cho đến khi người dung muốn kết thúc

Khởi tạo 1 tiến trình (cứ mỗi 1 tiến trình khởi tạo trong 1 chương trình sẽ có id
khác nhau)


Đặt số lượng frame tối đa muốn cấp phát cho tiến trình



Lựa chọn loại bộ nhớ muốn sử dụng (bộ nhớ sử dụng FIFO hay LRU ?)



Cấp phát frame cho tiến trình sử dụng


xong

Hiển thị thơng tin tiến trình và số lượng page fault sau quá trình tiến trình chạy



Kết thức tiến trình đang chạy

18



3.2. Chạy mơ phỏng

Hình 3.1. Ví dụ về mơ phỏng
Q trình mơ phỏng sẽ tiếp diễn và tạo ra các tiến trình để người dung tự do mơ phỏng cho đến
khi muốn dừng lại. Mỗi khi kết thúc 1 lần mơ phỏng thì tiến trình sẽ dừng vì vậy giữa các tiến
trình tạo ra sẽ khơng có sự chia sẻ bộ nhớ.

TÀI LIỆU THAM KHẢO
[1]. Ninh Xuân Hải & Huỳnh Trọng Thưa. Giáo trình Hệ điều hành. Học viện cơng nghệ bưu
chính viễn thơng năm 2008.
[2]. Avi Silberschatz, Peter Baer Galvin, Greg Gagne. Operating System Concepts Essentials

Second Edition, 2013.
<

truy cập vào 26/3/2021.

19



×