1. Trang chủ
  2. » Giáo án - Bài giảng

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

58 1,2K 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 58
Dung lượng 1,27 MB

Nội dung

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 1

Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006

TIẾN TRÌNH

Trang 3

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

Trang 4

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

Trang 5

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

Trang 6

Mã 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 9

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.

Trang 10

Đoạn găng

Trang 11

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

Trang 12

Giải pháp

Giải pháp “chờ đợi bận”

Giải pháp “SLEEP AND WAKEUP”

Trang 13

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!

Trang 14

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ó.

Trang 15

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

Trang 16

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.

Trang 17

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

Trang 18

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.

Trang 19

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)

Trang 20

Giải pháp Peterson

Trang 21

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.

Trang 22

Giải pháp nhiều tiến trình (giải thuật Bakery):

Trang 23

6.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 25

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)

A=b;

B=temp;

}

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

Trang 26

Chỉ thị Swap

Trang 27

6.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 29

6.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 31

6.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 33

6.33 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006

Trang 34

Mỗ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 35

6.35 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006

Trang 36

Void 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 37

6.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 40

P 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 41

6.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 43

6.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 44

Các bài toán đồng bộ hoá nguyên thuỷ

Trang 45

6.45 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006

Trang 46

Bà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 47

6.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 49

6.49 Silberschatz, Galvin and Gagne ©2007 Operating System Concepts with Java – 7 th Edition, Nov 15, 2006

Trang 50

Bài toán các triết gia ăn tối

Trang 51

6.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 53

6.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 54

Một số ví dụ về đồng bộ hoá.

Đồng bộ hoá hệ điều hành Solaris

Đồng bộ hoá Windows XP

Trang 55

6.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 57

Silberschatz, 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 58

Kết thúc.

Good lucky!

Ngày đăng: 13/05/2014, 00:26

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w