tailieunhanh - Bài giảng Hệ điều hành: Chương 3 - Thoại Nam, Lê Ngọc Minh
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, nội dung chi tiết. | 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 -2- 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 () 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 -3- Bounded Buffer () 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 -4- 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 .
đang nạp các trang xem trước