You are on page 1of 40

Nguyên lý hệ điều hành

(Priciples of operating systems)

Chương 4
LIÊN LẠC GIỮA CÁC TIẾN TRÌNH

Khoa Công nghệ Thông tin


Trường Đại học Thủ Dầu Một
Nội dung
• Nhu cầu liên lạc
• Các vấn đề phát sinh khi liên lạc
• Các cơ chế liên lạc

1/2016 Ch4. Liên lạc giữa các tiến trình 2


Nhu cầu liên lạc
• Trong môi trường đa chương, một tiến
trình có thể tác động (bị tác động) đến P2
(bởi) một tiến trình khác. Chúng có thể
P3
có nhu cầu liên lạc với nhau để: P1
– Chia sẻ thông tin: nhiều tiến trình R
cùng quan tâm đến những dữ liệu
nào đó.
– Hợp tác hoàn thành tác vụ: Job P1
• 1 tác vụ chia thành nhiều công việc nhỏ
có thể tiến hành song song.
R1
• Các công việc nhỏ này cần hợp tác với P2 P3
nhau để hoàn thành tác vụ ban đầu.
R2
1/2016 Ch4. Liên lạc giữa các tiến trình 3
1/2
Vấn đề phát sinh khi liên lạc
1. Mỗi tiến trình sở hữu 1 không gian đ/c riêng
 không thể liên lạc trực tiếp dễ dàng mà
phải nhờ vào các cơ chế do hệ điều hành
cung cấp
2. Liên kết tường minh hay tiềm ẩn
– Liên kết tường minh: được thiết lập rõ ràng,
trực tiếp giữa các tiến trình
– Tiềm ẩn: liên lạc thông qua 1 qui ước ngầm nào
đó

1/2016 Ch4. Liên lạc giữa các tiến trình 4


2/2
Vấn đề phát sinh khi liên lạc
3. Liên kết theo chế độ đồng bộ hoặc không
đồng bộ
– Đồng bộ: các tiến trình chờ nhau hoàn tất việc
liên lạc.
4. Liên lạc giữa các tiến trình trong hệ thống
tập trung và hệ thống phân tán
– Liên lạc giữa các tiến trình trong cùng một máy
tính có sự khác biệt với việc liên lạc giữa các tiến
trình giữa những máy tính khác nhau?

1/2016 Ch4. Liên lạc giữa các tiến trình 5


1/3
Các cơ chế liên lạc
• Chia sẻ tài nguyên chung:
– Liên lạc bằng tín hiệu (Signal)
– Liên lạc bằng đường ống (Pipe)
– Liên lạc qua vùng nhớ chia sẻ (shared memory)
• Trao đổi thông điệp:
– Liên lạc qua message
– Liên lạc qua socket
– Gọi thủ tục từ xa (RPC)
– Gọi phương thức từ xa (RMI)

1/2016 Ch4. Liên lạc giữa các tiến trình 6


2/3
Các cơ chế liên lạc

a) Truyền thông điệp (Message) b) Chia sẻ vùng nhớ

1/2016 Ch4. Liên lạc giữa các tiến trình 7


3/3
Các cơ chế liên lạc – nhận xét
Truyền thông điệp Chia sẻ vùng nhớ

• Ưu điểm: • Ưu điểm:
– Tiện lợi khi kích thước thông – Thực hiện nhanh hơn cơ chế
điệp nhỏ truyền thông điệp (chỉ dùng lời
– Dễ thực hiện trong các hệ gọi hệ thống xây dựng vùng
thống phân tán hơn cơ chế nhớ chung)
chia sẽ vùng nhớ
• Nhược điểm • Nhược điểm:
– Thực hiện chậm hơn cơ chế – Tốn kém bộ nhớ khi phải lưu
chia sẻ vùng nhớ (cần nhiều nhiều bản sao của vùng nhớ
lời gọi hệ thống để mới có thể chia sẻ trong mỗi tiến trình
truyền thông điệp) cần liên kết.

1/2016 Ch4. Liên lạc giữa các tiến trình 8


1/5
Liên lạc bằng tín hiệu (signal)
• Một tín hiệu được sử dụng để
thông báo cho tiến trình về một sự OS
kiện nào đó xảy ra signal

