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
GVHD : VŨ LÊ HÙNG
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 tự thỏa thuận chia nhóm từ 2-3 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
• Sinh viên nộp báo cáo và bài tập cho GVHD tại văn phòng khoa (nộp đĩa mềm) hoặc qua địa chỉ
email [email protected]. Xem qui định về báo cáo tại trang web dưới đây.
• Tất cả các thông tin liên quan đến bài tập lớn sẽ được đưa lên trang web của môn học
http://www.dit.hcmut.edu.vn/~vlehung/course-OS-vn.html
• 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
2. Tìm hiểu các hàm truy cập bộ nhớ :
- Tìm hiểu cách tạo quá trình trong UNIX dùng hàm fork( ).
- Tìm hiểu cách cấp phát bộ nhớ cho quá trình trong hệ điều hành UNIX.
- Tìm hiểu các hàm cho phép lấy các thông tin về vùng nhớ cấp cho quá trình cũng như
cho phép thay đổi các vùng 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
nguyên tố nằm trong khoảng 2 số đã nhập và ghi các số này ra file.
Bài 4.7:
Đọc vào một ma trận (kích thước N*N) từ file, sau đó dùng n thread để tính tổng của từng hàng
trên ma trận (1 thread nếu tính tổng một hàng xong có thể tính tổng của một hàng khác). Dùng một
thread để thu thập các kết quả của các thread kia và ghi vào một file kết quả.
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.
Trang 3/6
Bài tập lớn hệ điều hành Lớp MT2000
Ví dụ trong file sẽ lưu các chuỗi dạng như sau :
2 + 3
thực hiện sắp xếp mỗi dãy theo thứ tự tăng dần, đồng thời tính tổng của dãy đó và gởi dãy kết quả
cùng với tổng tính được tương ứng cho mỗi dãy về lại quá trình P0. Khi này, P0 thực hiện ghi các
dãy kết quả vào lại file sao cho: dãy có tổng nhỏ nhất sẽ được ghi đầu tiên, dãy có tổng lớn hơn sẽ
được ghi sau. Thực hiện bài toán dùng message queue để giao tiếp giứa 2 quá trình.
Bài 5.8 :
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
Trang 4/6
Bài tập lớn hệ điều hành Lớp MT2000
- 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.
BÀI TẬP VỀ TÌM HIỂU HỆ THỐNG
Tài liệu tham khảo
- ftp.dit.hcmut.edu.vn/pub/OS/books
- Sinh viên tự tìm kiếm trên Internet
Bài 1: Tìm hiểu cơ chế boot và cách cài đặt multiboot cho nhiều hệ điều hành trên một máy đơn.
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.
Trang 5/6