Lhs 3121410423 Baithuhoachlan2

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 4

Bài thu hoạch lần 2

Process synchronization

Họ và tên: Lê Hồng Sơn


Mssv: 3121410423
Tiết lý thuyết: thứ 5 tiết 4
1. Critical selection
Đoạn găng (Critical Section) hay miền găng là đoạn mã có tác
động đến các tài nguyên găng, chỉ cho phép một tiểu trình (tiến
trình) thi hành tại một thời điểm.
Critical selection cần phải thỏa mãn 3 điều kiện đó là :
Mutual Exclusion: phần này sẽ giải thích chi tiết ở câu bên dưới nên tác giả
sẽ không viết lại
Progress: Một tiến trình tạm dừng bên ngoài miền găng không
được ngăn cản các tiến trình khác vào miền găng
Bounded waiting: Không có tiến trình nào phải chờ vô hạn để
được vào miền găng.

2. Các giải pháp Process synchronization


Có nhiều giải pháp Process synchronization đang được sử dụng nhưng trong
tài liệu này chỉ đề cập đến một vài giải pháp khả quan và thông dụng như
sau:
Giải pháp Busy Waiting: tiếp tục tiêu thụ CPU trong khi chờ
đợi vào miền găng. Không đòi hỏi sự trợ giúp của hệ điều hành.
Giải pháp Sleep wakeup: từ bỏ CPU khi chưa được vào CS
(miền găng). Khi CS trống sẽ được đánh thức để vào CS. Cần
được hệ điều hành hổ trợ.
▪ Semophore
▪ Monitor
▪ Message
Giải pháp Peterson: Petson đưa ra một giải pháp kết hợp ý tưởng của cả hai
giải pháp kể trên. Các tiến trình chia sẻ hai biến chung :
Giải pháp cấm ngắt: cho phép tiến trình cấm tất cả các ngắt trước khi vào
miền găng, và phục hồi ngắt khi ra khỏi miền găng. Khi đó, ngắt đồng hồ
cũng không xảy ra, do vậy hệ thống không thể tạm dừng hoạt động của tiến
trình đang xử lý để cấp phát CPU cho tiến trình khác, nhờ đó tiến trình hiện
hành yên tâm thao tác trên miền găng mà không sợ bị tiến trình nào khác
tranh chấp.
Giải pháp chỉ thị TSL: đây là một giải pháp đòi hỏi sự trợ giúp của cơ chế
phần cứng. Nhiều máy tính cung cấp một chỉ thị đặc biệt cho phép kiểm tra
và cập nhật nội dung một vùng nhớ trong một thao tác không thể phân chia,
gọi là chỉ thị Test-and-Set Lock (TSL)
Quy chụp chung đối với các giải pháp phần mềm đã được liệt kê và nêu ra ở
trên ta sẽ nhận thấy được những vấn đề như sau:
▪ Không cần sự hổ trợ của hệ thống.
▪ Khó mở rộng.
▪ Dễ dẫn đến sai.
3. Mutex là gì?
là một đối tượng chương trình có thể ngăn chặn truy cập đồng thời đến một
tài nguyên chia sẻ. Khái niệm này được sử dụng trong lập trình đồng thời
với một bộ phận quan trọng, một đoạn mã trong đó các quá trình hoặc đề
truy cập vào một tài nguyên được chia sẻ. Chỉ có một thread sở hữu mutex
cùng một lúc, do đó một mutex với một tên duy nhất được tạo ra khi một
chương trình khởi động. Khi một thread nắm giữ một tài nguyên, nó phải
khóa mutex từ chủ đề khác để ngăn chặn truy cập đồng thời của tài nguyên.
Sau khi giải phóng tài nguyên, thread mở ra các mutex.

4. Semaphore là gì?
Ngoài spinlock và mutex lock, ta cũng có thể áp dụng kỹ thuật semaphore để
bảo vệ dữ liệu trong critical resource. Không chỉ là một kỹ thuật đồng bộ tài
nguyên, semaphore cũng được biết đến là một kỹ thuật đồng bộ hoạt động.
Semaphore là một cấu trúc dữ liệu, được dùng để đồng bộ tài nguyên và đồng
bộ hoạt động.

Khi được dùng với mục đích đồng bộ tài nguyên, semaphore tương tự như
một bộ các chìa khóa dự phòng. Nếu một thread lấy được một chiếc chìa khóa,
thread đó được phép truy cập vào tài nguyên. Nhưng nếu không còn chiếc chìa
khóa nào, thread đó phải đợi cho tới khi một thread khác trả lại chìa khóa dự
phòng. Nhờ vậy, race condition sẽ bị ngăn chặn.