• Với mỗi tín hiệu sẽ có một hàm xử


lý tín hiệu (signal handler) do phần
cứng hoặc hệ điều hành cung cấp Signal
handler
• Sử dụng cơ chế ngắt phần mềm
để tác động đến các tiến trình. Mỗi
tín hiệu sẽ có tương ứng 1 trình Signal
action
xử lý tín hiệu
process

1/2016 Ch4. Liên lạc giữa các tiến trình 9


2/5
Liên lạc bằng tín hiệu (signal)
• Định nghĩa trước khi thực hiện liên lạc
– SIGINT, SIGSTOP,…
– SIGUSER1,SIGUSER2
• Hỗ trợ liên lạc
– Kernel với user process
• Process error
• Timer
• Child process kết thúc
– User process với nhau
• Terminate process
• Suspend, resume

1/2016 Ch4. Liên lạc giữa các tiến trình 10


3/5
Liên lạc bằng tín hiệu (signal)
• Ví dụ: một số tín hiệu của hệ điều hành UNIX
Tín hiệu Mô tả
SIGINT Người dùng nhấn phím Ctl-C để ngắt xử lý tiến trình

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

SIGKILL Yêu cầu kết thúc một tiến trình

SIGFPT Lỗi chia cho 0

SIGSEGV Tiến trình truy xuất đến một địa chỉ bất hợp lệ

SIGCLD Tiến trình con kết thúc

1/2016 Ch4. Liên lạc giữa các tiến trình 11


4/5
Liên lạc bằng tín hiệu (signal)
• Tín hiệu được gởi đi bởi
– Phần cứng: Ví dụ lỗi do các phép tính số học
– Hệ điều hành: Ví dụ một tiến trình nào đó truy xuất đến
một địa chỉ bất hợp lệ.
– Tiến trình: Ví dụ tiến trình cha yêu cầu một tiến trình con
kết thúc
– Người sử dụng: Ví dụ NSD nhấn phím Ctl-C để ngắt xử
lý của tiến trình.
• Khi tiến trình nhận tín hiệu, nó có thể xử lý theo một
trong các cách sau:
– Xử lý tín hiệu bằng cách gọi hàm xử lý tín hiệu.
– Xử lý theo cách riêng của tiến trình.
– Bỏ qua tín hiệu.

1/2016 Ch4. Liên lạc giữa các tiến trình 12


5/5
Liên lạc bằng tín hiệu (signal)
• Nhận xét
– Không đồng bộ: 1 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ín hiệu
– Không thể kiểm tra được sự tương ứng với tín
hiệu có thật sự xảy ra?
– Thích hợp cho việc thông báo 1 biến cố nào đó
xảy ra.
=> Không dùng để trao đổi dữ liệu

1/2016 Ch4. Liên lạc giữa các tiến trình 13


1/2
Liên lạc bằng đường ống (Pipe)
• Là một kênh liên lạc trực tiếp giữa hai tiến trình, dữ liệu xuất
của tiến trình này được chuyển đến làm dữ liệu nhập cho
tiến trình kia dưới dạng một dòng các byte.
• Thứ tự dữ liệu truyền qua pipe được bảo toàn theo nguyên
tắc FIFO.
• Một tiến trình chỉ có thể sử dụng một pipe do nó tạo ra hay
kế thừa từ tiến trình cha
• Hệ điều hành cần cung cấp các hàm (lời gọi hệ thống)
read/write cho các tiến trình thực hiện thao tác đọc/ghi dữ
liệu trong pipe
P1 P2

pipe
1/2016 Ch4. Liên lạc giữa các tiến trình 14
2/2
Liên lạc bằng đường ống (Pipe)
• Đồng bộ hoá đường ống khi
– Tiến trình đọc pipe sẽ bị khoá nếu pipe trống
– Tiến trình ghi pipe sẽ bị khoá nếu pipe đầy
• Thảo luận
– Ưu điểm
• Cho phép truyền dữ liệu không có cấu trúc
– Nhược điểm:
• Chi phí thực hiện cao (system call)
• Cơ chế liên lạc 1 chiều
• 2 đường ống (2 chiều): có thể xảy ra tình trạng tắc nghẽn
(deadlock): 2 pipe đều đầy ( hoặc đều trống) -> bị khoá và
chờ nhau mãi mãi.
• Chỉ cho phép kết nối hai tiến trình có quan hệ cha-con, và
trên cùng một máy tính

