Tài liệu thực hành hệ điều hành

83 113 0
Tài liệu thực hành hệ điều hành

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gịn MỤC LỤC LỜI NĨI ĐẦU BÀI 1: SỬ DỤNG HỆ ĐIỀU HÀNH MÃ NGUỒN MỞ BÀI 2: COMPILER VỚI GCC VÀ G++ 12 BÀI 3: QUẢN LÝ TIẾN TRÌNH 20 BÀI 4: QUẢN LÝ TIẾN TRÌNH – TIẾN TRÌNH MỒ CƠI – TIẾN TRÌNH ZOMBIE 25 BÀI 5: QUẢN LÝ TIỂU TRÌNH (LUỒNG) 30 BÀI 6: QUẢN LÝ TIỂU TRÌNH (LUỒNG) 39 BÀI 7: CPU SCHEDULING 43 BÀI 8: GIAO TIẾP GIỮA CÁC TIẾN TRÌNH – SỬ DỤNG ĐƯỜNG ỐNG (PIPE) 46 BÀI 9: GIAO TIẾP GIỮA CÁC TIẾN TRÌNH – MESSAGE QUEUE 54 BÀI 10: GIAO TIẾP GIỮA CÁC TIẾN TRÌNH – SHARE MEMORY 59 BÀI 11: SEMAPHORE 65 BÀI 12: SEMAPHORE (tiếp theo) 71 BÀI 13: MUTEX LOCK 74 BÀI 14: BÀI TẬP TỔNG HỢP 80 BÀI 15: ÔN TẬP – KIỂM TRA 81 TÀI LIỆU THAM KHẢO 82 DANH MỤC HÌNH ẢNH 83 Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn LỜI NĨI ĐẦU Mơn học hệ điều hành mơn học ngành công nghệ thông tin, môn học cung cấp kiến thức cách hoạt động hệ điều hành Những kiến thức khó hiểu trình bày túy lý thuyết Do đó, để sinh viên nắm bắt kiến thức rõ ràng hơn, cần có hệ thống thực hành chi tiết, xác, để thơng qua đó, sinh viên nắm vững kiến thức mơn học vận hành lĩnh vực chuyên mơn Với mong muốn giúp sinh viên khoa cơng nghệ thơng tin, trường đại học Sài Gịn có tài liệu có hướng dẫn theo chủ đề, có tập thực hành sau chủ đề để nắm bắt hiểu vấn đề cách rõ ràng Tài liệu thực hành hệ điều hành soạn Tài liệu soạn theo tuần học, ứng với học kỳ 15 tuần tài liệu thực hành có 15 Mỗi có hướng dẫn thực hiện, sau hướng dẫn thực tập thực hành Tài liệu hướng dẫn sinh viên cách thức từ việc sử dụng hệ điều hành Linux bản, sử dụng biên dịch chương trình Linux, quản lý tiến trình, quản lý tiểu trình, lập lịch CPU, quản lý giao tiếp tiến trình, sử dụng nhớ dùng chung Những kiến thức tương ứng với kiến thức trọng tâm đề cương môn học hệ điều hành, sử dụng cho sinh viên khoa công nghệ thông tin trường đại học Sài Gịn Trong q trình biên soạn, xin chân thành cảm ơn quý thầy cô khoa cơng nghệ thơng tin đóng góp ý kiến để tài liệu biên soạn hồn chỉnh Trong trình biên soạn, dù cố gắng chắn khó tránh thiếu sót Rất mong muốn q thầy bạn sinh viên sử dụng tài liệu phản hồi để tác giả chỉnh sửa cho tài liệu ngày tốt dể hiểu với bạn sinh viên Xin chân thành cảm ơn! Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn BÀI 1: SỬ DỤNG HỆ ĐIỀU HÀNH MÃ NGUỒN MỞ I Mục tiêu: Hướng dẫn sinh viên làm quen với câu lệnh hệ điều hành mã nguồn mở (Linux), làm quen với phần mềm ảo hóa VMWARE Giúp sinh viên chuẩn bị cho tập tuần sau II Hướng dẫn thực hiện: Sinh viên sử dụng hệ điều hành Ubuntu để thực Sinh viên tự tạo máy ảo Ubuntu VMWare để thực hành Sinh viên download bảng hướng dẫn số câu lệnh Linux để tiện thực hành https://drive.google.com/file/d/1TVeNkPxCGg96oqdOwqpgS6Q8M08i7OL2/view?usp=shari ng Hệ thống Linux phân biệt chữ hoa chữ thường Một lệnh Linux có định dạng chung sau: Ví dụ: $ ls –l /etc $ cd /tmp khơng có tùy chọn $ whoami khơng có tùy chọn đối số Hệ thống tập tin dạng cây: • Nút: thư mục (directory, folder) • Lá: tập tin (file) • Điểm bắt đầu: gốc (root), kí hiệu / Hình 1 Sơ đồ minh họa hệ thống tập tin Linux Đường dẫn: Dùng để định phần tử (nút) thư mục: thư mục tập tin Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn Đường dẫn tuyệt đối: gốc (/) qua nút trung gian sau đến phân tử quan tâm (sử dụng dấu / để phân cách nút đường dẫn) Ví dụ: /home/vunguyen/os/lab1.ppt Đường dẫn tương tối: thư mục hành đến phần tử quan tâm (có thể ngược lên thư mục cha) Ví dụ: giả sử thư mục hành /home/vunguyen, ta sử dụng đường dẫn tương đối: os/lab1.ppt Một số thư mục chuẩn: • /bin, /sbin: chứa lệnh cần thiết cho hệ thống • /dev: tập tin thiết bị file đặc biệt • /etc: chứa file cấu hình Linux • /lib: kernel modules, thư viện chia sẻ cho lệnh nằm /bin, /sbin • /mnt, /media: (mount point) dùng để ánh xạ phân vùng đĩa • /proc: thơng số kernel • /boot: Linux kernel, system map cho bước bootloader • /home: thư mục người dùng • /root: thư mục root (admin, người quản trị) • /tmp: thư mục tạm • /usr: tài nguyên (tĩnh, chia sẻ) cho người dùng • /usr/local, /opt: phần mềm, thư viện chia sẻ • /var: liệu thay đổi, thư mục spool (máy in), tập tin nhật ký (logs), thư mục chia sẻ không chia sẻ Một số câu lệnh Linux: Lệnh Mô tả pwd Xem thư mục hành file Xem kiểu file ls Liệt kê file thư mục cd Chuyển thư mục làm việc mkdir Tạo thư mục Tài liệu thực hành Hệ Điều Hành rmdir Xóa thư mục rm Xóa file hay thư mục cp Copy file hay thư mục chmod Đổi quyền file hay thư mục Lệnh Mô tả cat Tạo xem nội dung file touch Tạo file rỗng more Xem nội dung file hình head Xem n dòng file tail Xem n dòng cuối file find Tìm file hệ thống thư mục grep Tìm cụm từ file which Tìm đường dẫn chứa file thực thi lệnh Trường đại học Sài Gịn Ví dụ câu lệnh ls: Lệnh: ls [option] path_name -i: liệt kê inode -h: in kích thước dễ đọc -l: liệt kê mục dòng -n: liệt kê UID GID Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn -p: hiển thị ký hiệu mô tả (/, =, @) -R: recursive để liệt kê thư mục -S: xếp kết theo kích thước -t (-c): xếp kết theo thời gian cập nhật -u: hiển thị thời gian lần truy cập sau Xem thêm options khác: man ls $ ls Hình Minh họa câu lệnh ls $ ls -l Hình Minh họa câu lệnh ls -l Lệnh: cd Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn Path: đường dẫn tương đối (tính từ thư mục hành) tuyệt đối (tính từ thư mục gốc) Thư mục đặc biệt: : thư mục hành :Thư mục gốc ~ ~username: thư mục home / : root Ví dụ: $ cd os $ cd ~ $ cd / Lệnh tạo thư mục: Lệnh: mkdir [option] Ví dụ: $ pwd /home/test $ mkdir t1 $ mkdir t2 $ ls –l Cần tạo thư mục test/v1/v2/v3 Ví dụ: $ mkdir v1 $ mkdir v1/v2 $ mkdir v1/v2/v3 Hoặc $ mkdir -p v1/v2/v3 Xóa thư mục: Xóa thư mục rỗng: rmdir Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gịn Xóa thư mục khơng rỗng: rm –r Xóa file: rm [option] option: -f: xóa khơng cần hỏi Ví dụ: $ rm -r v1 $ rm -f cx1.doc Lệnh copy: Lệnh: cp [OPTIONS] … option: -r, -R: đệ quy (dùng để copy thư mục) -d: bỏ qua liên kết sử dụng –R -f: ép buộc phải làm (force) -I: dấu nhắc ghi đè -p: trì thuộc tính file Ví dụ: $ cp -r t1 t2 $ cp -f cx1.doc t2/t3 Lệnh di chuyển đổi tên thư mục, tập tin: Lệnh: mv [options] mv [options] option: f: ép buộc phải làm (force) -I: dấu nhắc ghi đè Ví dụ: $ mv cx1.doc cx2.txt $ mv -f cx2.txt t2/cx1.doc Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn Lệnh tạo tập tin: Tạo file nhập vào nội dung $ cat > name_of_file Nhập nội dung Nhấn để xuống dòng Nhấn Ctrl-D để ghi nội dung vào file kết thúc thao tác Ví dụ: $ cat > c1.doc Test cat Test cat Ctrl + D Tạo file rỗng: touch $ touch t1.txt Lệnh xem nội dung tập tin: Lệnh: cat Nội dung file cuộn sang hình trước ta xem Lệnh: more Phím tắt Space bar: trang tiếp Return: dịng q: b: trang trước h: giúp đỡ Hiển thị n dòng file: head -n mặc định n = 10 Hiển thị n dòng cuối file: tail -n mặc định n = 10 Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn Lệnh thay đổi mật người dung: Để thay đổi mật cho người sử dụng: lệnh passwd Ví dụ $ passwd (current) UNIX password: Enter new UNIX password: Retype new UNIX password: III Bài tập thực hành: Sinh viên thực hành theo yêu cầu sau: Bài 1: Sử dụng lệnh id để hiển thị định danh người dùng Hiển thị thông tin người sử dụng lệnh whoami who am i Hiển thị người sử dụng đăng nhập vào hệ thống lệnh who Hiển thị thư mục home Hiển thị thư mục làm việc Đổi mật người sử dụng Từ thư mục hành tạo cấu trúc thư mục sau / V1 V2 cx1 t1 t2 t21 V3 cx1 T3 t22 Liệt kê thư mục thư mục cx1 (sử dụng tùy chọn) Chuyển đổi qua lại thư mục 10.Xóa thư mục t22 10 Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn Bài 1: Tạo tiểu trình con, tiểu trình in số lẻ từ đến 11, tiểu trình in số chẵn từ đến 10 Hãy sử dụng semaphore sau cho hình in dãy số theo thứ tự từ đến 11 Bài 2: Một cách giá trị π thú vị sử dụng kỹ thuật Monte Carlo, liên quan đến ngẫu nhiên Kỹ thuật hoạt động sau: Giả sử bạn có vịng trịn bán kính nội tiếp hình vng cạnh 2, thể hình sau: Hình 11 Minh họa kỹ thuật Monte Carlo để tính số Pi • Đầu tiên, tạo chuỗi điểm ngẫu nhiên dạng tọa độ (x, y) đơn giản Những điểm phải nằm tọa độ Descartes bị ràng buộc hình vng Trong tổng số điểm ngẫu nhiên tạo, số xảy vịng trịn • Tiếp theo, ước tính π cách thực phép tính sau: π = × (số điểm vòng tròn) / (tổng số điểm) Hãy viết phiên đa luồng thuật toán để tạo tiểu trình riêng biệt sinh số lượng điểm ngẫu nhiên; sau tính số lượng điểm nằm hình lưu trữ kết biến tồn cục Khi tiểu trình kết thúc, tiến trình cha tính tốn xuất giá trị ước tính π Hãy đánh giá độ xác số π với số lượng điểm ngẫu nhiên tạo Theo nguyên tắc, số lượng điểm lớn, giá trị tính tiến gần π Áp dụng semaphore ví dụ để giải toán Bài 3: Một hãng sản xuất xe tơ có phận hoạt động song song: Bộ phận sản xuất khung xe void SXKhung(){ printf(“San xuat khung”); } Bộ phận sản xuất bánh xe void SXBanhXe(){ printf(“San xuat banh xe”); } Bộ phận lắp ráp: Sau có đủ khung bánh tiến hành lắp ráp void LapRapXe(){ printf(“Lap rap xe”); 69 Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn } Hãy đồng hoạt động phận theo nguyên tắc: thời điểm cho phép sản xuất khung xe, cần chờ đủ bánh xe để gắn vào khung xe trước sản xuất khung xe khác 70 Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn BÀI 12: SEMAPHORE (tiếp theo) I Mục tiêu: Sinh viên áp dụng kiến thức học, giải vấn đề áp dụng đồng hóa tiến trình, sử dụng semaphore II Hướng dẫn thực hiện: III Xem lại hướng dẫn 11 để áp dụng giải vấn đề phần tập thực hành Bài tập thực hành: Bài 1: Tình trạng cạnh tranh (race condition) xuất nhiều hệ thống máy tính Hãy xem xét hệ thống ngân hàng trì số dư tài khoản với hai hàm thực thi: deposit(số tiền) withdraw(số tiền) Hai hàm truyền vào số tiền gửi rút từ số dư tài khoản ngân hàng Giả sử người chồng người vợ chia sẻ tài khoản ngân hàng Một cách đồng thời, người chồng gọi hàm withdraw() người vợ gọi hàm deposit() Mơ tả làm tình trạng cạnh tranh xảy đến làm cách để ngăn chặn tình trạng cạnh tranh xảy Hình 12 Minh họa xử lý tốn 71 Tài liệu thực hành Hệ Điều Hành Nội dung tập tin a.txt: +10 -5 +20 Nội dung tập tin b.txt: +20 -8 -10 Nội dung tập tin c.txt: -20 +50 Khi thực hiện: Trường đại học Sài Gòn + thể gửi tiền vào - thể rút tiền + thể gửi tiền vào - thể rút tiền + thể gửi tiền vào - thể rút tiền >./bank.out a.txt b.txt Final Balance = 27 >./bank c.txt Warning: Balance under 0.00 Final Balance = 30 Bài 2: Tình trạng cạnh tranh (race condition) xuất nhiều hệ thống máy tính Hãy xem xét hệ thống đấu giá trực tuyến giá đấu cao thời cho mặt hàng phải trì Một người muốn đặt giá đấu cho mặt hàng gọi hàm bid(số_tiền), hàm so sánh số tiền đặt giá đấu với giá đấu cao Nếu số tiền vượt giá đấu cao thời, giá đấu cao đặt thành số tiền Điều minh họa đây: Giả sử có nhiều tập tin mà tập tin (đại diện cho người) chứa số tiền lần đặt lệnh Chương trình cần tạo nhiều tiểu trình, tiểu trình đọc tập tin tiểu trình đồng thời đặt lệnh đấu giá, có tình sau xảy ra: • Giá đấu cao giá (giá biến số chia sẻ khởi tạo 0): giá cập nhật tên người thắng cập nhật (là tên tập tin chứa giá đấu xử lý) • Giá đấu thấp hay giá tại: khơng cập nhật • Giá đấu cao giá giá cao người đấu tiểu trình bị chặn lại người thắng cập nhật (Không tự bỏ giá cao giá vừa bỏ liền trước đó) Nội dung tập tin andy.txt : 10 Giá đấu lần đầu 50 Giá đấu 60 Giả sử giá đâu dương tăng dần 100 Hàng cuối thể giá cao mà người đấu Nội dung tập tin ben.txt : 15 40 Lời gọi: 72 Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn >./bid.out andy.txt ben.txt Value on bid: Andy 10 Ben 15 Andy 50 Ben 40 Andy 60 The winner is Andy with value 60 73 Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn BÀI 13: MUTEX LOCK I Mục tiêu: Hướng dẫn sinh viên thực tránh xung đột truy cập critical resource, sử dụng phương pháp mutex lock II Hướng dẫn thực hiện: Mutex lock cấu trúc liệu, Linux kernel xây dựng theo nguyên tắc mutual exclusion, dùng để ngăn chặn race condition xảy cấu trúc liệu khác Nói nơm na, mutex lock đảm bảo rằng: thời điểm bất kì, có tối đa thread truy cập vào critical resource Hình 13 Mutex lock giống ổ khóa dùng để bảo vệ critical resource Mutex lock có cấu tạo nào? Mutex lock gồm thành phần chính: biến count, biến owner hàng đợi wait_list Dựa vào đó, Linux kernel xây dựng cấu trúc mutex để biểu diễn mutex lock struct mutex { /* * Biến count lưu trạng thái mutex lock, trạng thái * critical resource * - Nếu count = 1, trạng thái mutex lock UNLOCKED, * trạng thái critical resource AVAILABLE * - Nếu count < 1, trạng thái mutex lock LOCKED, * trạng thái critical resource UNAVAILABLE * count = 0: khơng có thread phải đợi để * sử dụng critical resource * count < 0: có thread phải đợi để sử dụng * critical resource 74 Tài liệu thực hành Hệ Điều Hành */ atomic_t Trường đại học Sài Gòn count; /* * Hàng đợi wait_list bị nhiều thread truy cập đồng thời * wait_lock spinlock bảo vệ wait_list */ spinlock_t wait_lock; /* * Hàng đợi wait_list chứa danh sách thread phải đợi để * chiếm mutex lock, danh sách thread * phải đợi để sử dụng critical resource */ struct list_head wait_list; /* * Biến owner mô tả thread chiếm dụng mutex lock, * thread sử dụng critical resource */ struct task_struct *owner; }; Mutex lock hoạt động sao? Hình 13 Sơ đồ biểu diễn trạng thái mutex lock Khi count (tức mutex lock trạng thái UNLOCKED), thread gọi hàm mutex_lock, thì: Biến count bị giảm thành (tức mutex lock bị chuyển sang trạng thái LOCKED) Ta nói thread khóa mutex lock lại Biến owner thiết lập thread Ta nói thread chiếm dụng mutex lock 75 Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn CPU bắt đầu thực thi critical section thread (nói theo ngơn ngữ CPU), hay thread sử dụng critical resource (nói theo ngôn ngữ Linux kernel) Khi count nhỏ (tức trạng thái LOCKED), thread gọi hàm mutex_lock, thì: • Biến count giảm xuống đơn vị • CPU tạm ngừng thực thi thread chuyển sang thực thi thread khác (nói theo ngơn ngữ CPU) Hay nói theo ngơn ngữ Linux kernel, thread thêm vào hàng đợi wait_list ngủ, sau Linux kernel lập lịch cho thread khác Do đó, ta nói rằng, mutex lock áp dụng chế sleep-waiting, tức mutex lock thuộc loại sleep lock, trái với spinlock thuộc loại busy lock Khi count nhỏ (tức trạng thái LOCKED), thread A gọi hàm mutex_unlock, thì: • • • Biến owner thiết lập thành NULL Ta nói rằng, thread A giải phóng mutex lock Biến count tăng thành thiết lập (tức mutex lock chuyển sang trạng thái UNLOCKED) Ta nói thread A mở khóa mutex lock Nếu hàng đợi wait_list khơng rỗng giả sử thread B nằm đầu hàng đợi, CPU chuyển sang thực thi thread B (nói theo ngơn ngữ CPU) Hay nói theo ngơn ngữ Linux kernel, Linux kernel đánh thức thread B dậy Sau thức dậy, thread B chuyển mutex lock sang trạng thái LOCKED (thay đổi biến count thành -1 thread khác đợi, thành khơng cịn thread đợi) Sau đó, thread B chiếm lấy mutex lock bắt đầu sử dụng critical resource Mutex lock bảo vệ critical resource nào? Trong lập trình device driver, ta đặt hàm mutex_lock mutex_unlock vào trước sau critical section thread Việc làm giúp bảo vệ critical resource Để thấy điều này, ta xét ví dụ sau Giả sử, hệ thống có kernel thread A B thực thi riêng biệt lõi CPU0 CPU1 Cả thread có nhu cầu sử dụng critical resource R, tài nguyên R bảo vệ mutex lock M Xét trường hợp sau: • • Trường hợp 1: A muốn truy cập R B sử dụng R o Trước thực thi lệnh critical section thread A, CPU0 thực thi hàm mutex_lock thấy M trạng thái LOCKED Khi đó, CPU0 dừng thực thi thread A chuyển sang thực thi thread C o Sau thực thi xong critical section thread B, CPU1 thực thi tiếp hàm mutex_unlock để chuyển M sang trạng thái UNLOCKED Lúc này, thread A chiếm lấy M CPU0 tiếp tục thực thi thread A Trường hợp 2: A B đồng thời muốn truy cập R o Khi đó, thread đồng thời thực thi hàm mutex_lock Tuy nhiên, hàm mutex_lock dùng thao tác atomic để thay đổi biến count, nên có hai thread chiếm M o Thread chiếm M trước sử dụng R trước Thread khơng chiếm M ngủ thread sử dụng xong R 76 Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn Như vậy, thời điểm nào, tối đa có thread phép chiếm dụng mutex lock, đồng nghĩa với việc, tối đa có thread phép sử dụng critical resource Do đó, race condition không xảy critical resource bảo vệ Sử dụng mutex clock: Để sử dụng mutex, trước hết phải khai báo khởi tạo mutex Trong Posix thread, biến mutex kiểu liệu có dạng pthread_mutex_t khởi tạo tĩnh sử dụng macro PTHREAD_MUTEX_INITIALIZER khởi tạo động lúc runtime Khởi tạo tĩnh (statically allocation) Pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; Khởi tạo động (dynamically initializing) #include int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr); /*Trả thành công, số dương mã lỗi*/ Trong cách khởi tạo tĩnh, macro PTHREAD_MUTEX_INITIALIZER dùng để khởi tạo mutex với thuộc tính (thread attribute) mặc định Trong hàm pthread_mutex_init() cách khởi tạo động cho phép khởi tạo thiết lập thuộc tính cho mutex Nếu khơng cần quan tâm đến thuộc tính thread, ta truyền NULL vào đối số pthread_mutexattr_t *attr Khi khởi tạo động mutex hàm pthread_mutex_init(), ta cần phải hủy mutex khơng cần sử dụng hàm pthread_mutex_destroy() có prototype sau (khởi tạo tĩnh macro PTHREAD_MUTEX_INITIALIZER không cần destroy mutex): int pthread_mutex_destroy(pthread_mutex_t *mutex); /*Return thành công, số dương mã lỗi không thành công*/ Lock/unlock mutex Sau khởi tạo, mutex khóa mở khóa hàm sau đây: #include int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_unlock(pthread_mutex_t *mutex); /*Trả thành công, số dương mã lỗi xảy lỗi*/ Để khóa mutex, ta truyền địa mutex vào hàm pthread_mutex_lock() Nếu mutex trạng thái unlock, hàm khóa mutex return Nếu mutex bị khóa thread khác, hàm bị lock mutex mở Nếu thread khóa mutex mà giữ khóa xảy deadlock (thread rơi vào trạng thái chờ vơ hạn) Ngồi ra, chuẩn Posix cung cấp hai hàm lock mutex sau đây: int pthread_mutex_trylock(pthread_mutex_t *mutex); int pthread_mutex_timedlock(pthread_mutex_t *restrict mutex,const struct timespec *restrict abs_timeout); Hàm pthread_mutex_trylock() hoạt động khác pthread_mutex_lock() chỗ: mutex bị khóa, khơng lock thread mà return với mã lỗi EBUSY Còn 77 Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn hàm pthread_mutex_timedlock() thêm vào đối số abs_timeout để thiết lập thời gian tối đa thread chờ; sau khoảng thời gian "abs_timeout " mà thread chưa sở hữu mutex, return trả mã lỗi ETIMEDOUT Ví dụ: #include #include #include #include #include #define MAX_THREAD pthread_t tid[MAX_THREAD]; /*Counter la bien toan cuc duoc thread su dung*/ int counter; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; //khai bao mutex void *threadFunc(void *argv) { pthread_mutex_lock(&mutex); counter += 1; printf("Thread %d has started\n", counter); sleep(1); printf("Thread %d has finished\n", counter); pthread_mutex_unlock(&mutex); pthread_exit(NULL); } int main(void) { int i = 0; int ret = 0; for (i = 0; i < MAX_THREAD; i++) { ret = pthread_create(&(tid[i]), NULL, threadFunc, NULL); if (ret != 0) { printf("Thread [%d] created error\n", i); } } pthread_join(tid[0], NULL); pthread_join(tid[1], NULL); return 0; } 78 Tài liệu thực hành Hệ Điều Hành III Trường đại học Sài Gòn Bài tập thực hành: Bài 1: Hãy thực lại ví dụ phần hướng dẫn thực Rút nhận xét cách mutex lock thực Bài 2: Mỗi hãng máy bay có số lượng vé định, đại lý truy cập đến hệ thống hãng để đặt mua vé máy bay Hãy xây dựng chương trình quản lý vé máy bay hãng Khi thực chương trình này, cho người dùng nhập vào số lượng vé máy bay ngày hãng Dữ liệu nhập vào file: sove.txt Hãy xây dựng chương trình cho đại lý: đại lý chạy đọc từ file: daily1.txt daily2.txt Khi chạy, đại lý mua vé từ hãng, lần mua vé file sove.txt hãng bị giảm theo số lượng vé đại lý đặt Nếu đặt mua thành công, thông báo đặt mua thành công với số vé, hết vé phải báo hết vé, mua tiếp Mỗi lần mua xong, bắt buộc đại lý phải tạm nghỉ 5s Nội dung tập tin daily1.txt: 10 Các số số vé mà khách đến đại lý để mua lần khác Nội dung tập tin daily2.txt: Hãy sử dụng công cụ share memory, mutex lock để giải tập 79 Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn BÀI 14: BÀI TẬP TỔNG HỢP I Mục tiêu: Áp dụng kiến thức học để giải vấn đề Hướng dẫn thực hiện: II III Đọc lại kiến thức trước để giải tập thực hành Bài tập thực hành: Bài 1: Bài toán thang máy: Một thang máy di chuyển qua tầng khác nhau, có người tầng bấm vào nút gọi thang máy, có nút: lên xuống Thang máy di chuyển đến cho người chọn Khi thang máy tới tầng này, người dùng bấm nút chọn tầng để thang máy di chuyển đến tầng muốn đến Trong lúc vận hành có nhiều người bấm nút gọi thang máy Thang máy ưu tiên lên xuống để chọn người gọi lên xuống, đón người gần Hãy viết chương trình tạo nhiều tiến trình, tiến trình ứng với tầng, tiến trình sử dụng vùng nhớ dùng chung Thực quản lý vùng nhớ dùng chung để tầng gọi thang máy tránh xung đột với Bài 2: Bài tốn producer – consumer: Vấn đề mơ tả hai đối tượng nhà sản xuất (Producer) người tiêu dùng (Consumer), hai chia sẻ đệm có kích thước cố định sử dụng hàng đợi (queue) Producer: công việc nhà sản xuất tạo liệu, đưa vào đệm bắt đầu lại Consumer: công việc người tiêu dùng tiêu thụ liệu (nghĩa loại bỏ khỏi đệm), phần xử lý Consumer Producer hoạt động song song với Vấn đề đảm bảo nhà sản xuất thêm liệu vào đệm đầy người tiêu dùng khơng thể xóa liệu khỏi đệm trống, đồng thời đảm bảo an tồn cho luồng (thread-safe) Hình 14 Minh họa toán Producer - Consumer Hãy vận dụng kỹ thuật học để giải toán 80 Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gịn BÀI 15: ƠN TẬP – KIỂM TRA Sinh viên thực số đề kiểm tra sau Thời gian thực 45 phút Bài 1: Sinh viên thực theo yêu cầu sau: Hãy thực chương trình nhận giá trị số nguyên dương (tạm gọi n, point) từ đối số truyền vào Hãy thực vòng lặp thực n lần, lần lặp sinh số ngẫu nhiên từ – 100 Các số ngẫu nhiên thay đổi liên tục Sau tạo tiểu trình (2.5đ) • tiểu trình kiểm tra xem số vừa sinh có phải số chẵn lớn số point truyền vào không Nếu thỏa mãn chép vào mảng chan[] (2.5đ) • tiểu trình kiểm tra xem số vừa sinh có phải số lẻ nhỏ số point truyền vào không Nếu thỏa mãn chép vào mảng le[] (2.5đ) • Sau tiểu trình hồn thành Hãy thực tiểu trình để in mảng kết vừa thực (2.5đ) Với mảng chan[] le[] mảng toàn cục Bài 2: Hãy thực chương trình nhận giá trị số nguyên dương n từ đối số truyền vào Hãy thực thực vòng lặp thực n lần, lần lặp sinh số ngẫu nhiên từ – 100 Các số ngẫu nhiên thay đổi liên tục Sau tạo tiểu trình (2.5đ) • tiểu trình kiểm tra xem số vừa sinh có phải số ngun tố hay khơng? Nếu số ngun tố ghi vào mảng nguyento[] (2.5đ) • tiểu trình kiểm tra xem số vừa sinh có phải chẵn hay khơng? Nếu số chẵn ghi vào mảng chan[] (2.5đ) • Sau tiểu trình hồn thành Hãy thực tiểu trình để in mảng kết vừa thực (2.5đ) Với mảng nguyento[] chan[] mảng toàn cục 81 Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn TÀI LIỆU THAM KHẢO [1] Jyotirmay Patel, “Lab Manual Operating System” Department of Computer Science & Engineer, Meetrut Institute of Technology [2] G Sunitha, “Operating Systems Lab Manual” Department of Computer Science & Engineer, Institute of Aeronautical Engineer 82 Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gịn DANH MỤC HÌNH ẢNH Bài 1: Hình 1 Sơ đồ minh họa hệ thống tập tin Linux Hình Minh họa câu lệnh ls .6 Hình Minh họa câu lệnh ls -l Bài 2: Hình Minh họa cách gọi chương trình 13 Hình 2 Sơ đồ trình biên dịch file 13 Hình Minh họa cách chạy chương trình 14 Hình Mơ hình thư viện liên kết tĩnh động 15 Hình Minh họa kiểm tra thư viện vừa tạo 16 Hình Minh họa chạy chương trình không gọi thư viện 17 Hình Minh họa chạy chương trình có gọi thư viện 17 Hình Minh họa chạy chương trình gọi thư viện liên kết động 18 Bài 3: Hình Minh họa chạy chương trình lấy ProcessID 21 Bài 4: Hình Minh họa chế vận hành hàm exec 28 Bài 6: Hình Minh họa thuật toán Merge Sort 40 Hình Minh họa thuật tốn xếp quick sort 41 Hình Minh họa Merge Sort với Thread 42 Bài 8: Hình Liên lạc qua pipe (đường ống) 46 Bài 9: Hình Minh họa chạy tiến trình writer 57 Hình Minh họa chạy tiến trình reader 57 Bài 10: Hình 10 Minh họa tiến trình sử dụng vùng nhớ dùng chung 59 Bài 11: Hình 11 Minh họa kỹ thuật Monte Carlo để tính số Pi 69 Bài 12: Hình 12 Minh họa xử lý toán 71 Bài 13: Hình 13 Mutex lock giống ổ khóa dùng để bảo vệ critical resource 74 Hình 13 Sơ đồ biểu diễn trạng thái mutex lock 75 Bài 14: Hình 14 Minh họa toán Producer - Consumer 80 HẾT 83 ... dụng tài liệu phản hồi để tác giả chỉnh sửa cho tài liệu ngày tốt dể hiểu với bạn sinh viên Xin chân thành cảm ơn! Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn BÀI 1: SỬ DỤNG HỆ ĐIỀU HÀNH... qui tắc 18 Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn 19 Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gòn BÀI 3: QUẢN LÝ TIẾN TRÌNH I Mục tiêu: Hướng dẫn sinh viên thực việc.. .Tài liệu thực hành Hệ Điều Hành Trường đại học Sài Gịn LỜI NĨI ĐẦU Mơn học hệ điều hành môn học ngành công nghệ thông tin, môn học cung cấp kiến thức cách hoạt động hệ điều hành Những

