Tải bản đầy đủ (.pptx) (47 trang)

Hệ Điều HànhCơ Chế Liên Lạc 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 (621.19 KB, 47 trang )

Hệ Điều Hành
Giảng Viên: L……………….


Hệ Điều Hành
Giảng Viên: ………………

 Nhóm …:






……………………….
……………………….
……………………….
……………………….
……………………….


HỆ ĐIỀU HÀNH



Chủ đề:
1. Các cơ chế liên lạc của tiến trình


Sinh viên thực hiện :




……………………….(Vùng nhớ chia sẻ, Trao đổi thông điệp, Sockets)



………………………(Vùng nhớ chia sẻ, Đường ống)



………………………(Tín hiệu, Trao đổi thông điệp)

2. Xây dựng ứng dụng quản lí máy tính


Sinh viên thực hiện:



………………………



………………………


HỆ ĐIỀU HÀNH

Tiến Trình:






Tiến trình là thể hiện (instance) của một chương trình máy tính trong bộ nhớ, đang thực thi hoặc chờ thực thi.
Một chương trình có thể có vài tiến trình trong bộ nhớ
Một tiến trình gồm:








Mã nguồn chương trình (code)
Dữ liệu (data)
Bộ đếm chương trình (program counter)
Ngăn xếp (stack)
Giá trị ở các thanh ghi (register values)

Các tiến trình muốn trao đổi dữ liệu với nhau cần sử dụng các cơ chế giao tiếp tiến trình


HỆ ĐIỀU HÀNH

Tiến Trình:




Các cơ chế giao tiếp giữa các tiến trình:

Tín hiệu
Tín hiệu

Vùng nhớ chia sẻ
Vùng nhớ chia sẻ

Các cơ chế liên lạc

Sockets
Sockets

Đường ống
Đường ống

Trao đổi thông điệp
Trao đổi thông điệp


HỆ ĐIỀU HÀNH

1.0. Signal(Tín Hiệu):



Khái niệm :








Tín hiệu là một cơ chế phần mềm tương tự như các ngắt cứng tác động đến các tiến trình.
Một tín hiệu được sử dụng để thông báo cho tiến trình về một sự kiện nào đó xảy ra.
Có nhiều tín hiệu được định nghĩa, mỗi một tín hiệu có một ý nghĩa tương ứng với một sự kiện đặc trưng

Ví dụ: Một số tín hiệu của UNIX
Tín hiệu

Mô tả

SIGINT

Người dùng nhấn phím DEL để ngắt xử lý tiến trình

SIGQUIT

Yêu cầu thoát xử lý

SIGILL

Tiến trình xử lí một chỉ thị bất hợp lệ


HỆ ĐIỀU HÀNH

1.0. Signal(Tín Hiệu):





Mỗi tiến trình sở hữu một bảng biễu diễn các tín hiệu khác nhau.
Với mỗi tín hiệu sẽ có tương ứng một trình xử lý tín hiệu (signal handler) qui định các xử lý của tiến trình khi nhận được tín hiệu tương ứng.



 Liên lạc bằng tín hiệu mang tính chất  không đồng bộ, nghĩa là một tiến trình nhận tín hiệu không thể xác định trước thời điểm nhận tính hiệu.



Các tiến trình không thể kiểm tra được sự kiện tương ứng với tín hiệu có thật sự xảy ra.



Các tiến trình chỉ có thể thông báo cho nhau về một biến cố nào đó, mà không trao đổi dữ liệu theo cơ chế này được


HỆ ĐIỀU HÀNH

2.0. Pipe( Đường ống):



Đường ống là cách để đưa đầu ra của một chương trình thành dữ liệu đầu vào của một chương trình khác mà không cần qua một file trung gian.



Đường ống thực chất là một vùng bộ nhớ tạm thời, nơi lưu trữ đầu ra của một lệnh và sau đó chuyển chúng cho đầu vào của lệnh thứ hai




Lệnh_1 | Lệnh_2




ls | sort
ls | sort | less


