Bài tập môn OS concepts Điều phối tiến trình: Bài 1. VCT xác định kết quả điều phối tiến trình & thời gian chờ trung bình theo thuật toán FCFS, với tập tiến trình cần xử lý được mô tả trong file văn bản INPUT.TXT theo dạng: tiến trình thứ K có thời điểm vào và thời gian xử lý là 2 số nguyên ở dòng K. Ví dụ, nội dung file văn bản là: 0 24 1 3 2 3 thì có 3 tiến trình cần xử lý, trong đó tiến trình P1 có thời điểm vào là 0 & thời gian xử lý là 24, tương tự tiến trình P2 có thời điểm vào là 1 và P3 là 2 – cả hai cùng có thời gian xử lý là 3. Bài 2. VCT xác định kết quả điều phối tiến trình & thời gian chờ trung bình theo thuật toán Round Robin, Tập tiến trình cần xử lý được mô tả trong file văn bản INPUT.TXT theo dạng như trên – riêng dòng cuối cùng của file lưu giá trị quantum. Bài 3. VCT xác định kết quả điều phối tiến trình & thời gian chờ trung bình theo thuật toán điều phối SJF độc quyền và không độc quyền. Tập tiến trình cần xử lý được mô tả trong file văn bản INPUT.TXT theo dạng như câu 1.
Trang 1Bài tập môn OS concepts Điều phối tiến trình:
Bài 1 VCT xác định kết quả điều phối tiến trình & thời gian chờ trung bình theo thuật toán FCFS, với tập tiến trình cần xử lý được mô tả trong file văn bản
INPUT.TXT theo dạng: tiến trình thứ K có thời điểm vào và thời gian xử lý là 2 số nguyên ở dòng K
Ví dụ, nội dung file văn bản là:
0 24
1 3
2 3
thì có 3 tiến trình cần xử lý, trong đó tiến trình P1 có thời điểm vào là
0 & thời gian xử lý là 24, tương tự tiến trình P2 có thời điểm vào là 1
và P3 là 2 – cả hai cùng có thời gian xử lý là 3.
Bài 2 VCT xác định kết quả điều phối tiến trình & thời gian chờ trung bình theo
thuật toán Round Robin, Tập tiến trình cần xử lý được mô tả trong file văn bản INPUT.TXT theo dạng như trên – riêng dòng cuối cùng của file lưu giá trị quantum
Bài 3 VCT xác định kết quả điều phối tiến trình & thời gian chờ trung bình theo
thuật toán điều phối SJF độc quyền và không độc quyền Tập tiến trình cần xử lý được mô tả trong file văn bản INPUT.TXT theo dạng như câu 1
Bài 4 VCT xác định kết quả điều phối tiến trình & thời gian chờ trung bình theo
thuật toán điều phối với độ ưu tiên độc quyền với tập tiến trình cần xử lý được mô
tả trong file văn bản INPUT.TXT theo dạng tương tự câu 1 – nhưng mỗi dòng có 3 con số và số thứ ba là độ ưu tiên của tiến trình tương ứng
Bài 5 Xét 3 tiến trình A, B, C liên tục xuất ra các ký tự ‘A’, ‘B’, ’C’ tại các dòng
1, 2, 3 (khi xuất tới cuối dòng thì xóa cả dòng và xuất lại ở đầu dòng) Hãy xây dựng hệ thống giả lập điều phối 3 tiến trình theo thuật toán RR, biết thời điểm vào tương ứng của 3 tiến trình là 0, 10, 20 và trong khoảng thời gian quantum số ký tự xuất ra được của 3 tiến trình tương ứng là 1, 2, 3
Trang 2Liên lạc tiến trình:
Bài 6 Tạo ra 2 tiến trình Tiến trình thứ nhất đọc từ file nhiều chuỗi liên tiếp, mỗi
chuỗi gồm các phép toán +, -, *, / và hai toán hạng
Ví dụ trong file sẽ lưu các chuỗi dạng như sau :
2 + 3
1 - 2
4 * 6
15 / 3
Sau đó tiến trình thứ nhất truyền các chuỗi dữ liệu này cho tiến trình thứ hai Tiến trình thứ hai thực hiện tính toán và trả chuỗi kết quả về lại cho tiến trình đầu tiên để ghi lại vào file như sau:
2 + 3 = 5
1 - 2 = -1
4 * 6 = 24
15 / 3 =5
Thực hiện bài toán dùng message queue để giao tiếp giứa 2 quá trình
Quản lý bộ nhớ:
Bài 7 Xây dựng chương trình mô phỏng trực quan việc cấp phát liên tiếp với phân
vùng cố định sử dụng nhiều hàng đợi Số phân vùng, kích thước từng phân vùng tự thiết kế cho phù hợp; các tiến trình và kích thước tương ứng được phát sinh ngẫu nhiên (và thời điểm giải phóng cũng được random sao cho hợp lý)
Bài 8 Tương tự bài trên với phân vùng cố định sử dụng một hàng đợi
Bài 9 Tương tự bài trên với phân vùng động & thuật toán First – fit
Bài 10 Tương tự bài trên với phân vùng động & thuật toán Best – fit
Đồng bộ:
(Semaphore)
Bài 11 Viết chương trình giải quyết bài toán 5 triết gia ăn tối Chương trình phải
tạo ra 5 quá trình con mô phỏng hoạt động của 5 triết gia Dùng semaphore để đồng bộ hoạt động của 5 triết gia này
Bài 12 Bài toán Tạo phân tử H2O
Đồng bộ hoạt động của một phòng thí nghiệm sử dụng nhiều tiến trình đồng hành sau để tạo các phân tử H2O:
MakeH() // Mỗi tiến trình MakeH tạo 1 nguyên tử H
{
Make-Hydro();
}
MakeO() // Mỗi tiến trình MakeO tạo 1 nguyên tử O
{
Trang 3Make-Oxy();
}
MakeWater() /* Tiến trình MakeWater hoạt động đồng hành
với các tiến trình MakeH, MakeO, chờ có đủ 2 H và 1 O để tạo H2O */ {
while (T)
Make-Water(); //Tạo 1 phân tử H2O
}
Bài 13 Bài toán Cây cầu cũ
Để tránh sụp đổ, người ta chỉ có cho phép tối đa 3 xe lưu thông đồng thời
qua một cây cầu rất cũ Hãy xây dựng thủ tục ArriveBridge(int direction)
và ExitBridge() kiểm soát giao thông trên cầu sao cho :
Tại mỗi thời điểm, chỉ cho phép tối đa 3 xe lưu thông trên cầu
Tại mỗi thời điểm, chỉ cho phép tối đa 3 xe lưuthông cùng hướng
trên cầu
Mỗi chiếc xe khi đến đầu cầu sẽ gọi ArriveBridge(direction) để kiểm tra điều kiện lên cầu, và khi đã qua cầu được sẽ gọi ExitBridge() để báo hiệu
kết thúc
Giả sử hoạt động của mỗi chiếc xe được mô tả bằng một tiến trình Car()
sau đây:
Car(int direction) /* direction xác định hướng di chuyển của mỗi
chiếc xe.*/
{ RuntoBridge(); // Đi về phía cầu
ArriveBridge(direction);
PassBridge(); // Qua cầu
Exit Bridge();
RunfromBridge(); // Đã qua cầu }
Bài 14 Bài toán Qua sông
Để vượt qua sông, các nhân viên Microsof và các Linux hacker cùng sử dụng một bến sông và phải chia sẻ một số thuyền đặc biệt Mỗi chiếc thuyền này chỉ cho phép chở 1 lần 4 người, và phải có đủ 4 người mới khởi hành được Để bảo đảm an toàn cho cả 2 phía, cần tuân thủ các luật sau :
a Không chấp nhận 3 nhân viên Microsoft và 1 Linux hacker trên cùng một chiếc thuyền
b Ngược lại, không chấp nhận 3 Linux hacker và 1 nhân viên Microsoft trên cùng một chiếc thuyền
c Tất cả các trường hợp kết hợp khác đều hợp pháp
d Thuyền chỉ khởihành khi đã có đủ 4 hành khách
Cần xây dựng 2 thủ tục HackerArrives() và EmployeeArrives() được gọi
tương ứng bởi 1 hacker hoặc 1 nhân viên khi họ đến bờ sông để kiểm tra điều kiện có cho phép họ xuống thuyền không ? Các thủ tục này sẽ sắp xếp
Trang 4những người thích hợp có thể lên thuyền Những người đã được lên thuyền khi thuyền chưa đầy sẽ phải chờ đến khi người thứ 4 xuống thuyền mới có thể khởi hành qua sông (Không quan tâm đến số lương thuyền hay việc thuyền qua sông rồi trở lại…Xem như luôn có thuyền để sắp xếp theo các yêu cầu hợp lệ)
Giả sử hoạt động của mỗi hacker được mô tả bằng một tiến trình Hacker()
sau đây:
Hacker()
{
RuntoRiver(); // Đi đến bờ sông
HackerArrives (); // Kiểm tra điều kiện xuống thuyền
CrossRiver(); // Khởi hành qua sông }
và hoạt động của mỗi nhân viên được mô tả bằng một tiến trình
Employee() sau đây:
Employee()
{
RuntoRiver(); // Đi đến bờ sông
EmployeeArrives (); // Kiểm tra điều kiện xuống thuyền
CrossRiver(); // Khởi hành qua sông }
Bài 15 Bài toán Điều phối hành khách xe bus
Hãy tưởng tượng bạn chịu trách nhiệm kiểm soát hành khách lên xe bus tại một trạm dừng
Mỗi xe bus có đủ chỗ cho 10 hành khách Trong đó 4 chỗ chỉ dành cho khách ngồi xe lăn, 6 chỗ còn lại chỉ dành cho khách bình thường
Công việc của bạn là cho khách lên xe theo đúng qui định chỗ, khi xe đầy khách sẽ khởi hành Có thể có nhiều xe và nhiều hành khách vào bến cùng lúc, nguyên tắc điều phối sẽ xếp khách vào đầy một xe, cho xe này khởi hành rồi mới điều phối cho xe khác
Giả sử hoạt động điều phối khách của bạn cho 1 chiếc xe bus được mô tả
qua tiến trình GetPassengers(); hoạt động của mỗi hành khách tùy loại được mô tả lần lượt bằng tiến trình WheelPassenger() và
NonWheelPassenger() sau đây , hãy sửa chữa các đoạn code, sử dụng cơ
chế semaphore để thực hiện các nguyên tắc đồng bộ hoá cần thiết
GetPassenger()
{
ArriveTerminal(); // tiếp nhận một xe vào bến OpenDoor(); // mở cửa xe, thủ tục này xem như đã có for (int i=0; i<4; i++) // tiếp nhận các hành khách ngồi xe lăn {
ArrangeSeat(); // đưa 1 khách vào chỗ }
Trang 5for (int i=0; i<6; i++) // tiếp nhận các hành khách bình thường {
ArrangeSeat(); // đưa 1 khách vào chỗ }
CloseDoor(); // đóng cửa xe, thủ tục này xem như đã có DepartTerminal(); // cho một xe rời bến
}
WheelPassenger()
{
ArriveTerminal(); // đến bến GetOnBus(); // lên xe
}
NonWheelPassenger()
{
ArriveTerminal(); // đến bến GetOnBus(); // lên xe
}
Bài 16 Bài toán sản xuất thiết bị xe hơi
Hãng Pontiac có 2 bộ phận hoạt động song song :
- Bộ phận sản xuất 1 khung xe :
MakeChassis() { // tạo khung xe Produce_chassis();
}
- Bộ phận sản xuất 1 bánh xe :
MakeTires() { // tạo bánh xe và gắn vào khung xe
Produce_tire();
Put_tire_to_Chassis();
} Hãy đồng bộ hoạt động trong việc sản xuất xe hơi theo nguyên tắc sau :
o Sản xuất một khung xe,
o cần có đủ 4 bánh xe cho 1 khung xe được sản xuất ra, sau đó mới tiếp tục sản xuất khung xe khác…
Deadlock:
Bài 17 Viết chương trình mô phỏng vấn đề phân phối tài nguyên RAG và kiểm
tra trạng thái hệ thống hiện tại có thể deadlock không(có chu trình)
Bài 18 Viết chương trình mô phỏng giải thuật chủ nhà băng để ngăn ngừa
deadlock
Bài 19 Viết chương trình mô phỏng thuật toán phát hiện deadlock cho trường
hợp tài nguyên đơn cá thể: chuyển từ đồ thị RAG sang Wait-For, kiểm tra chu trình trên đồ thị Wait-For
Trang 6Bài 20 Viết chương trình mô phỏng thuật toán phát hiện deadlock cho trường
hợp tài nguyên đa cá thể
Bài 21 Viết chương trình mô phỏng bài toán deadlock “Triết gia ăn tối”
Quản lý bộ nhớ thứ cấp:
Bài 22 Viết chương trình mô phỏng thuật toán First Come Fist Server cho việc
dịch chuyển của đầu đọc ghi
Bài 23 Viết chương trình mô phỏng thuật toán Sortest Seek-time First cho việc
dịch chuyển của đầu đọc ghi
Bài 24 Viết chương trình mô phỏng thuật toán SCAN
Bài 25 Viết chương trình mô phỏng thuật toán C-SCAN
Bài 26 Viết chương trình mô phỏng thuật toán LOOK
Bài 27 Viết chương trình mô phỏng thuật toán C-LOOK
Hệ thống File:
Bài 30 Viết chương trình mô phỏng phương pháp định vị liên tục( Contiguous allocation) file trên ổ đĩa thứ cấp
Bài 31 Viết chương trình mô phỏng phương pháp định vị liên kết( Linked allocation) file trên ổ đĩa thứ cấp
Bài 32 Viết chương trình mô phỏng phương pháp định vị chỉ số( Indexed
allocation) file trên ổ đĩa thứ cấp
Bài 32 Viết chương trình mô phỏng phương pháp định vị cơ sở mở rộng
( Extent-Based) file trên ổ đĩa thứ cấp