- Mảng 1 chiều reference chứa các số của trang.- Mảng 1 chiều buffer chứa các số trang trong các khung trang khởi tạo ban đầu bằng -1.- Khai báo mảng 2 chiều mem_layout có số cột là số c
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG
BÁO CÁO BÀI TẬP LỚN NGUYÊN LÝ HỆ ĐIỀU HÀNH
Đề tài: Viết chương trình minh hoạ cho các giải thuật quản lý
bộ nhớ theo phương pháp phân trang
Giảng viên hướng dẫn: TS Đỗ Quốc Huy
Sinh viên thực hiện: 1 Nguyễn Minh Hiếu 20194049
2 Chu Hoàng Tường 20194209
3 Nguyễn Trung Kiên 20194086
4 Trần Duy Hùng 20194070
5 Hoàng Minh Hưởng 20194075
Hà Nội
Trang 2Mục lục
I GIỚI THIỆU ĐỀ TÀI 2
II NỘI DUNG CHÍNH 2
1 Nguyên tắc 2
2 Chú ý 3
3 Phân biệt chiến lược phân trang – phân đoạn 3
4 Thực hiện chương trình 4
a Nạp chương trình vào bộ nhớ 4
b Truy cập bộ nhớ 4
5 Chuyển đổi địa chỉ 6
6 Nạp trang và thay thế trang 6
7 Ưu điểm 7
8 Nhược điểm 7
III MIÊU TẢ CHƯƠNG TRÌNH 7
1 Thuật toán FIFO (First in first out): 7
2 Thuật toán OPT (Chiến lược tối ưu/Optimal): 8
3 Thuật toán LRU (Last-recently-used): 9
IV MIÊU TẢ GIAO DIỆN CHƯƠNG TRÌNH 10
1 Màn hình chính 10
2 Truy cập địa chỉ 11
3 Nạp và thay thế trang theo 3 thuật toán trên 12
V TÀI LIỆU THAM KHẢO 12
Trang 3I GIỚI THIỆU ĐỀ TÀI
- Tên đề tài: Viết chương trình minh hoạ cho các giải thuật quản lý bộ nhớ theo
phương pháp phân trang
- Tổng quan:
Phân trang là một phương pháp quản lý bộ nhớ được sử dụng bởi hệ điều hành Phân trang cho phép bộ nhớ chính sử dụng dữ liệu nằm trên thiết bị lưu trữ phụ Những dữ liệu này được lưu trữ trong thiết bị lưu trữ thứ cấp dưới dạng các khối có cùng kích thước được gọi là trang Phân trang cho phép hệ điều hành sử dụng dữ liệu không vừa với bộ nhớ chính Khi một chương trình cố gắng truy cập một trang, trước tiên, bảng trang được kiểm tra để xem liệu trang đó có trên bộ nhớ chính hay không Bảng trang chứa thông tin chi tiết về nơi các trang được lưu trữ Nếu nó không có trong bộ nhớ chính, nó được gọi là lỗi trang Hệ điều hành chịu trách nhiệm xử lý các lỗi trang mà không hiển thị cho chương trình Trước tiên, hệ điều hành sẽ tìm nơi lưu trữ trang cụ thể đó trong bộ nhớ thứ cấp và sau đó đưa nó vào khung trang trống trong bộ nhớ chính Sau đó, nó cập nhật bảng trang để chỉ ra rằng dữ liệu mới nằm trong bộ nhớ chính và trả điều khiển trở lại chương trình đã yêu cầu trang lúc đầu
II NỘI DUNG CHÍNH
1 Nguyên tắc
- Bộ nhớ vật lý được chia thành từng khối có kích thước bằng nhau : trang vật lý (frames – khung trang)
Trang vật lý được đánh số 0,1,2, : địa chủ vật lý của trang
Trang được dùng làm đơn vị phân phối nhớ
- Bộ nhớ logic (chương trình )được chia thành từng trang có kích thước bằng trang vật lý : trang logic ( pages )
- Khi thực hiện chương trình
Nạp trang logic (từ bộ nhớ ngoài) vào trang vật lý
Xây dựng một bảng quản lý trang (PCB: Page Control Block) dùng
để xác định mối quan hệ giữa trang vật lý và trang logic
Mỗi phần tử của PCB ứng với một trang chương trình: Cho biết trang vật lý chứa trang logic tương ứng
Địa chỉ truy nhập được chia thành
• Số hiệu trang (p) : Chỉ số trong PCB để tìm địa chỉ cơ sở trang
• Độ lệch trong trang (d): Kết hợp địa chỉ cơ sở của trang để tìm
ra địa chỉ vật lý
Trang 42 Chú ý
- Dung lượng trang luôn là lũy thừa của 2
Cho phép ghép giữa số hiệu trang vật lý và độ lệch trong
trang
Ví dụ: Bộ nhớ n bit, kích thước trang 2k
- Không cần thiết nạp toàn bộ trang logic vào
Số trang vật lý phụ thuộc kích thước bộ nhớ, số trang logic tùy ý
PCB cần trường dấu hiệu (Mark) cho biết trang đã được nạp vào bộ nhớ chưa
+ M = 0 Trang chưa tồn tại
+ M = 1 Trang đã được đưa vào bộ nhớ vật lý
- Phân biệt chiến lược phân trang - phân đoạn
Chiến lược phân đoạn
- Các modul phụ thuộc cấu trúc logic của chương trình
- Chiến lược phân trang
- Các khối có kích thước độc lập kích thước chương trình
- Kích thước khối phụ thuộc phần cứng (VD: 29 → 213 bytes)
3 Phân biệt chiến lược phân trang – phân đoạn
Cơ sở để Phân trang Phân đoạn
Trang 5so sánh
Căn bản Một trang có kích thước khối cố định. Một phân đoạn có kích thước thay đổi Phân
mảnh Phân trang có thể dẫn đến phân mảnh nội bộ Sự phân mảnh có thể dẫn đến sự phân mảnh bên ngoài Địa chỉ Địa chỉ do người dùng chỉ định được CPU chia thành số trang
và phần bù
Người dùng chỉ định mỗi địa chỉ bằng hai đại lượng là số phân đoạn và độ lệch (Giới hạn phân đoạn)
Kích
thước
Phần cứng quyết định kích
thước trang
Kích thước phân đoạn được chỉ định bởi người dùng
Bảng Phân trang liên quan đến một bảng trang có chứa địa chỉ cơ
sở của mỗi trang
Phân đoạn liên quan đến bảng phân đoạn
có chứa số phân đoạn và độ lệch (độ dài phân đoạn)
4 Thực hiện chương trình
a Nạp chương trình vào bộ nhớ
Trang 6- Nạp chương trình: Xây dựng bảng quản lý trang và luôn giữ trong bộ nhớ PTBR (Page-table base register) trỏ tới PCB
PTLR(Page-table length register) kích thước PCB
-Thực hiện truy nhập
Địa chỉ truy nhập được chia thành dạng <p, d>
PTBR + p K : Địa chỉ phần tử p của PCB trong bộ nhớ∗
K Kích thước 1 phần tử của PCB
Kiểm tra Mp
Mp = 0 : Lỗi trang, sinh một ngắt để tiến hành nạp trang
Xin trang vật lý tự do (Hết trang tự do?)
Tìm kiếm trang logic ở bộ nhớ ngoài và nạp trang
Sửa lại trường địa chỉ A và dấu hiệu M
Mp = 1 : Trang đã tồn tại,
Lấy Ap ghép với d ra địa chỉ cần tìm
Trang 75 Chuyển đổi địa chỉ
6 Nạp trang và thay thế trang
-Nhận xét
Số trang vật lý dành cho chương trình lớn
Thực hiện nhanh nhưng hệ số song song giảm
Số trang vật lý dành cho chương trình bé
Hệ số song song cao nhưng thực hiện chậm do hay thiếu
trang
⇒ Hiệu quả phụ thuộc các chiến lược nạp trang và thay thế trang
-Các chiến lược nạp trang
Nạp tất cả: Nạp toàn bộ chương trình
Nạp trước: Dự báo trang cần thiết tiếp theo
Nạp theo yêu cầu: Chỉ nạp khi cần thiết
-Các chiến lược thay thế trang
FIFO First In First Out
LRU Least Recently Used
LFU Least Frequently Used
Trang 8.
7 Ưu điểm
- Tăng tốc độ truy nhập
Hai lần truy nhập bộ nhớ (vào PCB và vào địa chỉ cần tìm)
Thực hiện phép ghép thay vì phép cộng
- Không tồn tại hiện tượng phân đoạn ngoài
- Hệ số song song cao
Chỉ cần một vài trang của chương trình trong bộ nhớ
Cho phép viết chương trình lớn tùy ý
- Dễ dàng thực hiện nhiệm vụ bảo vệ
Địa chỉ truy nhập hợp lệ (vượt quá kích thước)
Tính chất truy nhập (đọc/ghi)
Quyền truy nhập (user/system)
- Cho phép sử dụng chung trang
8 Nhược điểm
- Tồn tại hiện tượng phân đoạn trong
Luôn xuất hiện ở trang cuối cùng
Giảm hiện tượng phân đoạn trang bởi giảm kích thước trang ?
Hay gặp lỗi trang
Bảng quản lý trang lớn
- Đòi hỏi hỗ trợ của phần cứng
Chi phí cho chiến lược phân trang lớn
- Khi chương trình lớn, bảng quản lý trang nhiều phần tử
Chương trình 232, k/thước trang 212 -> PCB có 220 phần tử
Tốn bộ nhớ lưu trữ PCB
Giải quyết: Trang nhiều mức
III MIÊU TẢ CHƯƠNG TRÌNH
- Chọn frame của process sẽ được thay thế trang nhớ
- Mục tiêu: số lượng page-fault nhỏ nhất
- Được đánh giá bằng cách thực thi giải thuâ ~t đói với mỗi chuỗi tham chiếu bô ~ nhớ( memory reference string) và xác định số lần xảy ra page fault
1 Thuật toán FIFO (First in first out):
- Khai báo biến frames chứa số khung trang
- Khai báo biến ref_len chỉ độ dài của trang
Trang 9- Mảng 1 chiều reference chứa các số của trang.
- Mảng 1 chiều buffer chứa các số trang trong các khung trang khởi tạo ban đầu bằng -1
- Khai báo mảng 2 chiều mem_layout có số cột là số các số của trang và số hàng là
số khung trang
- Khai báo biến fault tính số lỗi trang khởi tạo ban đầu bằng 0
- Cho vòng lặp i chạy từ 0 đến độ dài của trang:
+ Khởi tạo biến search = -1
+ Cho vòng lặp j chạy từ 0 đến số khung trang:
Nếu số của trang đã nằm trong các khung trang thì dừng vòng lặp và cho biến search = j ( là vị trí khung trang mà số của trang chính đã nằm vào
Nếu biến search vẫn bằng -1 (nghĩa là không có số nào của khung trang chính nằm trong các khung trang) thì ta thêm số của trang vào khung trang chứa số tồn tại lâu nhất Tăng lỗi trang lên thêm 1 lỗi Lưu lại các số trong khung trang tại vị trí thứ i
2 Thuật toán OPT (Chiến lược tối ưu/Optimal):
- Khai báo biến frames chứa số khung trang.
- Khai báo biến ref_len chỉ độ dài của trang
- Khai báo biến numFault chỉ vị trí số cần thay thế
- Khai báo biến isFull kiểu bool mặc định bằng false
- Mảng 1 chiều kiểu bool hit với độ bằng độ dài của trang
- Mảng 1 chiếu reference chứa các số của trang
- Mảng 1 chiều buffer chứa các số trong các khung trang khởi tạo tất cả bằng -1
- Khai báo mảng 2 chiều mem_layout có số cột là số các số của trang và số hàng là
số khung trang
- Mảng 1 chiều fault chứa các vị trị trí trang lỗi
- Cho vòng lặp i chạy từ 0 đến độ dài trang:
+ Khởi tạo biến search = -1
+ Cho vòng lớp j chạy từ 0 đến số khung trang:
Nếu số thứ j của trang đã nằm trong các khung trang thì cho biến search = j và giá trị mảng hit tại vị trí i bằng true và giá trị của mảng fault tại vị trí i bằng numFault và dừng vòng lặp
+ Nếu biến search = -1:
Nếu biến isFull có giá trị true:
* Khởi tạo 1 mảng index có độ dài bằng số khung trang
* Khởi tạo 1 mảng kiểu bool index_flag có độ dài bằng số khung trang
* Cho vòng lặp j chạy từ i+1 đến độ dài trang:
Cho vòng lặp k chạy từ 0 đến số khung trang:
Trang 10- Nếu giá trị của mảng reference tại vj trí j bằng giá trị của mảng buffer tại vị trí k ta cho giá trị mảng index tại k bằng j và giá trị mảng index_flag tại vị trí k bằng true rồi dừng vòng lặp
* Khởi tạo biến max bằng giá trị của mảng index tại ví trí đầu tiên
* Khởi tạo biến pointer bằng 0
* Nếu max bằng 0 ta gán maxx bằng 200
* Cho vòng lặp j chạy từ 0 đến số khung trang
Nếu giá trị của mảng index tại vị trí j bằng 0 thì ta gán lại bằng 200
Nếu giá trị của mảng index tại vị trí j lớn hơn max ta gán max bằng giá trị của mảng tại vị trí j và cho biến pointer gán giá trị j
Gán giá trị mảng buffer tại vị trí pointer bằng số của trang tại vị trí i Tăng biến numFault thêm 1 đơn vị
Gán giá trị mảng fault tại vị trí I bằng numFault
Nếu biến isFull bằng false:
* Tăng biến pointer thêm 1 đơn vị
* Nếu biến pointer bằng bằng số khung trang ta gán pointer bằng 0 và gán biến isFull bằng true
+ Lưu lại các số trong khung trang tại vị trí thứ i
3 Thuật toán LRU (Last-recently-used):
- Khai báo biến frames chứa số khung trang
- Khai báo biến ref_len chỉ độ dài của trang
- Mảng 1 chiều reference chứa các số của trang
- Mảng 1 chiều buffer chứa các số trang trong các khung trang khởi tạo ban đầu bằng -1
- Khai báo biến kiểu bool isFull ban đầu bằng false
- Khai báo mảng 2 chiều mem_layout có số cột là số các số của trang và số hàng là
số khung trang
- Khai bảo 1 stack có kiểu số nguyên
- Khai báo biến fault tính số lỗi trang khởi tạo ban đầu bằng 0
- Cho vòng lặp i chạy từ 0 đến độ dài của trang:
+ Nếu stack đã chứa số thứ i của trang:
Tìm phần tử thứ i của mảng reference rồi loại bỏ
+ Thêm vào stack phần tử thứ i của mảng reference
+ Khai báo biến search khởi tạo bằng -1
+ Cho vòng lặp j chạy từ 0 đến số khung trang:
* Nếu giá trị của mảng buffer tại vị trí j bằng giá trị của mảng reference tại vị trí i thì gán search bằng j và dừng vòng lặp
+ Nếu biến search vẫn bằng -1:
* Nếu biến isFull có giá trị true:
Trang 11- Khai báo biến min_loc là độ dài của trang.
- Cho vòng lặp j chạy từ 0 đến số khung trang:
Nếu stack chứa giá trị thứ j của mảng buffer thì: + Khai báo biến temp có giá trị bằng giá trị của mảng buffer tại vị trí j
+ Nếu temp bé hơn min_loc ta gán min_loc bằng temp và gán pointer bằng j
* Gán giá trị của mảng buffer tại vị trí pointer bằng số thứ i của trang
* Tăng biến fault thêm 1 đơn vị
* Tăng biến pointer thêm 1 đơn vị
* Nếu pointer bằng số khung trang ta gán pointer bằng 0 và gán biến isFull bằng true
+ Lưu lại các số trong khung trang tại vị trí thứ i
IV MIÊU TẢ GIAO DIỆN CHƯƠNG TRÌNH
1 Màn hình chính
Trang 122 Truy cập địa chỉ
Trang 133 Nạp và thay thế trang theo 3 thuật toán trên
V TÀI LIỆU THAM KHẢO
1 Slide bài giảng “Nguyên lý hệ điều hành” – Viện Công nghệ thông tin & Truyền thông – Trường Đại học Bách khoa Hà Nội
2.https://campuscoke.blogspot.com/p/campuscoke.html?
fbclid=IwAR31wDGH76_nDvrsV2Au6BoFf3ePOBIt0y0OmUpxhCzRKyU1JLC HQZLy1v4