HỆ ĐIỀU HÀNH

2.0. Pipe( Đường ống):



Định hướng lại các thiết bị đầu vào/ra chuẩn :












Hầu hết tất cả các lệnh hiển thị kết quả đầu ra ra màn hình, và lấy dữ liệu đầu vào từ bàn phím
Có thể gửi kết quả đầu ra ra file cũng như đọc đầu vào từ file bằng cách sử dụng định hướng lại (redirect)  
Ghi kết quả của 1 lệnh ra 1 file (thay vì màn hình)
Lệnh > tên_file_đầu_ra  
ls > danh_sach_file
Định hướng đầu vào: Lệnh < tên_file_đầu_vào
cat < a.txt  
sort < a.txt > a.sorted.txt  
tr “[a-z]” “[A-Z]” < a.txt > b.txt


HỆ ĐIỀU HÀNH

2.0. Pipe( Đường ống):

Có hai loại Pipe:
 Unnamed Pipe: chỉ giới hạn trong không gian phạm vi địa chỉ của một quá trình, cho phép giao tiếp giữa quá trình cha với các quá trình con
hay giữa các quá trình con của một quá trình với nhau . Trong đó các quá trình con được thay thế bởi các luồng



Named pipe (còn gọi là FIFO): loại này cho phép hai quá trình có không gian địa chỉ khác nhau (trên cung một máy) giao tiếp với nhau. Thực
chất nó giống như một tập tin với quy định rằng dữ liệu sẽ được lấy ra ở đầu tập tin và thêm vào ở cuối tập tin.


HỆ ĐIỀU HÀNH

2.0. Pipe( Đường ống):




Đường ống Pipe giao tiếp trao đổi dữ liệu một chiều:



Hàm pipe() dùng để tạo đường ống có khả năng đọc/ghi
#include <unistd.h>
int pipe ( int filedes[2])





Phần tử thứ nhất của mảng được dùng để đọc trong khi phần tử thứ hai được dùng để ghi.
Tương đương với việc sử dụng hai đường ống một chiều
Cả hai tiến trình cha và con đều có thể đọc và ghi dữ liệu vào đường ống


HỆ ĐIỀU HÀNH

2.0. Pipe( Đường ống):







Tuy nhiên cũng rất dễ gây ra tình trạng tắc nghẽn
Hàm read() đọc dữ liệu từ Pipe

Hàm write() dùng để ghi dữ liệu vào trong đường ống

Cơ chế : nếu đường ống rỗng hàm sẽ khóa trong trạng thái chờ (block) cho đến khi dữ liệu được đổ vào đường ống hay khi đường
ống bị đóng lại bởi phía bên ghi


HỆ ĐIỀU HÀNH

3.0. Shared Memory(Vùng nhớ chia sẻ):



Vùng nhớ chia sẻ:

Giới thiệu: Cách tiếp cận của cơ chế này là cho nhiều tiến trình cùng truy xuất đến một vùng nhớ
chung gọi là vùng nhớ chia sẻ(shared memory).



process A
process A

shared memory
Dữ liệu chỉ đơn giản được đặt vào một vùng nhớ mà nhiều tiến trình có thể cùng truy cập được.
process B
process B



Các tiến trình chia sẻ một vùng nhớ vật lý thông qua trung gian không gian địa chỉ của chúng.


kernel
kernel


HỆ ĐIỀU HÀNH

3.0. Shared Memory(Vùng nhớ chia sẻ):



Vùng nhớ chia sẻ :






Một phần không gian nhớ không thuộc sở hữu của tiến trình nào
Được HĐH tạo ra
Các tiến trình có thể ánh xạ địa chỉ vào không gian chia sẻ này để truy xuất dữ liệu (như đối với không gian nội bộ)

Dữ liệu được đặt vào một vùng đệm (buffer) được dùng để chia sẻ dữ liệu giữa các tiến trình:




