Bài tập lớn hệ điều hành Lớp MT2000
BÀI TẬP LỚN HỆ ĐIỀU HÀNH
Quy định :
• Ngôn ngữ lập trình sử dụng trong các bài tập là C, C++ hoặc Java.
• Các bài tập viết trên UNIX phải viết trên nền Linux.
• Sinh viên chia nhóm từ 3-4 người. Mỗi nhóm chọn 2 bài tập thuộc 2 chủ đề lập trình và 1
bài tập phần tìm hiểu hệ thống.
• Các nhóm sinh viên có thể đăng ký để trình bày trước lớp về đề tài của nhóm mình. Các nhóm
đăng ký phải chuẩn bị slide hoặc bài viết để trình bày trước lớp trong các buổi học cuối cùng của
môn học.
• Sinh viên có tham gia thuyết trình sẽ được cộng thêm điểm vào bài tập lớn
• Lớp trưởng đánh máy và in ra danh sách các nhóm (họ tên, mã số sinh viên), tên bài tập và thông
tin đăng ký thuyết trình của các sinh viên và gởi cho GVHD qua email.
BÀI TẬP LẬP TRÌNH
Chủ đề 1: Mô phỏng
1. Tài liệu tham khảo
- Bài giảng Hệ điều hành, Vũ Lê Hùng
- An Introduction To Operating System, H.M. Deitel
2. Ngôn ngữ lập trình sử dụng: C, C++, Java trên UNIX hoặc Windows
Bài 1.1: Viết chương trình mô phỏng giải thuật nhà băng của Dijsktra để tránh deadlock. Số lượng
các nguồn tài nguyên, các yêu cầu của hệ thống được tạo ngẫu nhiên. Hãy hiện thực cách xét trạng
thái hiện thời của hệ thống là an toàn hay không an toàn. Nếu trạng thái là an toàn, chương trình
phải chỉ ra cách để thu hồi tài nguyên hệ thống. Với mỗi yêu cầu cung cấp tài nguyên, hãy hiển thị
ra màn hình cách cấp phát, thu hồi tương ứng.
Bài 1.2: Viết chương trình mô phỏng các giải thuật định thời đã học: FIFO, SJF, SRT, RR,
HRRN, MLFQ. Đầu vào của giải thuật: số quá trình, độ dài các CPU burst, I/O burst… được tạo
ngẫu nhiên. Tính toán các thông số và đánh giá độ hiệu quả của từng giải thuật.
Bài 1.3: Viết chương trình mô phỏng các giải thuật thay thế trang đã học: OPT, FIFO, LRU, LFU,
NUR, Second Chance. Đầu vào của giải thuật: số khung trang, chuỗi tham khảo trang, yêu cầu thay
thế trang…được tạo ngẫu nhiên. Đánh giá độ hiệu quả (so sánh số page fault) của từng giải thuật.
Chủ đề 2: Đồng bộ giữa các quá trình
3. Ngôn ngữ lập trình sử dụng: C trên UNIX
Bài 3.1 :
Viết chương trình có khai báo 4 biến như sau:
- global là biến nguyên toàn cục không khởi động trị.
- local là biến nguyên khai báo cục bộ trong hàm doNoth( ) (hàm này không làm gì cả)
- intarray là một con trỏ đến biến kiểu nguyên.
Trong hàm main(), hãy gán global=1, sau đó in địa chỉ các segment của quá trình ra màn hình. Cho
biết địa chỉ các biến global, local và intarray (1). Tiếp theo, hãy dùng hàm fork() tạo ra một quá
trình con. Cho biết giá trị các địa chỉ trên ở trong quá trình con (2). Hãy gán global=2 trong quá
trình con và cho biết giá trị mới của biến global trong quá trình con và quá trình cha.
Trong quá trình cha, sau khi dùng fork(), hãy gọi hàm doNoth(), sau đó dùng malloc() để xin một
vùng nhớ cho một mảng 10 số nguyên và gán địa chỉ đầu mảng vào biến intarray.
Trả lời các câu hỏi sau:
- Biến global là biến chung hay biến riêng của từng quá trình?
- Biến intarray của quá trình cha nằm trên stack hay trên heap?
- Biến local của quá trình cha nằm trên stack hay trên heap?
- Các địa chỉ ở (1) và (2) có khác nhau không? Giải thích?
Bài 3.2 :
Viết các hàm mymalloc() và myfree() dựa trên các hàm cung cấp sẵn là brk() và sbrk().
Chủ đề 4: Thread
1. Tài liệu tham khảo
- UNIX Internal, phần Thread and Lightweight Processes
- Multithread Programming Guide.
- Interprocess Communications in UNIX.
- MSDN CDROM
- Java How to Program, phần Threads
2. Tìm hiểu thread :
- Tìm hiểu khái niệm thread.
- Phân biệt giứa mô hình xử lý dùng multithread và dùng nhiều process.
- Tìm hiểu cách đồng bộ giữa các thread trong Java và trong Linux.
Bài 4.8:
Sử dụng thread và các phương thức đồng bộ trên thread để viết chương trình producers-
consumers với 1 bounded buffer trong trường hợp có nhiều producer và nhiều consumer.
Bài 4.9:
Sử dụng thread và các phương thức đồng bộ trên thread để giải quyết bài toán N triết gia ăn tối.
Bài 4.10 :
Sử dụng thread và các phương thức đồng bộ trên thread để viết giải quyết bài toán reader/writer
dạng tổng quát.
Chủ đề 5: Giao tiếp giữa các quá trình
1. Tài liệu tham khảo
- UNIX network programming, phần Interprocess Communications
- Interprocess Communication in UNIX
- Tài liệu hướng dẫn thực hành Hệ điều hành, Hồ Quốc Thuần.
2. Tìm hiểu các cơ chế giao tiếp giữa các quá trình trong UNIX
- Tìm hiểu các cơ chế giao tiếp giữa các quá trình trong UNIX dùng pipe, message
queue, shared memory.
- Ưu nhược điểm của từng phương pháp.
3. Ngôn ngữ lập trình sử dụng: C trên UNIX
Bài 5.1 :
Tạo ra 2 quá trình. Quá 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 đó quá trình thứ nhất truyền các chuỗi dữ liệu này cho quá trình thứ hai. Quá trình thứ hai
thực hiện tính toán và trả chuỗi kết quả về lại cho quá trình đầu tiên để ghi lại vào file như sau:
2 + 3 = 5
1 - 2 = -1
Viết chương trình tương tự bài 5.7 nhưng dùng pipe để giao tiếp.
Bài 5.9 :
Viết chương trình tương tự bài 5.7 nhưng dùng shared memory để giao tiếp.
Bài 5.10 :
Tạo ra 2 quá trình P0 và P1. Quá trình P0 đọc từ file một ma trận vuông cấp N*N, sau đó gởi
ma trận này cho P1. Quá trình P1 sẽ thực hiện nghịch đảo ma trận này và ghi kết quả xuống một file
khác. Nếu ma trận không thể nghịch đảo được, P1 ghi vào file kết quả dòng thông báo tương ứng.
Thực hiện bài toán dùng message queue để giao tiếp giứa 2 quá trình.
Bài 5.11 :
Viết chương trình tương tự bài 5.10 nhưng dùng pipe để giao tiếp.
Bài 5.12 :
Viết chương trình tương tự bài 5.10 nhưng dùng shared memory để giao tiếp.
Chủ đề 6: Socket
1. Tài liệu tham khảo
- UNIX network programming, phần Berkeley Sockets
- Interprocess Communication in UNIX
- Internetworking with TCP/IP volume III, phần mô hình Client/Server.
- Internetworking with TCP/IP volume II (cho các bài về broadcast và multicast).
- MSDN CDROM
2. Tìm hiểu socket và mô hình client/server
- Tìm hiểu cơ chế làm việc của socket,
- Các bước cần thiết trong việc tạo socket dùng TCP và UDP.
- Mô hình client/server.
3. Ngôn ngữ lập trình sử dụng: C trên UNIX, C++ trên Windows
Bài 6.1:
Trang 4/5
Bài tập lớn hệ điều hành Lớp MT2000
Tạo hai quá trình server và client ở hai máy khác nhau. Client nhận một dãy số từ người sử
dụng và gởi cho quá trình server. Server sắp xếp chuỗi này theo thứ tự tăng dần và gởi trả lại client
để hiển thị cho người dùng biết.
Bài 2: Tìm hiểu phần mềm VMWare và cách chạy nhiều hệ điều hành trên cùng một máy tại một
thời điểm.
Bài 3: Tìm hiểu và phân tích kiến trúc tổng quát của hệ điều hành Linux.
Bài 4: Tìm hiểu và phân tích kiến trúc tổng quát của hệ điều hành WinNT/2000.
Bài 5: Tìm hiểu cơ chế định thời của hệ điều hành Solaris/Linux.
Bài 6: Tìm hiểu cơ chế định thời của hệ điều hành WinNT /2000.
Bài 7: Tìm hiểu và so sánh mô hình multi-threading của Solaris và WinNT/2000.
Bài 8: Tìm hiểu về hệ thống file của Linux.
Bài 9: Tìm hiểu về hệ thống file của WinNT/2000.
Hết
Trang 5/5