Lưu đồ thuật toán giải thuật FIFO - Ý tưởng: Thuật toán của em chia thành 2 nhánh chính, nhánh 1 là trước khi bảng trang còn trống để có thể thêm lỗi, nhánh 2 là bảng trang đã đầy và phả
Trang 1Name: Trần Quốc Bảo
ID: 20521110
Class: IT007.M13
OPERATING SYSTEM LAB X’S REPORT
Trang 2BÀI THỰC HÀNH 6
Câu 1: Vẽ lưu đồ, giải thích và hiện thực lại 3 giải thuật FIFO, OPT, LRU theo yêu cầu trong phần 6.4
- Lưu đồ thuật toán FIFO
Hình 1 Lưu đồ thuật toán giải thuật FIFO
- Ý tưởng: Thuật toán của em chia thành 2 nhánh chính, nhánh 1 là trước khi bảng trang còn trống để có thể thêm lỗi, nhánh 2 là bảng trang đã đầy và phải chọn ra phần tử để thay thế Trước khi thêm hoặc chọn phần tử để “hy sinh” thì ta đều phảikiểm tra xem trong bảng đã tồn tại lỗi đó hay chưa?
Trang 3Hình 2 Giải thích lưu đồ giải thuật FIFO.
- Lưu đồ giải thuật LRU
Trang 4Hình 3 Lưu đồ giải thuật LRU
- Ý tưởng: Ở giải thuật này em cũng chia thành 2 nhánh chính, nhánh thứ nhất là trường hợp trong bảng trang chưa đầy, và trường hợp 2 là bảng trang đã đầy Ngoài ra, em có tạo thêm một kiểu dữ liệu để có thể lưu lại vị trí của nó để
thuận tiện cho việc tìm được lỗi lâu sử dụng nhất
- Trường hợp 1: Sẽ kiểm tra sự tồn tại của những phần tử có trong bảng, nếu không
có sẽ thêm vào, còn nếu có rồi thì sẽ cập nhật vị trí
- Trường hợp 2: Cũng sẽ kiểm tra sự tồn tại của phần tử đó trong bảng, nếu không
có sẽ chọn ra phần tử có vị trí nhỏ nhất, vì vị trí nhỏ nhất tức là thời gian bị sử dụng lại lâu nhất, ta sẽ dùng phần tử đó để hy sinh và thay thế
Trang 5Hình 4 Giải thích về các phần trong lưu đồ thuật toán LRU
- Lưu đồ thuật toán OPT:
Trang 6Hình 5 Lưu đồ thuật toán OPT
- Ý nghĩa: Ở thuật toán này, em sẽ chia thành 3 phần chính, vì có thêm một trườnghợp là trong tương lai một lỗi nào đó sẽ không trùng lại Và mỗi lần kiểm tra lỗi thì đều cập nhật lại vị trí của lỗi đó trong tương lai
- Phần 1: Sẽ kiểm tra bảng trang, nếu chưa đầy thì sẽ thêm các lỗi vào và cập nhật giá trị ViTri cho nó
- Phần 2: Nếu bảng trang đã đầy, sẽ ưu tiên thay thế cho các phần tử có ViTri = -1,những phần tử này sẽ không bị trùng lặp trong tương lai
- Phần 3: Kiểm tra và cập nhật lại vị trí cho các phần tử trong tương lai sau mỗi lần kiểm tra lỗi Và sau đó kiểm tra phần tử có ViTri=-1 để thay thế trước, sau đó mới
ưu tiên những phần tử lâu sử dụng nhất trong tương lai sau
Trang 7Hình 8 Giải thích lưu đồ thuật toán OPT
Trang 8Hình 9 Khởi tạo kiểu dữ liệu khung trang, hàm xuất dữ liệu
Hình 10 Hàm thêm dữ liệu vô mảng, xuất mảng 2 chiều
Trang 9Hình 11 Hàm thêm dữ liệu vào queue.
Hình 12 Hàm kiểm tra tồn tại và giải thuật FIFO
Trang 10Hình 13 Sau khi kiểm tra phần tử trong khung trang, thêm dữ liệunếu khung trang chưa đầy và kiểm tra tồn tại để pop phần tử đầu tiên
trong queue
Hình 14 Giải thuật LRU, hàm addElement khác hàm add của FIFO ở chỗ FIFOdùng queue, còn LRU chỉ cần dùng một mảng để lưu giá trị và vị trí
Trang 11Hình 15 Kiểm tra kích thước khung trang, nếu chưa đầy và không có phần tử trùng thìthêm vào, còn nếu có rồi thì chỉ cần cập nhật lại vị trí Nếu khung trang đã đầy thì kiểm
tra trùng và cập nhật vị trí
Hình 16 Xuất ra kết quả giải thuật LRU, bắt đầu giải thuật OPT findMaxPos để tìm
kiếm phần tử có vị trí lớn nhất để được chọn thay thế
Trang 12Hình 17 isArrExists để kiểm tra sự tồn tại của một giá trị nào đó trong mảng, hàmisEExistsPos là kiểm tra xem khung trang có tồn tại phần tử có vị trí pos hay không.
Hình 18 Xử lý dữ liệu nhập vào giải thuật OPT Kiểm tra kích thước bảng trang, nếuchưa đầy thì kiểm tra sự tồn tại của phần tử đó để quyết định thêm phần tử, với trường
hợp đầy bảng, chọn phần tử thay thế có độ ưu tiên theo vị trí
Trang 13Hình 19 Kiểm tra trong bảng trang (đầy), nếu có phần tử nào ít được sửdụng trong tương lai nhất sẽ được chọn để thay thế và đánh lỗi.
Hình 20 Xuất mảng 2 chiều gồm bảng trang và xuất ra số lỗi có trong bảng Một
phương thức chính được sử dụng trong hàm main
Trang 14Hình 21 Hàm main, nhập dữ liệu và chọn ra bảng trang mặc định hoặc bảng trang tự
nhập
Hình 22 Kiểm tra chọn lựa và trả về thuật toán yêu cầu
Trang 15- Các test case:
- Trường hợp test case default:
Hình 23 Giải thuật FIFO với test case default
- Chạy tay:
22
*
- Vậy số lỗi là 5, giống như giải thuật
Trang 16Hình 24 Giải thuật OPT với test case default.
- Chạy tay:
22
*
- Số lỗi là 5, quá trình chạy giống như code
Trang 17Hình 25 Giải thuật LRU với test case default.
Trang 18Hình 26 Test case manual 1 – FIFO
- Chạy tay:
22
*
- Số lỗi là 4, code có đáp án giống với test case
Trang 19- Chạy tay:
22
*
- Có tổng cộng 8 lỗi , bảng trang giống kết quả của code
- Chạy tay:
33
*
Trang 20-*
- Số lỗi bảng trang là 7: Kết quả nhận được giống với code
Trang 21- Chạy tay:
33
*
- Số lỗi trang : 4, kết quả của chạy tay trùng với code
Hình 31 Mutual test 3 – OPT
- Chạy tay:
55
*
- Số lỗi : 5 , kết quả chạy tay giống với đáp án của code
Trang 22Hình 32 Mutual test 1 – LRU
- Chạy tay:
66
*
- Số lỗi là 8, kết quả của chạy tay trùng với đáp án của code
Hình 33 Mutual test case 2 – LRU
Trang 23- Chạy tay:
33
*
- Số lỗi xảy ra: 9, Kết quả trùng với code nhận được
Hình 34 Mutual test 3 – LRU
- Chạy thử:
33
*
- Số lỗi 7 , kết quả chạy giống với kết quả của code
Trang 24Câu 2: Thực hiện những câu hỏi trong phần 6.5
1. Nghịch lý Belady là gì? Sử dụng chương trình đã viết trên để chứng minh nghịch lý này.
- Trả lời: Nghịch lý Belady phát biểu như sau: Số lỗi trang (page fault) tăng lên
mặc dù quá trình đã được cấp nhiều frame hơn
- Chứng minh: Ta xét với chuỗi 1 2 3 4 1 2 5 1 2 3 4 5
o Trường hơp 1: Với 3 khung trang
Hình 35 Thử nghịch lý Belady với 3 khung trang
Ta thấy, với trường hợp 3 khung trang thì có 9 lỗi xảy ra
o Trường hợp 2: Với 4 khung trang
Hình 36 Thử nghịch lý Belady với 4 khung trang
Trang 25Ta thấy, với trường hợp 4 khung trang thì có 10 lỗi xảy ra.
Nghịch lý Belady đúng
2. Nhận xét về mức độ hiệu quả và tính khả thi của các giải thuật
FIFO, OPT, LRU.
a. Giải thuật nào là bất khả thi nhất? Vì sao?
b. Giải thuật nào là phức tạp nhất? Vì sao?
a. Giải thuật bất khả thi nhất là OPT, vì ta không thể đoán được trước là có những lỗinào sẽ xảy ra để có thể đoán được vị trí lặp lại lâu nhất trong tương lai
b. Giải thuật phức tạp nhất là OPT, vì phải kiểm tra và cập nhật lại vị trí của các lỗi trong tương lai sau mỗi lần kiểm tra lỗi, trong khi LRU thì chỉ cần cập nhật lại vị trí hiện tại nếu trùng lặp và thay thế nếu có vị trí nhỏ nhất FIFO thìchỉ cần kiểm tra trùng lặp và pop ra khỏi queue
25