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 mà nó làm tràn vùng đệm.
Chúng ta nên tạo một biến count kiểu nguyên để
giữ đoạn mã của vùng đệm bị tràn
Ban đầu, count =0 Count được tăng lên khi
người sản xuất thêm một sản phẩm tới vùng đệm
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)
count++ được cài đặt trên ngôn ngữ máy :
register1 = count register1 = register1 + 1 count = register1
Tương tự cài đặt count - - như sau:
register2 = count register2 = register2 - 1
count = register2
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 8Đoạn găng
Xét một hệ thống gồm n tiến trình (P 0 ,P 1 ,
…,P n-1 ).
Mỗi tiến trình có một phân đoạn mã gọi là
đoạn găng (critical section), trong đó tiến
trình này có thể thay đổi những biến dùng
chung, cập nhật một bản, ghi đến tập tin,…
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
Đoạn găng
1 Loại trừ hỗ tương -Nếu tiến trình Pi đang thực thi trong đoạn găng của nó thì không tiến trình nào khác được thực thi
trong đoạn găng đó
2 Tiến trình - Nếu không có tiến trình nào đang thực thi trong
đoạn găng và ở đó tồn tại vài tiến trình mà muốn tham gia vào đoạn găng, sau đó chọn lựa những tiến trình sẽ đi vào đoạn găng tiếp theo không thể trì hoãn vô hạn định
3 Chờ đợi có giới hạn – Một giới hạn hiện hành số lần các quá trình khác được phép đi vào đoạn găng sau khi một quá trình thực hiện yêu cầu để đi vào đoạn găng của nó và trước khi yêu cầu đó được gán
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 P i đ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ì P i đượ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 p i 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 => P i 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 p i 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 (a 0 ,…,a n-1 ) là số k>=a i 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)
A=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 có giới hạn.
Chúng ta hiển thị giải thuật sử dụng chỉ thị TestAndSet trong hình dưới đây.
Giải thuật này thể hiện tất cả các yêu cầu vấn đề đoạn găng.
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
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 36Void signal(semaphore S){
S.value ++;
If (S.value<= 0){
Xóa một tiến trình ra khỏi hàng đợi S.L;
Wakeup(P);
}
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 P 0 và P 1, mỗi truy xuất hai semaphore, S và Q, được đặt giá trị 1
P0 P1
Wait(S); wait(Q);
Wait(Q); wait(S);
Signal(S); signal(Q);
Signal(Q); signal(S);
Trang 39
6.39 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006
Condition x,y;
Chỉ những thao tác có thể gọi lên trên các biến điều kiện là wait và signal.
Thao tác x wait(); có nghĩa là tiến trình gọi
trên thao tác này được tạm dừng cho đến khi các tiến trình khác gọi x.signal();
Thao tác x.signal() thực thi tiếp một cách chính xác một tiến trình tạm dừng.
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
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:
bàn.
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).
đũ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
tài nguyên chung trên hệ thống bộ xử lí độc nhất
mà có thể hoạt động giống như mutexes và
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!