Concurrent Processes and Programming

Download Report

Transcript Concurrent Processes and Programming

Chương 3: Process and Thread
GV. Ngô Thanh Huy
1
Xây dựng hệ thống phân tán
(DS)
• Mô hình hệ thống phân tán:
Hệ thống mạng phân tán
Tầng Middleware
Middleware
2
NOS
Dịch vụ, ứng dụng
Xây dựng hệ thống phân tán
(DS)
• Middleware
– Các tính chất mức cao đối với DS
– Tổ hợp các tầng để xây dựng dịch vụ phân tán
– Môi trường thực thi các ứng dụng
• OS
– Các tính chất mức thấp/ trung bình
• Quản lí các Process/Thread
• Các phần cứng máy tính (CPU, disk, memory,…)
• Bảo mật (user, group, domain,…)
• Mạng máy tính
3
Mô hình hệ phân tán
Application Services
Middleware
OS1
Processes / Threads
Communication
What are
they?
Computer & Network
Hardware
OS2
Processes / Threads
Communication
Computer & Network
Hardware
Node 1
Node 2
4
Đặc điểm Process
• Process – chương trình đang thực thi. Một process bao
gồm:
– Mã chương trình (dạng nhị phân), dữ liệu
– Ngữ cảnh process – PC, registers, file opened…
• Ngữ cảnh process – Lưu trữ trong Process Control Block (PCB)
– Stack – lưu trữ dữ liệu tạm thời (đối số, biến cục bộ…)
• Process:
–
–
–
–
–
–
–
Một vùng không gian ảo để lưu giữ process
Có thể điều khiển một số tài nguyên (tập tin, thiết bị I/O,…)
Chế độ phối hợp thực thi
Việc thực thi có thể được xen kẽ với process khác
Process có trạng thái thực thi và chế độ ưu tiên
Có thể phân ra thành một hoặc nhiều đơn vị thực thi nhỏ hơn: Thread
Mỗi Process có ít nhất một Thread gọi là tiểu trình chính
5
Các trạng thái Process
• New – tiến trình vừa được khởi tạo
• Running – Các chỉ thị đang được thực thi
• Waiting – tiến trình đang chờ một vài sự kiện khác xảy ra
(ví dụ như I/O)
• Ready – tiến trình đang chờ để được chuyển sang bộ xử lí
để tiếp tục thực thi.
• Terminated – kết thúc quá trình thực thi của tiến trình
6
Các trạng thái Process(tt)
7
Threads
• Là một phần lệnh mà có thể thực thi đồng thời với các
thread khác
• Mỗi Thread là một khối các lệnh tuần tự
• Có một trạng thái thực thi (running, ready, etc.)
– Sử dụng cơ chế Scheduling
• Ngữ cảnh của thread được lưu khi thread không ở trạng
thái thực thi (running)
– Program Counter, thanh ghi CPU… (Thread control block)
• Có thể gọi tiến trình khác được thực thi
• Có độ ưu tiên
8
Threads(tt)
• Có thể truy cập vùng nhớ chung cho các thread trong một
process
– Vùng nhớ được chia sẽ cho tất cả các thread
– Khi một thread thay đổi dữ liệu dùng chung, tất cả các thread khác (cùng
process) có thể “thấy” được
– Chia sẽ file dùng chung
 Vấn đề của người lập trình lập trình
