Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 32 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
32
Dung lượng
724,56 KB
Nội dung
LOGO ĐỒNGBỘHOÁNGUYÊNTHUỶ Giảng viên hướng dẫn: PGS.TS Trần Đình Quế Học viên thực hiện: Bùi Hồng Đại Nguyễn Thị Bích Ngọc Phạm Hữu Tình Phạm Minh Tuấn Nguyễn Tuấn M12CQCT01M12CQCT01 BB GROUP 1GROUP 1 NỘI DUNG TRÌNH BÀY 3.1 Giới thiệu 3.2 Semaphores 3.2.1 Bài toán Nhà sản xuất – Người tiêu thụ (The Producer-Consumer Problem) 3.2.2 Bài toán Bộ đọc – Bộ ghi (The Reader-Writer Problem) 3.2.3 Bài toán các triết gia ăn tối (The Dining Philosopher Problem) 3.3 Monitors 3.4 Nguy hiểm của sự tắc nghẽn (DANGERS OF DEADLOCKS) 3.5 Problems 3.6 Bibliographic Remarks Giới thiệu TrongTrong chươngchương nàynày giớigiới thiệuthiệu sựsự đồngđồng bộbộ hoáhoá nguyênnguyên thuỷthuỷ sửsử dụngdụng cáccác giảigiải pháppháp BusyBusy WaitWait ((ChờChờ đợiđợi bậnbận)) ĐồngĐồng bộbộ hóahóa nguyênnguyên thuỷthuỷ đượcđược sửsử dụngdụng đểđể loạiloại trừtrừ lẫnlẫn nhaunhau đểđể cungcung cấpcấp trậttrật tựtự giữagiữa cáccác hoạthoạt độngđộng kháckhác nhaunhau theotheo cáccác chuỗichuỗi kháckhác nhaunhau CóCó rấtrất nhiềunhiều cáchcách xâyxây dựngdựng đồngđồng bộbộ hóahóa trongtrong cáccác ngônngôn ngữngữ lậplập trìnhtrình kháckhác nhaunhau,, haihai trongtrong sốsố đóđó phổphổ biếnbiến nhấtnhất làlà:: SemaphoresSemaphores vàvà MonitorsMonitors BùiBùi HồngHồng ĐạiĐại –– M12CQCT01M12CQCT01 BB GROUP 1GROUP 1 Semaphores Khái niệm Semaphores được Dijkstra đưa ra để giải quyết Busy Wait. Một semaphore S là một biến số nguyên (integer) được truy xuất chỉ thông qua hai thao tác nguyên tử: wait và signal. Các thao tác này được đặt tên P () (cho wait - chờ để kiểm tra) và V () (cho signal- báo hiệu để tăng). Giá trị của Semaphore (hoặc Semaphore nhị phân) chỉ có thể là sai hoặc đúng. Hàng đợi của các quá trình bị chặn ban đầu là trống rỗng một quá trình có thể thêm vào hàng đợi khi nó làm cho một cuộc gọi đến P (). Khi một quá trình gọi P () và giá trị là đúng, thì giá trị của cột trở thành sai. Nếu giá trị của cột là sai, sau đó quá trình này bị chặn cho đến khi nó trở thành đúng BùiBùi HồngHồng ĐạiĐại –– M12CQCT01M12CQCT01 BB GROUP 1GROUP 1 Semaphores Giả thiết là cuộc gọi này chèn quá trình người gọi vào hàng đợi của các quá trình bị chặn. Khi giá trị trở thành đúng, quá trình có thể làm cho nó sai và trở về từ P (). Các cuộc gọi đến V () làm cho giá trị đúng và cũng thông báo một quá trình nếu hàng đợi của các quá trình ngủ (Sleeping) trên cột đó là không rỗng. BùiBùi HồngHồng ĐạiĐại –– M12CQCT01M12CQCT01 BB GROUP 1GROUP 1 Semaphores Loại trừ lẫn nhau là đơn giản để thực hiện: BinarySernaphore mutex = new BinarySemaphore(true1; mutex.P(); c r i t i c a l S e c t i o n 0 ; mutex.V(); Một biến thể của cột cho phép nó để có bất kỳ số nguyên giá trị của nó. Các cột này được gọi là Semaphores đếm (Counting semupphores). Semaphores có thể được sử dụng để giải quyết một loạt các vấn đề đồngbộ hóa. BùiBùi HồngHồng ĐạiĐại –– M12CQCT01M12CQCT01 BB GROUP 1GROUP 1 Semaphores Chú ý: Java không cung cấp các cột để xây dựng ngôn ngữ cơ bản, nhưng có thể dễ dàng được thực thi trong Java bằng cách sử dụng ý tưởng của các Monitor (sẽ đề cập sau). Chỉ đơn giản cho rằng Semaphores có sẵn và giải quyết vấn đề đồngbộhóa bằng cách sử dụng chúng. BùiBùi HồngHồng ĐạiĐại –– M12CQCT01M12CQCT01 BB GROUP 1GROUP 1 BùiBùi HồngHồng ĐạiĐại –– M12CQCT01M12CQCT01 BB . . GROUP 1GROUP 1 BàiBài toántoán NhàNhà sảnsản xuấtxuất –– NgườiNgười tiêutiêu thụthụ SemaphoresSemaphores BàiBài toántoán BộBộ đọcđọc –– BộBộ ghighi BàiBài toántoán cáccác triếttriết giagia ănăn tốitối Bài toán Nhà sản xuất – Người tiêu thụ Một bộ đệm được chia sẻ giữa hai quá trình được gọi là nhà sản xuất và người tiêu thụ. Nhà sản xuất sản xuất các mục được gửi trong bộ đệm và người tiêu thụ lấy các mục từ bộ đệm và tiêu thụ (sử dụng) chúng Giả sử các mặt hàng kiểu Double. Kể từ khi bộ đệm được chia sẻ, mỗi quá trình phải truy cập vào bộ đệm trong một cách loại trừ lẫn nhau. Sử dụng một loạt các đôi kích thước như một bộ đệm của chúng BùiBùi HồngHồng ĐạiĐại –– M12CQCT01M12CQCT01 BB GROUP 1GROUP 1 Bài toán Nhà sản xuất – Người tiêu thụ Bộ đệm có hai con trỏ, inBuf và outBuf, các chỉ số trong mảng gửi một mục và lấy một mục tương ứng Biến đếm theo dõi số lượng các mục hiện trong bộ đệm bên cạnh việc loại trừ lẫn nhau, có thêm hai hạn chế đồngbộhóa mà cần phải được thỏa mãn: Người tiêu dùng không nên lấy bất kỳ mục nào từ một bộ đệm trống. Nhà sản xuất không nên gửi bất kỳ mục nào trong bộ đệm nếu nó là đầy đủ. Các bộ đệm có thể trở thành đầy đủ nếu nhà sản xuất là sản xuất các mặt hàng tại một tỷ lệ lớn hơn so với tỷ lệ mà tại đó các mặt hàng được tiêu thụ của người tiêu dùng. BùiBùi HồngHồng ĐạiĐại –– M12CQCT01M12CQCT01 BB GROUP 1GROUP 1 [...]...Bài toán Nhà sản xuất – Người tiêu thụ Như vậy hình thức đồng bộhóa được gọi là điều kiện đồng bộhóa Nó đòi hỏi một quá trình chờ đợi cho một số điều kiện để trở thành hiện thực (chẳng hạn như các bộ đệm để trở thành không rỗng) trước khi tiếp tục các hoạt động của mình Bùi Hồng Đại – M12CQCT01-B M12CQCT01- GROUP 1 Bài toán Bộ đọc – Bộ ghi Yêu cầu thiết kế một giao thức để phối hợp truy cập... thread đang chờ đợi để vào monitor Đối tượng monitor là một tài nguyên sử dụng chung còn các Thread như là các tiến trình chờ đợi để được sử dụng tài nguyên chung Tại một thời điểm bất kỳ chỉ có 1 thread có thể được sử dụng tài nguyên chung là monitor) www.themegallery.com Company Logo Monitors Chương trình đồng thời cũng yêu cầu đồng bộhóa có điều kiện (conditional synchronization) khi một threads... Logo Bình luận thư mục Semaphore đã được giới thiệu bởi Dijkstra [Dij65a] Khái niệm giám sát được giới thiệu bởi Brinch Hansen [Ha11721 và Hoarephong cách giám sát, bởi Hoare [Hoa74] Các giải pháp cho các vấn đề đồng bộhóa cổ điển trong Java cũng sẽ được thảo luận trong cuốn sách của Hartley [Har98] Ví dụ của bế tắc và độ phân giải của nó dựa trên nguồn tài nguyên đặt hàng được thảo luận trong... đọc – ghi: Giao thức nên đảm bảo rằng người đọc và người viết không truy cập CSDL đồng thời Không xung đột ghi – ghi: Giao thức nên đảm bảo rằng 2 người ghi không truy cập CSDL đồng thời Nguyễn Thị Bích Ngọc – M12CQCT01-B M12CQCT01- GROUP 1 Bài toán Bộ đọc – Bộ ghi Có thể đồng thời nhiều người đọc truy cập vào CSDL đồng thời giả sử rằng người đọc theo dõi giao thức bằng cách họ gọi hàm startRead... Do đó, rõ ràng cần phải kiểm B khi thay đổi Nếu B thực sự là sai, nó gọi lại wait() Trong Java, chúng ta xác định một đối tượng là một monitor bằng cách sử dụng các từ khóa đồngbộ với các phương pháp của nó Để có được đồngbộhóa có điều kiện, Java cung cấp: wait(): chèn các thread trong hàng đợi Để đơn giản, chúng tôi sử dụng Util.myWait () thay vì wait () trong Java Sự khác biệt duy nhất là... toán Bộ đọc – Bộ ghi Phương thức startWrite và endWrite là khá đơn giản Bất cứ người ghi nào khi muốn truy cập vào CSDL khóa nó bằng cách sử dụng wlock P() Nếu CSDL không được khóa, người ghi này có thể truy cập vào Bây giờ, không có người đọc hoặc người ghi có thể truy cập vào CSDL cho đến khi người ghi này gỡ bỏ việc khóa sử dụng hàm endWrite() www.themegallery.com Company Logo Bài toán Bộ đọc... triết gia cầm cả 2 dĩa tại thời điểm đồng thời Mặc dù lúc này có thể loại bỏ bế tắc Sẽ có vấn đề với các triết gia đang đói bởi vì hàng xóm tiếp tục luân phiên nhau ăn Người đọc được mời đến với giải pháp là tự do bế tắc tốt hơn là bị đói www.themegallery.com Company Logo Monitors Monitor là một cấu trúc hướng đối tượng bậc cao để đồng bộhóa trong lập trình đồng thời Monitor có thể được xem như... Logo Bài toán Bộ đọc – Bộ ghi Xem hàm startRead và endRead Trong hàm startRead, người đọc đầu tiên gia tăng numReaders Nếu đây là người đọc đầu tiên (numReaders = 1) , sau đó nó cần khóa CSDL, nếu không sẽ có những người đọc khác truy cập vào CSDL và có thể sử dụng nó Trong hàm endRead, giá trị của numRead giảm dần và khi người đọc cuối cùng rời khỏi CSDL thì CSDL sẽ được mở khóa và sử dụng gọi hàm... một Java monitor Có hai hàng đợi kết hợp với một đối tượng: một hàng đợi của các thread chờ khóa liên quan đến monitor và một hàng đợi của các thread chờ đợi một số điều kiện để trở thành hiện thực www.themegallery.com Company Logo Nguy hiểm của sự tắc nghẽn (Deadlock) thread t1 gọi Khi mỗi quá trình đồngbộ đều yêu cầu một lock, có thể để xảy ra quá trình tắc nghẽn (Deadlock) Chương trình để tránh... như sau: thinking, hungry và eating Để ăn, triết gia cần có các tài nguyên (dĩa) do đó cần gọi hàm acquire(i) Do đó giao thức yêu cầu trừu tượng hóa một giao diện Resource www.themegallery.com Company Logo Bài toán các triết gia ăn tối Để giải quyết vấn đề này sử dụng nhị phân semaphores cho mỗi chiếc dĩa Để yêu cầu các nguồn tài nguyên để ăn, một nhà triết học i sẽ túm lấy chiếc dĩa ở bên trái bằng . giớigiới thiệuthiệu sựsự đồng ồng b bộ hoáhoá nguyênnguyên thuỷthuỷ sửsử dụngdụng cáccác giảigiải pháppháp BusyBusy WaitWait ((ChờChờ đợiđợi bậnbận)) Đồng ồng b bộ hóahóa nguyênnguyên thuỷthuỷ đượcđược. thụ Như vậy hình thức đồng bộ hóa được gọi là điều kiện đồng bộ hóa. Nó đòi hỏi một quá trình chờ đợi cho một số điều kiện để trở thành hiện thực (chẳng hạn như các bộ đệm để trở thành không. theotheo cáccác chuỗichuỗi kháckhác nhaunhau CóCó rấtrất nhiềunhiều cáchcách xâyxây dựngdựng đồng ồng b bộ hóahóa trongtrong cáccác ngônngôn ngữngữ lậplập trìnhtrình kháckhác nhaunhau,, haihai trongtrong