Kích thước không giới hạn (unbounded buffer): tiến trình đọc có thể chờ, tiến trình ghi không bao giờ chờ.
Kích thước có giới hạn (bounded buffer): cả tiến trình đọc và ghi có thể chờ.



HỆ ĐIỀU HÀNH

3.0. Shared Memory(Vùng nhớ chia sẻ):



Nhận xét :

Ưu Điểm



Không giới hạn số lượng tiến trình, chiều trao đổi, và thứ
tự truy cập



Nhanh, đơn giản để trao đổi dữ liệu giữa các tiến trình

Nhược Điểm




Khó bảo đảm sự toàn vẹn dữ liệu
Không thể áp dụng hiệu quả trong hệ phân tán


HỆ ĐIỀU HÀNH


4.0. Message Passing(Trao đổi thông điệp):



Giới thiệu: Hệ điều hành cung cấp một cơ chế liên lạc giữa các tiến trình thông qua việc gửi thông điệp.



Để hỗ trợ cơ chế liên lạc bằng thông điệp, hệ điều hành cung cấp các hàm IPC chuẩn (Interprocess communication), cơ bản là hai hàm:






Send(message) : gửi một thông điệp
Receive(message) : nhận một thông điệp

Giao tiếp giữa các tiến trình không cần dùng bộ nhớ chia sẻ

⇒ hữu ích trong môi trường phân tán, giao tiếp qua mạng.


HỆ ĐIỀU HÀNH

4.0. Message Passing(Trao đổi thông điệp):





Tiến trình P và Q muốn giao tiếp với nhau:







Truyền thông điệp:

process A
process A

Tạo một nối kết giao tiếp (communication link)
Trao đổi thông điệp thông qua send/receive
Kết thúc trao đổi liên kết giao tiếp bị hủy bỏ

process B
process B

message queue
message queue

Phương thức cài đặt nối kết giao tiếp:






Giao tiếp trực tiếp hay gián tiếp

m0

m1

m2

m3

Đồng bộ hay bất đồng bộ
Kích thước thông điệp cố định hay biến đổi

kernel
kernel



mn


HỆ ĐIỀU HÀNH

4.1. Giao tiếp trực tiếp(Direct Communication):



Các quá trình phải được đặt tên rõ ràng:







Send(P, msg): gởi thông điệp tới quá trình P.
Receive(Q, msg): nhận thông điệp từ quá trình Q.

Các thuộc tính của nối kết giao tiếp:






Các nối kết được thiết lập tự động.
Một nối kết kết hợp với chính xác một cặp quá trình.
Giữa mỗi cặp quá trình tồn tại chính xác một nối kết.
Nối kết có thể một hướng, nhưng thường là hai hướng.


HỆ ĐIỀU HÀNH

4.2. Giao tiếp gián tiếp(Indirect Communication):



Các thông điệp được gửi và nhận thông qua mailbox hay port.





Mỗi mailbox có một định danh (id) duy nhất.
Các quá trình chỉ có thể giao tiếp nếu chúng dùng chung mailbox.





Send (A, msg): gửi thông điệp tới hộp thư A.
Receive(A, msg):nhận thông điệp từ hộp thư A.

Các thuộc tính của nối kết gián tiếp:






Nối kết chỉ được thiết lập nếu các quá trình chia sẻ cùng 1 hộp thư
Một nối kết có thể kết hợp với nhiều quá trình.
Mỗi cặp tiến trình có thể dùng chung nhiều nối kết giao tiếp.
Nối kết có thể một hướng hay hai hướng.


HỆ ĐIỀU HÀNH

4.2. Giao tiếp gián tiếp(Indirect Communication):




Các tác vụ cơ bản trong giao tiếp gián tiếp:






Tạo mailbox mới
Gửi và nhận thông điệp qua mailbox
Xóa mailbox.

Chia sẻ mailbox:



Các tiến trình có thể chia sẻ cùng 1 mailbox.

⇒ Vấn đề: nếu 1 tiến trình gửi thì tiến trình nào sẽ nhận?



Giải pháp:





