Tải bản đầy đủ (.doc) (6 trang)

Bài tập môn OS concepts

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 (108.8 KB, 6 trang )

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.
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
Liê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ử H
2

O:
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
{
Make-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 H
2
O */
{
while (T)
Make-Water(); //Tạo 1 phân tử H
2
O
}
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
nhữ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ỗ
}
for (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.

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×