1. Trang chủ
  2. » Giáo án - Bài giảng

hệ điều hành nguyễn văn hiệp chương03 tương tranh giữa các process sinhvienzone com

27 50 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 27
Dung lượng 487,47 KB

Nội dung

MÔN HỆ ĐIỀU HÀNH Chương TƯƠNG TRANH GIỮA CÁC PROCESS 3.1 Giới thiệu tương tranh 3.2 Loại trừ tương hỗ đoạn code CS 3.3 Các phương pháp dừng chờ chủ động (busy waiting) 3.4 Đồng process : Bài toán Sản xuất-Tiêu dùng 3.5 Các phương pháp dừng chờ thụ động (sleep-wakeup) 3.6 Các toán IPC kinh điển giải Tài liệu tham khảo : chương 2, sách "Modern Operating Systems", Andrew S Tanenbaum: , 2nd ed, Prentice Hall Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Hệ điều hành Chương : Tương tranh process Slide 3.1 Giới thiệu tương tranh ‰ ‰ ‰ Trong hệ đa chương, thường có nhiều process chạy song hành, process c kh ng gian l m việc độc lập, khơng truy xuất trực tiếp không gian làm việc process khác => tốt cho việc bảo vệ ch ng lẫn l process chương trình độc lập Nếu hay nhiều process cần giao tiếp để đồng hay để trao đổi liệu, ta cần cung cấp chế cho ch ng C chế giao tiếp ch nh c c process : truy xuất nhớ d ng chung v gởi/nhận th ng b o Truy xuất nhớ chung nhiều hoạt động tương tranh process Vấn đề tương tranh tài nguyên dùng chung vấn đề lớn cần phải giải triệt để nhiều process truy xuất đồng thời v o t i nguy n d ng chung mà kiểm sốt dễ xảy lỗi làm hư hỏng tài nguyên (điều kiện Race) Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM SinhVienZone.com Môn : Hệ điều hành Chương : Tương tranh process Slide https://fb.com/sinhvienzonevn Giới thiệu tương tranh ‰ ‰ ‰ Phân tích kỹ code chương trình, ta nhận thấy chúng danh sách liên tiếp loại đoạn code : đoạn code truy xuất biến cục chương trình Đoạn code thường dài xuất nhiều May mắn khơng cần quan tâm kiểm sốt đoạn code Đoạn code truy xuất tài nguyên dùng chung tranh chấp với process khác Đây đoạn code, xuất thường ngắn, dễ gây lỗi tài nguyên nên ta gọi 'critical session‘ (viết tắt CS), cần kiểm sốt cẩn thận đoạn code CS Mơn : Hệ điều hành Chương : Tương tranh process Slide Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Giới thiệu tương tranh đoạn lệnh truy xuất cục đoạn lệnh truy xuất cục critical session resource đoạn lệnh truy xuất cục đoạn lệnh truy xuất cục critical session đoạn lệnh truy xuất cục Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM SinhVienZone.com critical session critical session resource đoạn lệnh truy xuất cục Môn : Hệ điều hành Chương : Tương tranh process Slide https://fb.com/sinhvienzonevn Giới thiệu tương tranh Thí dụ ứng dụng truy xuất tài khoản A đồng thời : hiển thị giao diện & chờ người dùng lệnh Người dùng lệnh nạp vào tài khoản A số tiền 700USD → xử lý : 21a Đọc tài khoản A vào nhớ, 22a Tăng giá trị tài khoản nhớ lên 700USD 23a Ghi lại giá trị Quay bước Tài khoản A Vùng CS hiển thị giao diện & chờ người dùng lệnh Người dùng lệnh rút tiền từ tài khoản A 500USD → xử lý : 21b Đọc tài khoản A vào nhớ, 22b Giảm giá trị tài khoản nhớ 500USD 23b Ghi lại giá trị Quay bước Nếu tài khoản A 1000USD HĐH điều khiển chạy process P1 P2 theo thứ tự 21a→22a→21b→22b→23b→23a kết tài khoản A 1700USD (giá trị 1200USD) Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Hệ điều hành Chương : Tương tranh process Slide 3.2 Loại trừ tương hỗ đoạn CS ƒ ƒ ƒ ƒ Để kiểm soát việc truy xuất tài nguyên đồng thời nhiều process, ta không cho phép vùng CS process truy xuất tài nguyên xác định thời điểm Phương pháp gọi loại trừ tương hỗ đoạn CS (Mutual Exclusion) Có nhiều phương pháp loại trừ tương hỗ cụ thể khác chia làm nhóm : nhóm phương pháp dừng chờ chủ động (busy waiting) nhóm phương pháp dừng chờ thụ động (sleep/wakeup) Tinh thần nhóm phương pháp dừng chờ chủ động process cần thực đoạn code CS tương tranh với process khác phải dừng chờ đến process khác chạy xong đoạn code CS này, q trình dừng chờ, chiếm CPU liên tục để dò điều kiện chạy tiếp liên tục (nhưng khơng thành cơng) Tinh thần nhóm phương pháp sleep/wakeup phải dừng chờ process khác, xin ngủ (trả CPU) nằm bất động Khi process khác thực xong vùng CS, hệ thống đánh thức process ngủ để bắt đầu thực đoạn lệnh CS… Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM SinhVienZone.com Môn : Hệ điều hành Chương : Tương tranh process Slide https://fb.com/sinhvienzonevn Loại trừ tương hỗ đoạn CS Mỗi lần muốn vào vùng CS, ta phải gọi hàm In_Control() để kiếm soát việc thi hành vùng CS, hoàn thành vùng CS, ta phải gọi hàm Out_Control() để thông báo cho process khác chờ để chúng kiểm tra lại việc vào Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM In_Control(); Vùng CS truy xuất tài nguyên dùng chung Out_Control(); Môn : Hệ điều hành Chương : Tương tranh process Slide 3.3 Các phương pháp chờ chủ động Phương pháp dựa Interrupt ƒ Tính chất CPU sau thi hành lệnh máy, tự động thi hành lệnh máy kế tiếp,… mà không để ý thứ bên ngồi ƒ Tuy nhiên, vậy, CPU không đáp ứng kịp thời kiện xảy q trình thi hành chương trình CPU Do đó, người ta phải tạo thêm chân nhập có tên IRQ Một thiết bị muốn yêu cầu CPU xử lý dùm cơng việc tạo tín hiệu (ngắt) gởi CPU chân IRQ Bình thường, CPU thấy có tín hiệu chân IRQ, dừng tạm thời chương trình chạy hành, chạy đoạn lệnh qui định trước (trình phục vụ ngắt) để xử lý công việc dùm cho thiết bị yêu cầu Sau hồn thành trình phục vụ ngắt, CPU quay tiếp tục thi hành chương trình từ vị trí ngừng trước Khoa Cơng nghệ Thơng tin Trường ĐH Bách Khoa Tp.HCM SinhVienZone.com Môn : Hệ điều hành Chương : Tương tranh process Slide https://fb.com/sinhvienzonevn 3.3 Các phương pháp chờ chủ động Phương pháp dựa Interrupt Tuy nhiên, CPU thi hành chương trình real-time hay nhạy cảm với thời gian, cần có khả phớt lờ yêu cầu ngắt Để giúp chương trình định lúc cho phép CPU đáp ứng ngắt, lúc phớt lờ, người ta cung cấp lệnh máy sau : Cli : clear Interrupt : cấm CPU phục vụ ngắt Sti : set interrupt : cho phép CPU đáp ứng ngắt Như vậy, ta viết : In_Control() ≡ cli Out_Control() ≡ sti thời điểm có tối đa process chạy vùng CS, khơng có process khác (kể trình lập lịch) ngắt tạm thời Khoa Cơng nghệ Thơng tin Trường ĐH Bách Khoa Tp.HCM Môn : Hệ điều hành Chương : Tương tranh process Slide 3.3 Các phương pháp chờ chủ động Phương pháp dựa ngắt quảng đơn giản, hiệu lập trình sai nguy hiểm khơn lường Thí dụ ta quên viết lệnh sti sau hoàn thành vùng CS process tương ứng tiếp tục chạy đến hết chương trình treo máy khơng process khác, kể trình lập lịch, chiếm CPU để chạy Hiện nay, có HĐH phép dùng phương pháp này, chương trình ứng dụng không phép dùng Hơn nữa, phương pháp dựa ngắt tác động CPU, máy có nhiều CPU CPU khác khơng bị ảnh hưởng lệnh cấm ngắt CPU Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM SinhVienZone.com Môn : Hệ điều hành Chương : Tương tranh process Slide 10 https://fb.com/sinhvienzonevn 3.3 Các phương pháp chờ chủ động Phương pháp dùng biến khóa Mỗi vùng CS bảo vệ biến khóa, biến lúc đầu = để xác định chưa process thi hành vùng CS Mỗi lần muốn thi hành vùng CS, process kiểm tra biến khóa, = set lên tiếp tục thi hành vùng CS đến hoàn thành set lại biến khóa = Trường hợp biến khóa = phải chờ process khác thi hành xong vùng CS Bool process_in_CS = 0; In_Control() { for (;;) if (process_in_CS ==0) break; process_in_CS = 1; } Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Out_Control() { process_in_CS = 0; } Môn : Hệ điều hành Chương : Tương tranh process Slide 11 3.3 Các phương pháp chờ chủ động Phương pháp dùng biến khóa Về ý tưởng phương pháp dùng biến khóa giải tốt vấn đề tranh chấp tài nguyên dùng chung, thực đoạn lệnh C slide trước thất bại số tình Giả sử process P1 muốn thi hành vùng CS, kiểm tra biến process_in_CS thấy mở (=0) Ngay lúc này, process hết khe thời gian, trình lập lịch dừng chọn process P2 chạy tiếp, P2 muốn thi hành vùng CS, kiểm tra biến khóa, lúc biến khóa = nên P2 set lên thi hành vùng CS Trong lúc thi hành CS, P2 hết khe thời gian CPU giao lại P1 P1 chạy tiếp set biến khóa lên vào vùng CS Như lúc process P1 P2 tranh chấp tài nguyên dùng chung! Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM SinhVienZone.com Môn : Hệ điều hành Chương : Tương tranh process Slide 12 https://fb.com/sinhvienzonevn 3.3 Các phương pháp chờ chủ động Phương pháp dùng lệnh TSL Phân tích lỗi phương pháp dùng biến khóa, ta nhận thấy lệnh kiểm tra biến khóa set lên đảm bảo thi hành theo chế nguyên tử, không chia cắt (hoặc thực hai, khơng thi hành lệnh nào) lỗi slide trước xảy ra, nghĩa phương pháp dùng biến khóa chạy Để đảm bảo ý tưởng trên, mặt phần cứng, hãng chế tạo CPU cung cấp thêm lệnh máy đặc biệt có tên TSL (Test-andSet) có dạng sau : TSL al, process_in_CS ≡ al ← process_in_CS process_in_CS ← Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Hệ điều hành Chương : Tương tranh process Slide 13 3.3 Các phương pháp chờ chủ động Phương pháp dùng lệnh TSL Nhờ đặc tính lệnh máy TSL, ta viết lại hàm In_Control() Out_Control() phương pháp dùng biến khóa sau : In_Control() { for (;;) { TSL al, process_in_CS; if (al ==0) break; } } Phân tích đoạn code trên, ta thấy process thực lệnh TSL set biến khóa lên nên sau có process khác chạy In_Control() phải chờ process ban đầu, khơng thể vào vùng CS trước Bool process_in_CS = 0; Out_Control() { process_in_CS = 0; } Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM SinhVienZone.com Môn : Hệ điều hành Chương : Tương tranh process Slide 14 https://fb.com/sinhvienzonevn 3.3 Các phương pháp chờ chủ động Phương pháp luân phiên Ý tưởng phương pháp cho process luân phiên thi hành vùng CS, thời điểm process thi hành CS Giả sử có N process cần thi hành CS đánh số từ đến N-1 Tạo biến "turn" chứa số process phép thi hành CS thời điểm Lúc đầu turn set = In_control (int idproc) { while (turn != idproc) ; // chờ đến lượt } Out_control (int idproc) { turn = (turn +1)%N; // cho process sau vào } Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Hệ điều hành Chương : Tương tranh process Slide 15 3.3 Các phương pháp chờ chủ động Phương pháp luân phiên Về lý thuyết, phương pháp luân phiên tạo bình đẳng tuyệt đối process việc thi hành vùng CS, process thi hành CS với hội ngang nhau, khơng process thi hành CS nhiều lần process khác Tuy nhiên thực tế, process thường có độ phức tạp khác nhau, có nhu cầu chạy vùng CS khác nhau, process cần chạy CS nhiều lần, process khác cần chạy CS lần Như vậy, process cần chạy CS lần ngăn cản process cần chạy CS nhiều lần Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM SinhVienZone.com Môn : Hệ điều hành Chương : Tương tranh process Slide 16 https://fb.com/sinhvienzonevn 3.3 Các phương pháp chờ chủ động Phương pháp Peterson Để khắc phục vấn đề phương pháp luân phiên, Peterson nâng cấp thuật giải In_Control() Out_Control() sau : #define FALSE #define TRUE #define N int turn = 0; // số process phép thi hành vùng CS int interested[N]; // dãy ghi nhận ý muốn process, ban đầu = void In_control (int idproc) { int other = - idproc; interested[idproc] = TRUE; // khai báo ý muốn vào CS turn = idproc; // khẳng định ý muốn vào CS while (interested[other]==TRUE && idproc!=turn) ; //chờ } void Out_control(int idproc) { interested[idproc] = FALSE; } Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Hệ điều hành Chương : Tương tranh process Slide 17 3.3 Các phương pháp chờ chủ động Phương pháp Peterson Phân tích hàm In_Control(), ta thấy process muốn vào vùng CS lượt process xin vào trước thắng process xin vào sau phải chờ Hơn nữa, process có quyền vào vùng CS mà khơng cần chờ đến lượt trước Lưu ý đoạn code slide trước cho trường hợp process Nếu có nhiều process cần truy xuất vùng CS, ta phải hiệu chỉnh lại đoạn code phức tạp nhiều giải vấn đề Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM SinhVienZone.com Môn : Hệ điều hành Chương : Tương tranh process Slide 18 https://fb.com/sinhvienzonevn 3.4 Đồng process : Bài tốn Sản xuất-Tiêu dùng Trong hệ thống có loại phần tử : ƒ Sản xuất chuyên tạo sản phẩm để vào kho chứa ƒ Tiêu dùng chuyên lấy sản phẩm từ kho chứa để sử dụng Bài tốn Sản xuất -Tiêu dùng có vấn đề cần giải : ƒ để phần tử Sản xuất Tiêu dùng không tranh chấp truy xuất kho chứa sản phẩm ƒ để đồng tốc độ thi hành phần tử để chúng hoạt động tốt theo thời gian, không gây khủng hoảng thừa hay khủng hoảng thiếu Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Hệ điều hành Chương : Tương tranh process Slide 19 Ý tưởng giải Bài tốn Sản xuất -Tiêu dùng Khoa Cơng nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM SinhVienZone.com Môn : Hệ điều hành Chương : Tương tranh process Slide 20 https://fb.com/sinhvienzonevn 10 3.5 Các phương pháp sleep/wakeup Ta dùng Semaphore để giải tương tranh nhiều process sau : ƒ kết hợp semaphore nhị phân với vùng CS tương ứng Semaphore gán trị đầu sau chứa trị : hoặc Ta gọi semaphore semaphore nhị phân ƒ hàm In_Control() để kiểm soát vào vùng CS process lời gọi hàm down (s) ƒ hàm Out_Control() để kiểm soát vùng CS process lời gọi hàm up (s) Như vậy, thời điểm có process down(s) vào vùng CS, process khác down(s) bị thất bại phải ngủ chờ Khi process thực xong CS, thực up(s) đánh thức process ngủ dậy Trong process dậy này, có process thực thành cơng lệnh down(s) để vào vùng CS Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Hệ điều hành Chương : Tương tranh process Slide 25 3.5 Các phương pháp sleep/wakeup //dùng Semaphore giải tốn Sản xuất — Tiêu dùng Khoa Cơng nghệ Thơng tin Trường ĐH Bách Khoa Tp.HCM SinhVienZone.com Môn : Hệ điều hành Chương : Tương tranh process Slide 26 https://fb.com/sinhvienzonevn 13 3.5 Các phương pháp sleep/wakeup //dùng Semaphore giải toán Sản xuất — Tiêu dùng Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Hệ điều hành Chương : Tương tranh process Slide 27 3.5 Các phương pháp sleep/wakeup Phân tích code dùng semaphore để giải đồng thời vấn đề tương tranh đồng process toán Sản xuất — Tiêu dùng slide trước, ta thấy việc dùng semaphore gọn nhẹ hiệu Tuy nhiên khuyết điểm việc dùng semaphore độ an tồn khơng cao Cụ thể ta hốn vị lệnh down(&full) down(&mutex) process Consumer dễ dẫn đến deadlock hết sản phẩm kho chứa, Consumer tới khóa kho trước kiểm tra kho chứa, lúc kho chứa rỗng nên Consumer dừng chờ Producer đánh thức, nhiên Producer phải ngủ chờ Consumer mở kho chứa → Producer Consumer ngủ chờ ngủ mãi, tượng deadlock mà ta trình bày chương Khoa Cơng nghệ Thơng tin Trường ĐH Bách Khoa Tp.HCM SinhVienZone.com Môn : Hệ điều hành Chương : Tương tranh process Slide 28 https://fb.com/sinhvienzonevn 14 3.5 Các phương pháp sleep/wakeup Phương pháp dùng Monitor Monitor đối tượng cung cấp sẵn hệ thống Về cấu trúc, monitor gồm nhiều thuộc tính liệu nhiều tác vụ chức : Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Hệ điều hành Chương : Tương tranh process Slide 29 3.5 Các phương pháp sleep/wakeup Sự khác biệt Monitor đối tượng (module phần mềm) bình thường thể tính chất sau : monitor, ta định nghĩa nhiều biến điều kiện Biến điều kiện có tên, khơng có kiểu khơng có giá trị nên ta khơng dùng biến bình thường Chỉ có tác vụ định sẵn truy xuất biến điều kiện : - hàm wait(cond) : bắt process ngủ chờ biến điều kiện cond - hàm signal(cond) : đánh thức process ngủ chờ biến cond Về mặt điều khiển, Monitor cho phép tối đa process vào thi hành tác vụ Monitor thời điểm Nhờ tính chất này, ta dễ dàng giải việc loại trừ tương hỗ process chúng truy xuất đồng thời tài nguyên dùng chung cách đặt đoạn CS vào tác vụ riêng đặt tất tác vụ Monitor Khoa Cơng nghệ Thơng tin Trường ĐH Bách Khoa Tp.HCM SinhVienZone.com Môn : Hệ điều hành Chương : Tương tranh process Slide 30 https://fb.com/sinhvienzonevn 15 3.5 Các phương pháp sleep/wakeup //dùng Monitor giải tốn Sản xuất — Tiêu dùng Khoa Cơng nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Hệ điều hành Chương : Tương tranh process Slide 31 3.5 Các phương pháp sleep/wakeup Code Java dùng Monitor thực toán Sản xuất-Tiêu dùng //đặc tả class ứng dụng demo toán Sản xuất — Tiêu dùng public class ProducerConsumer { static final int N = 100; //kích thước kho chứa static producer p = new producer(); //đối tượng thread producer static producer c = new consumer(); //đối tượng thread consumer static ourMonitor mon = new ourMonitor(); //đối tượng monitor //điểm nhập ứng dụng demo public static void main(String args[]) { p.start(); //khởi động thread Producer c.start(); //khởi động thread Consumer } //(xem tiếp slide kế) Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM SinhVienZone.com Môn : Hệ điều hành Chương : Tương tranh process Slide 32 https://fb.com/sinhvienzonevn 16 3.5 Các phương pháp sleep/wakeup Code Java dùng Monitor thực toán Sản xuất-Tiêu dùng //class đặc tả thread Producer static class producer extends Thread { public void run() { int item; while (true) { item = produce_item(); mon.insert (item); } } priavte int produce_item () { } } Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Hệ điều hành Chương : Tương tranh process Slide 33 3.5 Các phương pháp sleep/wakeup Code Java dùng Monitor thực toán Sản xuất-Tiêu dùng //class đặc tả thread Consumer static class consumer extends Thread { public void run() { int item; while (true) { item = mon.remove(); consume_item(item); } } priavte void consume_item (int item) { } } Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM SinhVienZone.com Môn : Hệ điều hành Chương : Tương tranh process Slide 34 https://fb.com/sinhvienzonevn 17 3.5 Các phương pháp sleep/wakeup Code Java dùng Monitor thực toán Sản xuất-Tiêu dùng //class đặc tả Monitor static class our_monitor { private int buffer[] = new int[N]; // kho chứa private int count = 0, lo = 0, hi = 0; //các biến quản lý kho chứa //hàm thêm sản phẩm vào kho chứa public synchronized vois insert (int val) { if (count == N) goto_sleep(); //nếu kho đầy ngủ buffer[hi] = val; // để sản phầm vào vị trí hi = (hi+1) % N; //tăng vị trí để sản phẩm count = count +1; //tăng counter sản phẩm if (count == 1) notify(); //đánh thức consumer cần } Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Hệ điều hành Chương : Tương tranh process Slide 35 3.5 Các phương pháp sleep/wakeup Code Java dùng Monitor thực toán Sản xuất-Tiêu dùng //hàm lấy sản phẩm từ kho chứa public synchronized int remove () { int val; if (count == 0) goto_sleep(); //nếu kho hết ngủ val = buffer[lo]; // lấy sản phầm từ vị trí lo = (lo+1) % N; //tăng vị trí lấy sản phẩm count = count - 1; //giảm counter sản phẩm if (count == N-1) notify(); //đánh thức producer cần return val; } private void goto_sleep () { try { wait(); } catch (InterruptedException exc) {} } } Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM SinhVienZone.com Môn : Hệ điều hành Chương : Tương tranh process Slide 36 https://fb.com/sinhvienzonevn 18 3.5 Các phương pháp sleep/wakeup Phương pháp gởi/nhận thông báo Hệ thống cung cấp hàm chức : ƒ send (proc_id, message) cho phép gởi chuỗi byte tới prcoess proc_id ƒ receive (proc_id, message) cho phép chờ nhận chuỗi byte từ process proc_id gởi tới Đoạn code C sau giải toán Sản xuất — Tiêu dùng dùng phương pháp gởi/nhận thông báo Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Hệ điều hành Chương : Tương tranh process Slide 37 3.5 Các phương pháp sleep/wakeup Phương pháp gởi/nhận thơng báo //Code C thực tốn Sản xuất-Tiêu dùng #define N 100 void Producer(void) { int item; message m; while (TRUE) { item = produce_item(); //tạo sản phầm receive(consumer, &m); //chờ nhận yêu cầu từ consumer build_message(&m, tiem); //xây dựng thông báo chứa sản phẩm send(consumer, &m); //gởi đến consumer } } Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM SinhVienZone.com Môn : Hệ điều hành Chương : Tương tranh process Slide 38 https://fb.com/sinhvienzonevn 19 3.5 Các phương pháp sleep/wakeup Phương pháp gởi/nhận thơng báo //Code C thực tốn Sản xuất-Tiêu dùng #define N 100 void Consumer(void) { int item; message m; //gởi n yêu cầu sản xuất tới Producer for (i = 0; i

Ngày đăng: 28/01/2020, 22:28

TỪ KHÓA LIÊN QUAN