1/2016 Ch4. Liên lạc giữa các tiến trình 15


Liên lạc bằng vùng nhớ chia sẻ 1/2
(shared memory)
• Nhiều tiến trình cùng truy xuất đến 1 vùng nhớ
chung.
• Dữ liệu mà các tiến trình muốn gởi cho nhau, chỉ
cần đặt vào vùng nhớ này.
– Tiến trình kết gắn vùng nhớ chung vào kgian đ/c
riêng của từng tiến trình. Thao tác trên vùng nhớ
chung giống như vùng nhớ của tiến trình.

Process 1 Shared Process 2


memory

Map Map

1/2016 Ch4. Liên lạc giữa các tiến trình 16


Liên lạc bằng vùng nhớ chia sẻ 2/2
(shared memory)
• Thảo luận:
– Ưu điểm:
• Không cần phải truyền dữ liệu
• Là phương pháp nhanh nhất
– Nhược điểm:
• Khó bảo đảm toàn vẹn dữ liệu -> cần có cơ chế đồng
bộ hoá thích hợp
• Không thể áp dụng trong hệ phân tán, để trao đổi
thông tin giữa các máy tính khác nhau.

1/2016 Ch4. Liên lạc giữa các tiến trình 17


1/5
Liên lạc bằng thông điệp (message)
• Thiết lập mối liên kết giữa 2 tiến trình.
• Sau đó trao đổi thông điệp qua 2 lời gọi hàm:
– Send (dest., message); Receive(sour., message);
• Có nhiều cách thức để thực hiện sự liên kết giữa
hai tiến trình
– Trực tiếp hay gián tiếp
– Đồng bộ hoặc không đồng bộ
– Kích thước thông điệp là cố định hay không
– …
• Thảo luận:
– Có thể trao đổi dữ liệu có cấu trúc

1/2016 Ch4. Liên lạc giữa các tiến trình 18


2/5
Liên lạc bằng thông điệp (message)
• Định dạng thông điệp
Message Type

Destination ID
Header Source ID
Message Length

Control Information

Body Message Contents

1/2016 Ch4. Liên lạc giữa các tiến trình 19


3/5
Liên lạc bằng thông điệp (message)
• Liên lạc trực tiếp đối xứng (symmetric)
– Send(P, message): gởi một thông điệp đến tiến trình P
– Receive(Q,message) : nhận một thông điệp từ tiến trình Q
– Tính chất: Một liên kết duy nhất, hai chiều được thiết lập
tự động giữa hai tiến trình P,Q và liên kết này chỉ dùng
cho P và Q
• Liên kết trực tiếp không đối xứng (asymmetric)
– Send(P, message) : gởi một thông điệp đến tiến trình P
– Receive(id,message): nhận một thông điệp từ tiến trình
bất kỳ có mã số id.

1/2016 Ch4. Liên lạc giữa các tiến trình 20


4/5
Liên lạc bằng thông điệp (message)
• Ví dụ: Bài toán nhà sản xuất - người tiêu thụ
(producer-consumer)
void producer ()
{ while(1)
{ tạo_sp();
send(consumer,sp); //gởi sp cho ntt
}
}
void consumer()
{ while(1)
{ receive(producer ,sp); //ntt chờ nhận sp
tiêu_thụ(sp);
}
}
1/2016 Ch4. Liên lạc giữa các tiến trình 21
5/5
Liên lạc bằng thông điệp (message)
• Thảo luận
– Là cơ chế liên lạc tổng quát
• Hỗ trợ liên lạc giữa các tiến trình trên cùng máy
• Hỗ trợ liên lạc giữa các tiến trình trong HT phân tán
– Liên lạc giữa các hệ thống không đồng nhất?
Send() //Windows Receive() //UNIX

Máy X Máy Y

P
? Q