Một liên kết chỉ tương ứng với 2 tiến trình.
Chỉ cho phép 1 tiến trình thực hiện thao tác nhận tại 1 thời điểm.
HĐH chỉ định tiến trình nhận (1 tiến trình), và thông báo cho tiến trinh gửi biết người nhận.



HỆ ĐIỀU HÀNH

4.3. Đồng bộ hóa (Synchronisation)




Giao tiếp giữa hai quá trình xảy ra bởi lời gọi hàm cơ sở send và receive.
Truyền thông điệp có thể chặn (blocking) hay không chặn (non-blocking)

(cũng được xem như đồng bộ và bất đồng bộ.)





Blocking được xem là đồng bộ (synchronous):



Blocking send: tiến trình gửi chờ cho đến khi thông điệp được nhận.



Blocking receive : tiến trình nhận chờ cho đến khi thông điệp sẵn sàng .

Non-blocking được xem là bất đồng bộ (asynchronous):





Non-blocking send: gửi thông điệp và tiếp tục thực hiện công việc khác.
Non-blocking receive: nhận một thông điệp hay rỗng.


HỆ ĐIỀU HÀNH

4.4. Vùng đệm (buffering)



Dù giao tiếp có thể là trực tiếp hay gián tiếp, các thông điệp trao đổi giữa các tiến trình được lưu trong hàng đợi tạm thời.



Về cơ bản, một hàng đợi như thế có thể được cài đặt theo ba cách:

Sức chứa là 0

Sức chứa giới hạn

Sức chứa không giới hạn

Hàng đợi có chiều dài giới hạn n; Do đó,
Hàng đợi có chiều dài tối đa là 0; Do đó,

nhiều nhất n thông điệp có thể thường


liên kết không thể có bất kỳ thông điệp

trú trong nó. Tiến trình gửi bị chặn khi

nào chờ trong nó

vùng đệm bị đầy.

Hàng đợi có chiều dài không giới hạn; Do đó
số lượng thông điệp bất
kỳ có thể chờ trong nó. Tiến trình gửi không
bao giờ bị chặn.


HỆ ĐIỀU HÀNH

5.0. Sockets:




Socket là một giao diện lập trình ứng dụng mạng.

Socket cho phép thiết lập các kênh giao tiếp mà hai đầu kênh được đánh dấu bởi hai cổng (port). Thông qua các cổng này một quá
trình có thể nhận và gửi dữ liệu với các quá trình khác.



Lập trình socket là cách lập trình cho phép chúng ta kết nối các máy tính truyền tải


và nhận dữ liệu từ máy tính thông qua mạng.


HỆ ĐIỀU HÀNH

5.0. Sockets:



Mỗi cặp tiến trình giao tiếp dùng 1 cặp socket:
1 client socket
1 server socket

Giao Thức Sockets

UDP

TCP

(User Datagram Protocol)

(Transmission Control Protocol)

không có hướng kết nối

có hướng kết nối


HỆ ĐIỀU HÀNH


5.0. Sockets:



So sánh sự khác biệt giữa hai chế độ giao tiếp TCP - UDP

Chế độ có nối kết (TCP)




Tồn tại kênh giao tiếp ảo giữa hai bên giao tiếp.

Chế độ không nối kết (UDP)




Dữ liệu được gởi đi theo chế độ bảo đảm: có kiểm tra lỗi truyền lại gói tin

Dữ liệu chính xác, Tốc độ truyền chậm.

Dữ liệu được gởi đi theo chế độ không bảo đảm: Không kiểm tra lỗi,
không phát hiện không truyền lại gói tin bị lỗi hay mất, không bảo đảm

lỗi hay mất, bảo đảm thứ tự đến của các gói tin  . . .



Không tồn tại kênh giao tiếp ảo giữa hai bên giao tiếp


thứ tự đến của các gói tin . . .




Dữ liệu không chính xác, tốc độ truyền nhanh.
Thích hợp cho các ứng dụng cần tốc độ, không cần chính xác cao: truyền
âm thanh, hình ảnh . . .


×