Bài giảng Hệ điều hành: Chương 3 - Thoại Nam, Lê Ngọc Minh
Số trang: 30
Loại file: pdf
Dung lượng: 379.75 KB
Lượt xem: 31
Lượt tải: 0
Xem trước 3 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng "Hệ điều hành - Chương 3: Đồng bộ và giải quyết tranh chấp" cung cấp cho người học các kiến thức: Khái niệm cơ bản, bài toán Critical-Section, các giải pháp phần mềm, đồng bộ bằng hardware, semaphore,.... Mời các bạn cùng tham khảo nội dung chi tiết.
Nội dung trích xuất từ tài liệu:
Bài giảng Hệ điều hành: Chương 3 - Thoại Nam, Lê Ngọc Minh Chöông 3 Ñoàng boä vaø giaûi quyeát tranh chaáp (Process Synchronization) -1- Noäi dung Khaùi nieäm cô baûn Baøi toaùn “Critical-Section” Caùc giaûi phaùp phaàn meàm – Peterson, Bakery Ñoàng boä baèng hardware Semaphore Caùc baøi toaùn ñoàng boä Critical Region Monitor Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM -2- CuuDuongThanCong.com https://fb.com/tailieudientucntt 1 Khaùi nieäm cô baûn Caùc process/thread thöïc thi ñoàng thôøi chia seû code, chia seû döõ lieäu (qua shared memory, file). Neáu khoâng coù söï ñieàu khieån khi truy caäp caùc döõ lieäu chia seû thì coù theå xaûy ra tröôøng hôïp khoâng nhaát quaùn döõ lieäu (data inconsistent). Ñeå duy trì söï nhaát quaùn döõ lieäu, heä thoáng caàn coù cô cheá baûo ñaûm söï thöïc thi coù thöù töï cuûa caùc process ñoàng thôøi. Ví duï Bounded-Buffer (ch.4) theâm bieán ñeám count #define BUFFER_SIZE 10 # typedef struct { … } item; item buffer[BUFFER_SIZE]; int in = 0, out = 0, count = 0; Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM -3- Bounded Buffer (t.t) Producer item nextProduced; while (1){ while ( count == BUFFER_SIZE ); /* do nothing */ buffer[in] = nextProduced; count++; in = (in + 1) % BUFFER_SIZE; } Consumer item nextConsumed; while (1){ while ( count == 0 ); /* do nothing */ buffer[in] = nextConsumed; count--; out = (out + 1) % BUFFER_SIZE; } Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM -4- CuuDuongThanCong.com https://fb.com/tailieudientucntt 2 Race Condition Race condition: nhieàu Caùc leänh taêng, giaûm bieán process truy xuaát vaø thao töông ñöông trong ngoân ngöõ taùc ñoàng thôøi treân döõ lieäu maùy laø: chia seû. (P) count ++; – Keát quaû cuoái cuøng cuûa vieäc – register1 := count truy xuaát ñoàng thôøi naøy phuï – register1 := register1 +1 thuoäc thöù töï thöïc thi cuûa caùc – count := register1 leänh thao taùc döõ lieäu. (C) count --; Chuùng ta caàn baûo ñaûm sao – register2 := count cho taïi moãi thôøi ñieåm coù moät – register2 := register2 -1 vaø chæ moät process ñöôïc – count := register2 truy xuaát, thao taùc treân döõ lieäu chia seû. Do ñoù, caàn coù Trong ñoù, registeri laø caùc thanh cô cheá ñoàng boä hoaït ñoäng ghi cuûa CPU. cuûa caùc process naøy. Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM -5- Ví duï veà Race Condition Quaù trình thöïc hieän xen keõ cuûa leänh taêng/giaûm bieán count Hieän taïi: count = 5 0: producer register1 := count {register1 = 5} 1: producer register1 := register1+1 {register1 = 6} 2: consumer register2 := count {register2 = 5} 3: consumer register2 := register2-1 {register2 = 4} 4: producer count := register1 {count = 6} 5: consumer count := register2 {count = 4} 0 Caû hai process thao taùc ñoàng thôøi treân bieán chung count. Keát quaû cuûa bieán chung naøy khoâng nhaát quaùn döôùi caùc thao taùc cuûa hai process ⇒ leänh count++, count-- phaûi laø atomic, nghóa laø thöïc hieän nhö moät leänh ñôn, khoâng bò ngaét nöûa chöøng. Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM -6- CuuDuongThanCong.com ...
Nội dung trích xuất từ tài liệu:
Bài giảng Hệ điều hành: Chương 3 - Thoại Nam, Lê Ngọc Minh Chöông 3 Ñoàng boä vaø giaûi quyeát tranh chaáp (Process Synchronization) -1- Noäi dung Khaùi nieäm cô baûn Baøi toaùn “Critical-Section” Caùc giaûi phaùp phaàn meàm – Peterson, Bakery Ñoàng boä baèng hardware Semaphore Caùc baøi toaùn ñoàng boä Critical Region Monitor Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM -2- CuuDuongThanCong.com https://fb.com/tailieudientucntt 1 Khaùi nieäm cô baûn Caùc process/thread thöïc thi ñoàng thôøi chia seû code, chia seû döõ lieäu (qua shared memory, file). Neáu khoâng coù söï ñieàu khieån khi truy caäp caùc döõ lieäu chia seû thì coù theå xaûy ra tröôøng hôïp khoâng nhaát quaùn döõ lieäu (data inconsistent). Ñeå duy trì söï nhaát quaùn döõ lieäu, heä thoáng caàn coù cô cheá baûo ñaûm söï thöïc thi coù thöù töï cuûa caùc process ñoàng thôøi. Ví duï Bounded-Buffer (ch.4) theâm bieán ñeám count #define BUFFER_SIZE 10 # typedef struct { … } item; item buffer[BUFFER_SIZE]; int in = 0, out = 0, count = 0; Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM -3- Bounded Buffer (t.t) Producer item nextProduced; while (1){ while ( count == BUFFER_SIZE ); /* do nothing */ buffer[in] = nextProduced; count++; in = (in + 1) % BUFFER_SIZE; } Consumer item nextConsumed; while (1){ while ( count == 0 ); /* do nothing */ buffer[in] = nextConsumed; count--; out = (out + 1) % BUFFER_SIZE; } Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM -4- CuuDuongThanCong.com https://fb.com/tailieudientucntt 2 Race Condition Race condition: nhieàu Caùc leänh taêng, giaûm bieán process truy xuaát vaø thao töông ñöông trong ngoân ngöõ taùc ñoàng thôøi treân döõ lieäu maùy laø: chia seû. (P) count ++; – Keát quaû cuoái cuøng cuûa vieäc – register1 := count truy xuaát ñoàng thôøi naøy phuï – register1 := register1 +1 thuoäc thöù töï thöïc thi cuûa caùc – count := register1 leänh thao taùc döõ lieäu. (C) count --; Chuùng ta caàn baûo ñaûm sao – register2 := count cho taïi moãi thôøi ñieåm coù moät – register2 := register2 -1 vaø chæ moät process ñöôïc – count := register2 truy xuaát, thao taùc treân döõ lieäu chia seû. Do ñoù, caàn coù Trong ñoù, registeri laø caùc thanh cô cheá ñoàng boä hoaït ñoäng ghi cuûa CPU. cuûa caùc process naøy. Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM -5- Ví duï veà Race Condition Quaù trình thöïc hieän xen keõ cuûa leänh taêng/giaûm bieán count Hieän taïi: count = 5 0: producer register1 := count {register1 = 5} 1: producer register1 := register1+1 {register1 = 6} 2: consumer register2 := count {register2 = 5} 3: consumer register2 := register2-1 {register2 = 4} 4: producer count := register1 {count = 6} 5: consumer count := register2 {count = 4} 0 Caû hai process thao taùc ñoàng thôøi treân bieán chung count. Keát quaû cuûa bieán chung naøy khoâng nhaát quaùn döôùi caùc thao taùc cuûa hai process ⇒ leänh count++, count-- phaûi laø atomic, nghóa laø thöïc hieän nhö moät leänh ñôn, khoâng bò ngaét nöûa chöøng. Khoa Coâng Ngheä Thoâng Tin – Ñaïi Hoïc Baùch Khoa Tp.HCM -6- CuuDuongThanCong.com ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Hệ điều hành Hệ điều hành Process synchronization Giải pháp phần mềm Đồng bộ bằng hardware Bài toán đồng bộGợi ý tài liệu liên quan:
-
Giáo trình Lý thuyết hệ điều hành: Phần 1 - Nguyễn Kim Tuấn
110 trang 439 0 0 -
Lecture Operating systems: Lesson 24 - Dr. Syed Mansoor Sarwar
29 trang 368 0 0 -
Lecture Operating systems: Lesson 21 - Dr. Syed Mansoor Sarwar
22 trang 315 0 0 -
Giáo trình Nguyên lý các hệ điều hành: Phần 2
88 trang 260 0 0 -
Lecture Operating systems: Lesson 13 - Dr. Syed Mansoor Sarwar
31 trang 258 0 0 -
175 trang 257 0 0
-
173 trang 253 2 0
-
Giáo trình Nguyên lý hệ điều hành (In lần thứ ba): Phần 1 - PGS.TS. Hà Quang Thụy
98 trang 233 0 0 -
Đề tài nguyên lý hệ điều hành: Nghiên cứu tìm hiểu về bộ nhớ ngoài trong hệ điều hành Linux
19 trang 229 0 0 -
Lecture Operating systems: Lesson 12 - Dr. Syed Mansoor Sarwar
24 trang 220 0 0