Vì hoạt động của binary semaphore tương tự như mutex lock, nên loại
semaphore này thường được sử dụng để đồng bộ dữ liệu, phòng tránh race
condition. Trong khi lập trình device driver, ta đặt hàm down và up lần lượt
vào trước và sau critical section của mỗi thread.
ứng dụng : Semaphores còn được sử dụng phổ biến trong các ngôn ngữ lập
trình - những ngôn ngữ mà về bản chất không hỗ trợ những dạng khác của
sự đồng bộ hóa. Chúng cũng được sử dụng trong các kĩ thuật đồng bộ ban
đầu như trong các hệ điều hành. Xu hướng trong sự phát triển của ngôn ngữ
lập trình, dường như là hướng vào các dạng cấu trúc đồng bộ hóa, giống như
đồng bộ hóa các kênh. Cộng thêm sự không đầy đủ trong cách phân chia với
deadlock, semaphore không bảo vệ người lập trình khỏi các lỗi đơn giản
trong việc lấy một semaphore - cái mà luôn luôn được thay đổi bởi các tiến
trình đồng thời, và cũng quên giải phóng semaphore sau khi lấy ra.(theo
wikipedia)

5. Buffer problem
Bounded Buffer Problem, trong đó tiến trình sản xuất chỉ có thể tạo ra tối đa
một số lượng vật phẩm nhất định. Sau đó nó cần chờ tiến trình tiêu thụ lấy ra
dùng để giải phóng không gian bộ đệm và tiếp tục tạo ra vật phẩm mới. Về phía
còn lại, tiến trình tiêu thụ nếu như không thấy có vật phẩm mình cần trong bộ
đệm thì nó sẽ đợi cho đến khi tiến trình sản xuất tạo ra.
Giải quyết vấn đề: sử dụng semaphores
Unbounded Buffer Problem, trong đó tiến trình sản xuất có thể tiếp tục tạo ra
các vật phẩm và không có giới hạn về kích thước của bộ đệm.
6. reader writer problem
7. dining philosophers problem
tạm dịch là bữa tối của các triết gia, (ví dụ bữa tối của các triết gia) là một ví
dụ điển hình và cực kì nổi tiếng khi nhắc đến các vấn đề trong bài toán xử lý
concurrent. một vấn đề đồng bộ hóa cổ điển trong hệ điều hành. Với sự hiện
diện của nhiều hơn một quy trình và tài nguyên hạn chế trong hệ thống, vấn
đề đồng bộ hóa phát sinh. Nếu một tài nguyên được chia sẻ giữa nhiều quá
trình cùng một lúc thì nó có thể dẫn đến sự không nhất quán về dữ liệu.
Hành động đồng bộ hóa quá trình thực thi sao cho không có hai quá
trình nào có quyền truy cập vào cùng một dữ liệu và tài nguyên liên
quan được gọi là đồng bộ hóa quá trình trong hệ điều hành. Phần quan
trọng là một phần của chương trình cho phép bạn truy cập các biến hoặc tài
nguyên được chia sẻ. Trong một phần quan trọng, một hành động nguyên tử
(quy trình chạy độc lập) là cần thiết, có nghĩa là chỉ một quy trình duy nhất
có thể chạy trong phần đó tại một thời điểm.
Vấn đề: sẽ không có hai người có thể ăn cùng một lúc, bằng cách sử dụng
giải pháp đã nói trên nhược điểm của kĩ thuật vừa trình bày là nó có thể lỗi.
lỗi sẽ xảy ra khi tất cả người ngồi trong bàn ăn đó đều cầm chiếc đũa của
mình cùng một lúc, vì vậy, nó khiến cho tất cả mọi người trên bàn đều
không thể ăn được phần thức ăn của mình.

• Từ đó ta thấy: Đồng bộ hóa quy trình được định nghĩa là không có hai
quy trình nào có quyền truy cập vào cùng một dữ liệu và tài nguyên liên
quan.
• Bài toán Nhà triết học ăn uống là một ví dụ về bài toán đồng bộ hóa quy
trình.
• Triết gia là một phép tương tự cho quy trình và đũa cho tài nguyên, chúng ta
có thể cố gắng giải quyết các vấn đề đồng bộ hóa quy trình bằng cách sử
dụng điều này.
• Giải pháp của vấn đề Triết gia ăn uống tập trung vào việc sử dụng các
semaphores.
• Không có hai triết gia gần đó có thể ăn cùng một lúc bằng cách sử dụng giải
pháp nói trên cho vấn đề triết gia ăn uống, và tình huống này gây ra bế tắc,
đây là một nhược điểm của bài toán triết gia ăn uống.

You might also like