Ngày đăng: 08/01/2022, 15:03

Hình ảnh liên quan

Sinh viên download bảng hướng dẫn một số câu lệnh trên Linux để tiện thực hành. - Tài liệu thực hành hệ điều hành

inh.

viên download bảng hướng dẫn một số câu lệnh trên Linux để tiện thực hành Xem tại trang 3 của tài liệu.
more Xem nội dung file trê n1 màn hình - Tài liệu thực hành hệ điều hành

more.

Xem nội dung file trê n1 màn hình Xem tại trang 5 của tài liệu.
Hình 1.2 Minh họa câu lệnh ls - Tài liệu thực hành hệ điều hành

Hình 1.2.

Minh họa câu lệnh ls Xem tại trang 6 của tài liệu.
Hình 2.1 Minh họa cách gọi chương trình - Tài liệu thực hành hệ điều hành

Hình 2.1.

Minh họa cách gọi chương trình Xem tại trang 13 của tài liệu.
Hình 2.2 Sơ đồ quá trình biên dịch của file - Tài liệu thực hành hệ điều hành

Hình 2.2.

Sơ đồ quá trình biên dịch của file Xem tại trang 13 của tài liệu.
Hình 2 .3 Minh họa cách chạy chương trình - Tài liệu thực hành hệ điều hành

