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

Bài giảng Hệ Điều Hà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 (516.37 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

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×