6.3 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006Giới thiệu Một tiến trình cộng tác là một tiến trình ảnh hưởng hay bị ảnh hưởng
Trang 1Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
TIẾN TRÌNH
Trang 36.3 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Giới thiệu
Một tiến trình cộng tác là một tiến trình ảnh hưởng hay
bị ảnh hưởng tới các tiến trình khác đang thực thi trong
hệ thống
Các tiến trình hợp tác có thể chia sẽ trực tiếp không gian địa chỉ vật lý, hay được phép chia sẽ dữ liệu thông qua
tập tin
Trang 4Tổng quan
Sự truy cập đồng thời để chia sẽ dữ liệu có thể đem lại kết quả không nhất quán
Tính nhất quán của việc duy trì dữ liệu yêu cầu cơ
chế để đảm bảo thứ tự thi hành của việc điều độ tiến trình
Giả định rằng chúng ta muốn cung cấp một giải
pháp để bài toán người tiêu dùng - người sản xuất
Trang 56.5 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Mã của tiến trình người sản xuất
Trang 6Mã của tiến trình người tiêu thụ
Trang 7
6.7 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Điều kiện cạnh tranh (race condition)
Giả thiết thực thi ban đầu với “count = 5” :
T0: producer thực thi register1 = count {register1 = 5}
T1: producer thực thi register1 = register1 + 1 {register1 = 6} T2: producer thực thi register2 = count {register2 = 5}
T3: producer thực thi register2 = register2 - 1 {register2 = 4} T4: producer thực thi count = register1 {count = 6 }
T5: producer thực thi count = register2 {count = 4}
Trang 96.9 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Đoạn găng
1 Điều kiện cạnh tranh - Nhiều quá trình truy xuất cùng thao
tác dữ liệu đồng hành để chia sẽ dữ liệu và kết quả của việc thực thi phụ thuộc vào thứ tự xác định ở đó việc truy xuất xảy ra
2 Đoạn găng – Phân đoạn mã chia sẽ dữ liệu được truy cập
trong các tiến trình đồng thời
3 Phần đi vào – Vùng mã thực hiện yêu cầu quyền để đi
vào đoạn găng của nó.
4 Phần kết thúc – Vùng mã được chạy sau khi ra khỏi đoạn
găng.
Trang 10Đoạn găng
Trang 116.11 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Giả sử rằng mỗi tiến trình đang thực thi với tốc độ khác 0
không có giả thuyết nào được quan tâm về tốc tương đối của n
quá trình
Trang 12Giải pháp
Giải pháp “chờ đợi bận”
Giải pháp “SLEEP AND WAKEUP”
Trang 136.13 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Giải pháp “chờ đợi bận”:
Giải pháp hai tiến trình (two process Solution)
Hai tiến trình chia thành hai biến :
Int turn;
Boolean flag[2]
Biến turn cho biết quá trình diễn biến được tiến hành
trong đoạn găng
Mảng flag được dùng để hiển thị một tiến trình sẵn sàng
đi vào đoạn găng flag[i] = true nghĩa là process Pi đang sẵn sàng!
Trang 14Giải pháp “chờ đợi bận”
Giải thuật 1:
Để hai tiến trình chia sẽ một biến số nguyên chung turn
được khởi tạo bằng 0 hoặc 1 Nếu turn = 0 thì Pi được phép thực thi trong đoạn găng của nó
Giải pháp này đảm bảo rằng chỉ một tiến trình tại một thời điểm có thể ở trong đoạn găng của nó
Trang 156.15 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Cấu trúc của tiến trình pi trong giải thuật 1
Trang 16Giải pháp “chờ đợi bận”
Giải thuật 2:
Ta thay thế biến turn với mảng flag[2];
Các phần tử của mảng được khởi tạo tới false
Nếu flag[i] là true => Pi sẵn sàng đi vào đoạn găng
Trang 176.17 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Cấu trúc của tiến trình pi trong giải thuật 2
Trang 18Giải pháp “chờ đợi bận”
Giải thuật 3 (giải pháp Peterson):
Kết hợp hai ý tưởng trong giải thuật 1 và 2 được một giải pháp đúng với vấn đề đoạn găng, hai yêu cầu được thỏa mãn
Các tiến trình chia sẽ hai biến:
Boolean flag[2]
Int turn;
Khởi tạo flag[0] = flag[1] = false
Giá trị turn = 0 hoặc 1
Trang 196.19 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Giải thuật 3 (giải pháp Peterson)
Trang 20Giải pháp Peterson
Trang 216.21 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Giải pháp nhiều tiến trình (giải thuật Bakery):
Phát triển cho môi trường phân tán
Cấu trúc dữ liệu chung là:
Boolean choosing[n];
Int number [n];
được khởi tạo tới false và 0 tương ứng
Ta định nghĩa các ký hiệu sau:
(a,b) < (c,d) nếu a<c hay nếu a==c và b<d.max (a0,…,an-1) là số k>=ai với i=0,…,n-1
Trang 22Giải pháp nhiều tiến trình (giải thuật Bakery):
Trang 236.23 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Trang 24Đồng bộ hoá phần cứng
Trang 256.25 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Chỉ thị Swap
Thao tác trên nội dung của hai từ
Giống như chỉ thị TestAndSet, nó được thực thi theo tính nguyên tử
Void Swap(boolean &a, boolean &b)
B=temp;
}
Hình 0-9:Định nghĩa chỉ thị Swap
Trang 26Chỉ thị Swap
Trang 276.27 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Các giải thuật này không thỏa mãn yêu cầu chờ đợi
Trang 296.29 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Giải pháp “SLEEP và WAKEUP”
SLEEP là một lời gọi hệ thống có tác dụng làm
“nghẽn” hoạt động của tiến trình gọi nó và chờ đến khi được một tiến trình khác “đánh thức”
Lời gọi hệ thống WAKEUP nhận một tham số duy nhất: tiến trình sẽ được kích hoạt trở lại (đặt về trạng thái sẵn sàng)
Trang 316.31 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Semaphore
Một semaphore S là một biến số nguyên đượ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à cho signal-báo hiệu để tăng).
Định nghĩa cơ bản của wait trong đoạn mã là:
wait(S) {
while(S<=0)
;//no-op S ;
} Định nghĩa cơ bản của signal trong đoạn mã là:
Signal(S) {
S++;
}
Trang 336.33 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Cài đặt
Chúng ta định nghĩa một semaphore như một cấu trúc
được viết bằng ngôn ngữ C như sau:
Typedef struct{
Int value;
Struct process *L;
} semaphore;
Trang 34Mỗi semaphore có một giá trị nguyên và một danh sách các tiến trình L
Khi một tiến trình phải chờ trên một semaphore, nó được thêm vào danh sách các tiến trình L
Một thao tác signal xóa một tiến trình ra khỏi danh sách các tiến trình đang chờ và đánh thức tiến trình đó
Trang 356.35 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Trang 376.37 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Deadlocks và đói tài nguyên
Chúng ta xét một hệ thống chứa hai tiến trình P0 và P1, mỗi truy xuất hai semaphore, S và Q, được đặt giá trị 1
Trang 396.39 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Trang 40P chờ cho đến khi Q rời khỏi monitor hoặc chờ điều kiện khác.
Q chờ cho đến khi P rời khỏi monitor hoặc chờ điều kiện khác
Trang 416.41 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Cài đặt cơ chế monitor dùng semaphonre
Trang 42
Một tiến trình cần truy xuất tài nguyên phải chú ý tới thứ tự sau:
Ở đây R là thể hiện của kiểu ResourceAllocation
Trang 436.43 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Một tiến trình có thể truy xuất tài nguyên mà không đạt được quyền truy xuất trước đó
Một tiến trình sẽ không bao giờ giải phóng tài nguyên một khi nó được gán truy xuất tới tài nguyên đó
Một tiến trình có thể cố gắng giải phóng tài nguyên mà nó không bao giờ yêu cầu
Một tiến trình có thể yêu cầu cùng tài nguyên hai
lần(không giải phóng tài nguyên đó trong lần đầu)
Trang 44Các bài toán đồng bộ hoá nguyên thuỷ
Trang 456.45 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Trang 46Bài toán bộ đọc bộ ghi
Khái niệm
Bộ đọc- bộ ghi là một đối tượng dữ liệu được chia sẽ nhiều tiến trình đồng hành Sự khác nhau giữa các tiến trình có thể chỉ cần đọc nội dung của đối tượng được
chia sẽ và các tiến trình cần cập nhật trên đối tượng
được chia sẽ bằng cách gọi các tiến trình cập nhật là bộ ghi
Nếu một bộ ghi và vài tiến trình khác truy xuất cùng một lúc có thể dẫn đến sự hỗn độn yêu cầu các bộ ghi có truy xuất loại trừ lẫn nhau tới đối tượng chia sẽ gọi là bài toán bộ đọc bộ ghi
Trang 476.47 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Giải pháp
Giải pháp cho bài toán này có thể dẫn đến việc đói tài nguyên(các bộ ghi có thể bị đói hoặc các bộ đọc có thể bị đói)
Trang 496.49 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Trang 50Bài toán các triết gia ăn tối
Trang 516.51 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Dữ liệu được chia sẽ là:
Semaphore chopstick[5];
Tất cả các phần tử của chopstick được khởi tạo 1
Trang 536.53 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
⇒ Gây ra deadlock.
Giả sử rằng năm triết gia bị đói cùng một lúc và mỗi triết gia chiếm lấy chiếc đũa bên trái của a ta => tất cả các phần chopstic=0 khi mỗi triết gia cố gắng giành lấy chiếc đũa bên phải, triết gia sẽ bị chờ mãi mãi Giải pháp:
Cho phép nhiều nhất bốn triết gia đang ngồi cùng một lúc trên bàn.
Cho phép một triết gia lấy chiếc đũa của ông ta chỉ nếu cả hai chiếc đũa là sẵn dùng(để làm điều này ông ta phải lấy chúng trong miền tuơng trực).
Dùng một giải pháp bất đối xứng; nghĩa là một triết gia lẽ chọn đũa bên trái đầu tiên của ông ta và sau đó chiếc đũa bên phải của ông ta.
Trang 54Một số ví dụ về đồng bộ hoá.
Đồng bộ hoá hệ điều hành Solaris
Đồng bộ hoá Windows XP
Trang 556.55 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Đồng bộ hoá hệ điều hành Solaris
Thực thi một loại của khoá để hỗ trợ đa nhiệm, xử lí
đa phương (bao gồm những chuỗi thời gian thực),
và đa tiến trình
Sử dụng biến điều kiện và khoá đọc ghi khi đoạn
cốt dài hơn cần truy cập đến dữ liệu
Trang 56Đồng bộ hoá Windows XP
Sử dụng ngắt mặt nạ bảo vệ truy cập đến tài
nguyên chung trên hệ thống bộ xử lí độc nhất
Sử dụng khoá quay trên hệ thống đa nhiệm
Mặc dù những cung cấp gửi đi đối tượng mà có
thể hoạt động giống như mutexes và cờ hiệu
Những đối tượng gửi đi có thể cung cấp những
sự kiện
Một sự kiện hoạt động giống như một biến điều kiện
Trang 57Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Thành viên nhóm:
1 Hoàng Thị Lệ Hằng
2 Phan Thị Lợi
3 Trương Thị Tuyết Sương
4 Hoàng Thị Minh Thuý
5 Huỳnh Thị Minh Trí
6 Lê Thị Tuyền
Trang 58Kết thúc.
Good lucky!