Tải bản đầy đủ (.ppt) (58 trang)

Chương 6 Đồng bộ hóa tiến trình

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (408.3 KB, 58 trang )

Silberschatz, Galvin and Gagne ©2007
Operating System Concepts with Java – 7
th
Edition, Nov 15, 2006
Chương 6: ĐỒNG BỘ HOÁ
TIẾN TRÌNH
6.2
Silberschatz, Galvin and Gagne ©2007
Operating System Concepts with Java – 7
th
Edition, Nov 15, 2006
Tóm tắt nội dung

Giới thiệu

Tổng quan về đồng bộ hóa tiến
trình

Vấn đề đoạn găng

Các giải pháp

Các bài toán đồng bộ hóa
nguyên thủy
6.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.
6.4
Silberschatz, Galvin and Gagne ©2007
Operating System Concepts with Java – 7
th
Edition, Nov 15, 2006
Tổ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
và giảm khi lấy một sản phẩm ra khỏi vùng đệm.
6.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
6.6
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 tiêu thụ

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}
6.8
Silberschatz, Galvin and Gagne ©2007
Operating System Concepts with Java – 7
th
Edition, Nov 15, 2006
Đ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,…
6.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.
6.10
Silberschatz, Galvin and Gagne ©2007
Operating System Concepts with Java – 7
th
Edition, Nov 15, 2006
Đoạn găng
6.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.
6.12
Silberschatz, Galvin and Gagne ©2007
Operating System Concepts with Java – 7
th
Edition, Nov 15, 2006
Giải pháp
Giải pháp “chờ đợi bận”
Giải pháp “SLEEP AND WAKEUP”
6.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!
6.14
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 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ó.
6.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
6.16
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 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.
6.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
6.18
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 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.
6.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)
6.20
Silberschatz, Galvin and Gagne ©2007
Operating System Concepts with Java – 7
th
Edition, Nov 15, 2006
Giải pháp Peterson
6.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.

6.22
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):
6.23
Silberschatz, Galvin and Gagne ©2007
Operating System Concepts with Java – 7
th
Edition, Nov 15, 2006
Đồng bộ hoá phần cứng
Boolean TestAndSet( boolean &target){
boolean rv= target;
target =true;
return rv;
}
Hình 0- 7 Định nghĩa của chỉ thị
TestAndSet

6.24
Silberschatz, Galvin and Gagne ©2007
Operating System Concepts with Java – 7
th
Edition, Nov 15, 2006
Đồng bộ hoá phần cứng
6.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)
{ Boolean temp =a;
A=b;
B=temp;
}

Hình 0-9:Định nghĩa chỉ thị Swap

×