Hình 2.

3 Minh họa cách chạy chương trình Xem tại trang 14 của tài liệu.
Hình 2 .4 Mô hình thư viện liên kết tĩnh và động - Tài liệu thực hành hệ điều hành

Hình 2.

4 Mô hình thư viện liên kết tĩnh và động Xem tại trang 15 của tài liệu.
Hình 2.5 Minh họa kiểm tra thư viện vừa tạo - Tài liệu thực hành hệ điều hành

Hình 2.5.

Minh họa kiểm tra thư viện vừa tạo Xem tại trang 16 của tài liệu.
Hình 2 .6 Minh họa chạy chương trình khi không gọi thư viện - Tài liệu thực hành hệ điều hành

Hình 2.

6 Minh họa chạy chương trình khi không gọi thư viện Xem tại trang 17 của tài liệu.
Hình 2 .8 Minh họa chạy chương trình khi gọi thư viện liên kết động - Tài liệu thực hành hệ điều hành

Hình 2.

8 Minh họa chạy chương trình khi gọi thư viện liên kết động Xem tại trang 18 của tài liệu.
Hình 3 .1 Minh họa chạy chương trình lấy ProcessID - Tài liệu thực hành hệ điều hành

Hình 3.

1 Minh họa chạy chương trình lấy ProcessID Xem tại trang 21 của tài liệu.
Hình 4 .1 Minh họa cơ chế vận hành các hàm exec - Tài liệu thực hành hệ điều hành