• Thread được sử dụng đồng thời trên cả hệ thống máy đơn
và hệ thống nhiều xử lý
• Lập trình nhiều công việc có nhiều thread: Multithreading
9
Vòng đời Thread
I/O completion
new
resume()
timer expire
/ interrupted
start()
notify()
ready
dispatch
waiting
sleeping
sleep()
block on I/O
wait()
blocked
suspend()
running
stop()
completion
10
dead
Threads và Processes
MS-DOS
JVM
Traditional UNIX
NT, Solaris, Mach,
OS/2…
11
Single and Multithreaded
Processes
12
Multithreading
• Nhiều thread cùng được thực hiện đồng thời: nhiều phần
của một chương trình có thể chạy đồng thời
– Xem phim online: 1 thread để load video, 1 thread để play,…
• Hệ phân tán sử dụng mô hình client/server: multithreaded
server và multithreaded client.
13
Ứng dụng Thread
• Hệ thống hiện đại
– Nhiều ứng dụng thực thi đồng thời
– Có nghĩa là có nhiều process trên máy tính
games
web & email
office automation
multimedsa
pictures
Multitasking
14
Ứng dụng Thread
• Hệ thống hiện đại
– Các ứng dụng thực thi nhiều công việc cùng lúc
– Có nghĩa là có nhiều thread bên trong một xử lí
Background printing
GUI rendering
Application core logic
15
Ứng dụng Thread
• Hệ thống hiện đại
– Internet Browser + Youtube
Video Streaming
Favorities, Share,
Comments Posting
16
Ứng dụng Thread
• Hệ thống hiện đại
– Web Server nhiều tiến trình
Process Request Client 1
Web/FTP
server
Process Request Client 2
Process Request Client N
17
Ứng dụng Thread
• Thread được sử dụng để xử lý:
–
–
–
–
–
–
Tính toán song song và thực thi đồng thời các thao tác độc lập
Thực thi tương tác với các ứng dụng giao tiếp người dùng
Các thao tác IO
Các quá trình đồng bộ hóa
Thực thi các Timer và các Alarm
…
18
Hiệu quả của Thread so với
Process
• Tạo ra một thread nhanh hơn tạo một process
• Hủy một thread thì nhanh hơn hủy một process
• Tốn ít thời gian chuyển đổi giữa các thread trong cùng một
process
• Bởi vì các thread trong cùng một process chia sẻ bộ nhớ và
các file dùng chung nên việc trao đổi qua lại giữa các thread
không cần kích hoạt các hàm hệ thống
Nếu một ứng dụng được phân chia thực thi với nhiều đơn vị tính toán,
các đơn vị tính toán này nên được chia thành các thread.
19
Hiệu quả của Thread so với
Process(tt)
Tính kinh tế
–
–
Việc tạo ra và dịch chuyễn ngữ cảnh giữa các thread thì hiệu quả hơn so
với process
Trong HDH Solaris…. process vs. thread
• Tạo ra nhanh hơn 30 lần
• Dịch chuyễn ngữ cảnh nhanh hơn 5 lần
• Tận dụng kiến trúc song song
–
Thread có thể chạy song song trên các vi xử lý khác nhau: multithreading
20
Một ví dụ Java Thread
• Three thread
A.java
B.java
C.java
public class A extends Thread {
public class B extends Thread {
public class C extends Thread {
public void run() {
public
void
run()
for(int
i=0;
i<5;{ {
i++) {
public
void
run()
for(int
i=0; i<5; i++) {
System.out.println(“\tFrom
Thread A i=“+i);
for(int
i=0; i<5; i++) {
System.out.println(“\tFrom
Thread B i=“+i);
}
System.out.println(“\tFrom
Thread C i=“+i);
}
System.out.println(“Exit
from
Thread
A i=“+i);
}
System.out.println(“Exit
from
Thread
B i=“+i);
}
System.out.println(“Exit
from
Thread
C i=“+i);
}
}
}
}
}
public class ThreadTest {
ThreadTest.java
public void main(String[] args) {
new A().start();
new B().start();
new C().start();
}
}
21
Một ví dụ Java Thread(tt)
Run 1
Run 2
[raj@mundroo]raj: java ThreadTest
From Thread A: i= 1
From Thread A: i= 2
From Thread A: i= 3
From Thread A: i= 4
From Thread A: i= 5
From Thread C: k= 1
From Thread C: k= 2
From Thread C: k= 3
From Thread C: k= 4
From Thread C: k= 5
Exit from Thread C
From Thread B: j= 1
From Thread B: j= 2
From Thread B: j= 3
From Thread B: j= 4
From Thread B: j= 5
Exit from Thread B
Exit from Thread A
[raj@mundroo]raj: java ThreadTest
From Thread A: i= 1
From Thread A: i= 2
From Thread A: i= 3
From Thread A: i= 4
From Thread A: i= 5
Exit from Thread A
From Thread C: k= 1
From Thread C: k= 2
From Thread C: k= 3
From Thread C: k= 4
From Thread C: k= 5
Exit from Thread C
From Thread B: j= 1
From Thread B: j= 2
From Thread B: j= 3
From Thread B: j= 4
From Thread B: j= 5
Exit from Thread B
22
Các kiến trúc MultiThreading DS
• Kiến trúc Worker Pool
Server
Can I have one
thread to serve
the request?
Master
Worker Pool
<………>
Thread
<Main Thread>
<………>
Thread
Thread
<………>
Client 1
Thread
23
Các kiến trúc MultiThreading –
DS(tt)
• Thread per Connection
Resources
Active Conn 1
Active Conn 2
Main Server
Thread
<Main Thread>
Thread
Active Conn N
<Conn. 1>
Thread
Databases
<Conn. 2>
Thread
<Conn. N>
Thread
24
File
System
Các kiến trúc MultiThreading –
DS(tt)
• Thread per Object
• Thread per Request
25
Vấn đề đồng bộ Thread
• 3 biến A, B, C cùng được chia sẽ cho 2 thread T1 và T2
• T1 tính C = A+B
• T2 chuyển số lượng X từ A sang B
–
T2 phải thực hiện: A = A -X và B = B+X (để A+B không đổi)
• Nhưng nếu T1 tính A+B sau khi T2 đã tính A = A-X nhưng
trước khi T2 tính B = B+X
• Vì thế T1 sẽ không nhận được kết quả chính xác
Truy cập đồng thời để chia sẽ dữ
liệu có thể thực hiện với cơ chế
loại trừ lẫn nhau (mutually
exclusive: semaphores,…)
Các trường hợp tương tự sẽ
xảy ra trong việc phối hợp
các process
26
Mô hình Client/Server
• Một mô hình lập trình thể hiện sự tương tác giữa các tiến
trình dựa trên kiến trúc hệ thống
– Server: các tiến trình cung cấp dịh vụ
– Client: các tiến trình yêu cầu dịch vụ
• Client và Server tương tác với nhau thông qua các request
và response một cách tuần tự
– Client yêu cầu dịch vụ từ server
– Server nhận yêu cầu, thực thi yêu cầu và trả về kết quả cho client
– Client sau đó tiêu thụ dịch vụ
27
Mô hình Client/Server (tt)
• Thông điệp không được giải thích bởi hệ thống
• Có thể xây dựng các giao thức truyền thông mức cao giữa client và server
• Mô hình truyền thông hướng dịch vụ
28
Mô hình Client/Server (tt)
Client and Server Communication Model
RPC
Communication
Message Passing
Communication
Connection-oriented or connectionless
Transport service
• Tiến trình cần các giao thức truyền nhận cơ bản của hệ thống (send/receive)
•Đơn giản và thống nhất
• Làm thế nào xác định vị trí máy chủ
•Bởi tên hoặc hàm chức năng
29