(UNIX)
(Windows)
1/2016 Ch4. Liên lạc giữa các tiến trình 22
1/13
Liên lạc qua socket
• Socket là endpoint của một kết nối hai chiều
• Là một giao diện lập trình mạng
– Cho phép các tiến trình liên lạc 2 chiều với nhau
• Thiết lập liên lạc: Tạo 2 socket, kết nối chúng với nhau
• Mô tả:
– Sử dụng một transport protocol
– Cần đặc tả IP address và port kết nối
• Được hỗ trợ đầu tiên trong Berkeley socket
– Là sự mở rộng của nhập/xuất file trừu tượng
– Được hỗ trợ trong hầu hết các HĐH hiện đại

1/2016 Ch4. Liên lạc giữa các tiến trình 23


2/13
Liên lạc qua socket
• Các bước liên lạc bằng socket
– Tạo lập hay mở 1 socket
– Gắn kết 1 socket với 1 địa chỉ
– Liên lạc: theo chế độ kết nối hoặc không kết nối
• Kết nối: Conection-Oriented (TCP/IP)
• Không kết nối: Conectionless (UDP/IP)
– Hủy socket
• Thảo luận:
– Cơ chế socket có thể sử dụng để chuẩn hoá mối liên lạc
giữa các tiến trình vốn không liên hệ với nhau
– Có thể hoạt động trong những hệ thống khác nhau và
trong môi trường phân tán

1/2016 Ch4. Liên lạc giữa các tiến trình 24


3/13
Liên lạc qua socket
• Cho phép liên lạc giữa các tiến trình trên các
mạng không đồng nhất
Máy X

P
Socket Send()
(Windows)
Máy Y
Receive() Socket
Q

(UNIX)
1/2016 Ch4. Liên lạc giữa các tiến trình 25
4/13
Liên lạc qua socket
• Hai phương thức liên lạc:
– Conection-Oriented (TCP/IP)
• Stream
• Reliable
• Bi-directional communication
– Conectionless (UDP/IP)
• Datagram
• Unreliable
• Bi-directional communication

1/2016 Ch4. Liên lạc giữa các tiến trình 26


5/13
Liên lạc qua socket
• Phương thức Conection-Oriented
– Thực hiện trên TCP (Transmisstion Control
Protocol)
• Phải thực hiện kết nối giữa 2 tiến trình trước khi thực
hiện trao đổi dữ liệu
– Tương tự hệ thống điện thoại
• Dữ liệu được phân phối
– In sequence
– Guaranteed
• Kết nối kết thúc khi liên lạc chấm dứt
– 2 modes:
• Interactive (synchronous)
• Concurrent (asynchronous)
1/2016 Ch4. Liên lạc giữa các tiến trình 27
6/13
Liên lạc qua socket
• Phương thức Conectionless
– Thực hiện trên UDP (User Datagram Protocol)
• Không yêu cầu kết nối tồn tại trước khi thực hiện trao
đổi dữ liệu
– Tương tự hệ thống thư tín
• Dữ liệu truyền có thể
– Không đúng trật tự
– Bị mất mát
– 2 modes:
• Interactive (synchronous)
• Concurrent (asynchronous)

1/2016 Ch4. Liên lạc giữa các tiến trình 28


7/13
Liên lạc qua socket
• Port Numbers
– Port là một khái niệm trừu tượng được TCP/UDP
sử dụng để phân biệt các ứng dụng trên một máy
chủ
– Một port được xác định bằng một số nguyên 16
bit gọi là Port number
– 3 miền giá trị port number
• Well-known ports: 0 – 1023
• Registered ports: 1024 – 49151
• Dynamic ports: 49125 – 65535

1/2016 Ch4. Liên lạc giữa các tiến trình 29


8/13
Liên lạc qua socket
• Vài well-known ports
Port Protocol Description
7 Echo Echoes a received datagram to the sender
9 Discard Discards any datagram that is reveived
11 Users Active Users
20 FTP-Data File Transfer Protocol (data)
21 FTP File Transfer Protocol (control)
23 TELNET Terminal Connection
25 SMTP Simple Mail Transport Protocol
53 DNS Domain Name Server
80 HTTP HyperText Transfer Protocol
111 RPC Remote Procedure Call

1/2016 Ch4. Liên lạc giữa các tiến trình 30


9/13
Liên lạc qua socket
• Socket Types
– SOCK_STREAM
• Stream socket (TCP)
– SOCK_DGRAM
• Datagram socket (UDP)
– SOCK_RAW
• Raw socket (talk to IP directly)

