Professional Documents
Culture Documents
start address
program program
code code
data data
stack
terminated
new admit dispatch exit
ready running
interrupt
I/O or event I/O or
completion event wait
waiting
ready
11 4 2 17
waiting
19 11
Ngữ cảnh (context) của một tiến trình là trạng thái của tiến trình
Ngữ cảnh của tiến trình được biểu diễn trong PCB của nó
Chuyển ngữ cảnh (context switch) là công việc giao CPU cho tiến
trình khác. Khi đó cần:
– lưu ngữ cảnh của tiến trình cũ vào PCB của nó
– nạp ngữ cảnh từ PCB của tiến trình mới để tiến trình mới thực thi
đồng bộ
Phan Trung
44 Kiên
2.2.1 Tổng quan
Khái niệm tiến trình truyền thống: tiến trình gồm
Không gian địa chỉ (text section, data section)
Một luồng thực thi duy nhất (single thread of
execution)
program counter
các register
stack
Các tài nguyên khác (các open file, các tiến trình
con,…)
Phan Trung
45 Kiên
Mở rộng khái niệm tiến trình
Mở rộng khái niệm tiến trình truyền thống bằng cách
hiện thực nhiều luồng thực thi trong cùng một môi
trường của tiến trình.
Tiến trình gồm
Không gian địa chỉ (text section, data section)
Một hay nhiều luồng thực thi (thread of execution), mỗi luồng
thực thi (thread) có riêng
program counter
các register
stack
Các tài nguyên khác (các open file, các tiến trình con,…)
Phan Trung
46 Kiên
Tiến trình đơn luồng và đa luồng
Phan Trung
48 Kiên
Sử dụng thread
mouse
time
CPU
ba tiến trình
single-threaded
Phan Trung
51 Kiên
Multiplexing CPU giữa các thread (tt)
time
CPU
Phan Trung
52 Kiên
Ví dụ Pthread program (Linux)
#include <stdio.h> Static Data
void* thread1(){
int i;
Heap
for (i = 0; i < 10; i++){
printf(“Thread 1\n”); sleep(1); thread1
} SP1 stack
}
void* thread2(){
thread2
int i;
for (i = 0; i < 10; i++){ SP2 stack
printf(“Thread 2\n”); sleep(1);
}
PC1
int main(){ Text PC2
pthread_t th1, th2;
pthread_create(&th1, NULL, thread1, NULL);
pthread_create(&th2, NULL, thread2, NULL);
sleep(20);
return 0; Sơ đồ bộ nhớ
}
Phan Trung
53 Kiên
Ưu điểm của thread
Tính đáp ứng (responsiveness) cao cho các ứng dụng
tương tác multithreaded
Chia sẻ tài nguyên (resource sharing): vd memory
Tiết kiệm chi phí hệ thống (economy)
Chi phí tạo/quản lý thread nhỏ hơn so với tiến trình
Chi phí chuyển ngữ cảnh giữa các thread nhỏ hơn so với tiến
trình
Tận dụng kiến trúc đa xử lý (multiprocessor)
Mỗi thread chạy trên một processor riêng, do đó tăng mức độ
song song của chương trình.
Phan Trung
54 Kiên
Thư viện luồng
Một thư viện thread (thread library, run-time
system) được hiện thực trong không gian ứng
dụng để hổ trợ các tác vụ lên thread
Thư viện thread cung cấp các hàm khởi tạo, định thời
và quản lý thread như
thread_create
thread_exit
thread_wait
thread_yield
Thư viện thread dùng Thread Control Block (TCB) để
lưu trạng thái của user thread (program counter, các
register, stack)
Phan Trung
55 Kiên
User thread
Ví dụ: hệ điều hành truyền thống chỉ cung cấp
một “kernel thread” duy nhất (biểu diễn bởi một
PCB) cho mỗi process.
Blocking problem: Khi một thread trở nên blocked thì
kernel thread cũng trở nên blocked, do đó mọi thread
khác của process cũng sẽ trở nên blocked.
user
thread
Phan Trung
56 Kiên
Kernel thread
Cơ chế multithreading được hệ điều hành trực tiếp hỗ trợ
Kernel quản lý cả process và các thread
Việc định thời CPU được kernel thực hiện trên thread
Phan Trung
57 Kiên
Kernel thread (tt)
Cơ chế multithreading được hỗ trợ bởi kernel
Khởi tạo và quản lý các thread chậm hơn
Tận dụng được lợi thế của kiến trúc multiprocessor
Thread bị blocked không kéo theo các thread khác bị blocked.
Một số hệ thống multithreading (multitasking)
Windows 9x/NT/200x
Solaris
Linux
Phan Trung
58 Kiên
Các mô hình đa luồng
Thread có thể hiện thực theo một trong các mô
hình sau
Mô hình many-to-one
Mô hình one-to-one
Mô hình many-to-many
Phan Trung
59 Kiên
Mô hình many-to-one
Nhiều user-level thread “chia
sẻ” một kernel thread để thực
thi
Việc quản lý thread được thực
hiện thông qua các hàm của một
thread library được gọi ở user
level.
Blocking problem: Khi một
thread trở nên blocked thì
kernel thread cũng trở nên
blocked, do đó mọi thread khác
của process cũng sẽ trở nên
blocked. kernel thread
Có thể được hiện thực đối với
hầu hết các hệ điều hành.
60
Phan Trung Kiên
Mô hình one-to-one
Mỗi user-level thread
thực thi thông qua một
kernel thread riêng của
nó
Mỗi khi một user thread
được tạo ra thì cũng cần
tạo một kernel thread
tương ứng
62
Phan Trung Kiên
2.2.3. Pthreads
Chuẩn POSIX (IEEE 1003.1c) cung cấp các API hỗ trợ
tạo thread và đồng bộ thread (synchronization)
Phổ biến trong các hệ thống UNIX/Linux
Là một thư viện hỗ trợ user-level thread
Tham khảo thêm ví dụ về lập trình thư viện Pthread với
ngôn ngữ C trong hệ thống Unix-like, trang 140,
“Operating System Concepts”, Silberschatz et al, 6th Ed,
2003.
Biên dịch và thực thi chương trình multithreaded C trong
Linux
$ gcc source_file.c -lpthread –o output_file
$ ./output_file
Phan Trung
63 Kiên
2.2.4. Thread trong Solaris
User-level threads
Pthread và UI-thread
Lightweight process (LWP)
Mỗi process chứa ít nhất một LWP
Thư viện thread có nhiệm vụ phân định user thread vào các
LWP
User-level thread được gắn với LWP thì mới được thực thi.
Thư viện thread chịu trách nhiệm điều chỉnh số lượng LWP
Kernel-level thread
Mỗi LWP tương ứng với một kernel-level thread
Ngoài ra, hệ thống còn có một số kernel threads dành cho một
số công việc ở kernel (các thread này không có LWP tương
ứng)
Phan Trung
64 Kiên
Đối tượng được định thời trong hệ thống là các kernel thread
2.2.4. Thread trong Solaris (tt)
many-to-many
Phan Trung
65 Kiên
2.2.4. Thread trong Solaris (tt)
Phan Trung
67 Kiên
Trạng thái của Java thread
running
Medium-term
scheduling
suspended
blocked terminated
blocked
3139332
Conflict phase: xem p. 171