Hình 4.

1 Minh họa cơ chế vận hành các hàm exec Xem tại trang 28 của tài liệu.
Hình 6 .1 Minh họa thuật toán Merge Sort - Tài liệu thực hành hệ điều hành

Hình 6.

1 Minh họa thuật toán Merge Sort Xem tại trang 40 của tài liệu.
Hình 6 .2 Minh họa thuật toán sắp xếp quick sort - Tài liệu thực hành hệ điều hành

Hình 6.

2 Minh họa thuật toán sắp xếp quick sort Xem tại trang 41 của tài liệu.
Hình 6 .3 Minh họa Merge Sort vớ i2 Thread - Tài liệu thực hành hệ điều hành

Hình 6.

3 Minh họa Merge Sort vớ i2 Thread Xem tại trang 42 của tài liệu.
Hình 8 .1 Liên lạc qua pipe (đường ống) - Tài liệu thực hành hệ điều hành

Hình 8.

1 Liên lạc qua pipe (đường ống) Xem tại trang 46 của tài liệu.
Hình 10 .1 Minh họa các tiến trình sử dụng vùng nhớ dùng chung - Tài liệu thực hành hệ điều hành

Hình 10.

1 Minh họa các tiến trình sử dụng vùng nhớ dùng chung Xem tại trang 59 của tài liệu.
Hình 11 .1 Minh họa kỹ thuật Monte Carlo để tính số Pi - Tài liệu thực hành hệ điều hành

Hình 11.

1 Minh họa kỹ thuật Monte Carlo để tính số Pi Xem tại trang 69 của tài liệu.
Hình 12 .1 Minh họa xử lý bài toán - Tài liệu thực hành hệ điều hành

Hình 12.

1 Minh họa xử lý bài toán Xem tại trang 71 của tài liệu.
Hình 13 .1 Mutex lock giống như mộ tổ khóa dùng để bảo vệ critical resource - Tài liệu thực hành hệ điều hành

Hình 13.

1 Mutex lock giống như mộ tổ khóa dùng để bảo vệ critical resource Xem tại trang 74 của tài liệu.
Hình 13 .2 Sơ đồ biểu diễn các trạng thái của một mutex lock - Tài liệu thực hành hệ điều hành

Hình 13.

2 Sơ đồ biểu diễn các trạng thái của một mutex lock Xem tại trang 75 của tài liệu.
Hình 14 .1 Minh họa bài toán Producer - Consumer - Tài liệu thực hành hệ điều hành

Hình 14.

1 Minh họa bài toán Producer - Consumer Xem tại trang 80 của tài liệu.