1/2016 Ch4. Liên lạc giữa các tiến trình 31


10/13
Liên lạc qua socket
• Socket primitives
Primitive Ý nghĩa
Socket Tạo 1 communication endpoint
Bind Kết buộc một local address với 1 socket
Listen Thông báo sẵn sàng “lắng nghe” (tiếp nhận kết nối)
Accept Khóa caller đến khi có một yêu cầu kết nối
Connect Chủ động thực hiện kết nối
Send Gởi dữ liệu qua kết nối đã thiết lập
Receive Nhận dữ liệu qua kết nối đã thiết lập
Close Kết thúc kết nối

1/2016 Ch4. Liên lạc giữa các tiến trình 32


11/13
Liên lạc qua socket
Server
• TCP system calls
socket()

bind()
client listen()
socket()
accept()
connect() Blocks until connection from client

write() read()
Process request
read() write()

close() close()
1/2016 Ch4. Liên lạc giữa các tiến trình 33
12/13
Liên lạc qua socket
Server
• UDP system calls
socket()

bind()
Client
recvfrom()
socket()
Blocks until connection
from client
sendto()

Process request

Data (reply)
recvfrom() sendto()

close()
1/2016 Ch4. Liên lạc giữa các tiến trình 34
13/13
Liên lạc qua socket
• Socket 161.25.19.8:1625 nghĩa là port 1625 trên
host 161.25.19.8
– Việc liên lạc gồm một cặp socket.

1/2016 Ch4. Liên lạc giữa các tiến trình 35


Gọi thủ tục từ xa (Remote Procedure 1/2
Calls)
• Remote procedure call (RPC) là trù tượng hóa
lời gọi thủ tục giữa các tiến trình trên các hệ
thống kết nối
– Gọi thủ tục trên máy ở xa như là gọi thủ tục trên máy
cục bộ
• Stubs – là ủy quyền trên phía client (client-side)
cho thủ tục thực nằm trên server.
– client-side stub định vị server và chuyển các tham số
(qua message).
• Skeleton trên server nhận được message, thực
thi thủ tục trên server.

1/2016 Ch4. Liên lạc giữa các tiến trình 36


2/2
Gọi thủ tục từ xa - Thực thi RPC
Client messages server
User calls kernel to sent
RPC message to From: client
procedure X To: server
Port: matchmaker
Kernel sends message Re: addr for RPC X
to matchmaker to find Matchmaker receives
port number message, looks up answer
From: server
To: client /Port: kernel
Kernel places port P in Re: RPC X /Port: P Matchmaker replies to
user RPC message client with port P
From: client
To: server /Port: P Daemon listening to port P
Kernel sends RPC <contents> receives mesage

From: RPC /Port: P


Kernel receives reply, To: client /Port: kernel Daemon processes
passes it to user <output> request and processes
send output

1/2016 Ch4. Liên lạc giữa các tiến trình 37


Remote Method Invocation
• Remote Method Invocation (RMI) là một cơ
chế của Java tương tự như RPC.
• RMI cho phép 1 chương trình Java trên 1
máy gọi 1 method trên một đối tượng ở xa.

1/2016 Ch4. Liên lạc giữa các tiến trình 38


Truyền tham số

1/2016 Ch4. Liên lạc giữa các tiến trình 39


Bài tập
• Tạo ra 2 tiến trình. tiến trình thứ nhất đọc từ file nhiều chuỗi liên
tiếp, mỗi chuỗi gồm các phép toán +, -, *, / và hai toán hạng.
• Ví dụ trong file sẽ lưu các chuỗi dạng như sau :
 5+8
 7-9
 4*8
 27 / 3
• Sau đó tiến trình thứ nhất truyền các chuỗi dữ liệu này cho tiến
trình thứ hai. tiến trình thứ hai thực hiện tính toán và trả chuỗi kết
quả về lại cho tiến trình đầu tiên để ghi lại vào file như sau:
 5 + 8 = 13
 7 - 9 = -2
 4 * 8 = 36
 27 / 3 = 9
• Thực hiện bài toán dùng pipe để giao tiếp giứa 2 tiến trình

1/2016 Ch4. Liên lạc giữa các tiến trình 40

You might also like