Đa tiểu trình
Nội dung chương
Một số khái niệm cơ bản
Xây dựng một ứng dụng đa tiểu trình
Đồng bộ hóa các tiểu trình
Một số khái niệm cơ bản
Xử lý đồng hành (Concurrent Processing)
Đa nhiệm (Multi-Tasking)
Tiến trình (Process)
Tiểu trình (Thread)
Độ ưu tiên của tiến trình (Process priority
class)
Độ ưu tiên của tiểu trình (Thread priority)
Chuyển đổi ngữ cảnh (Context Switch)
Xử lý đồng hành
Xử lý đồng hành ?
Bài toán: kq = a*b + c*d
Một hệ thống xử lý đồng hành thường có nhiều tiến trình thực thi
vi xử lý. Bởi vì time slice khá nhỏ (khoảng 20ms) nên
ta có cảm giác thực hiện đồng thời.
Hệ điều hành Windows hỗ trợ pre-emptive Multi-
Tasking (đa nhiệm có độ ưu tiên).
Những vấn đề khó khăn khi xử lý đa nhiệm:
Không gian bộ nhớ để lưu trữ thông tin ngữ cảnh của tiến
trình và tiểu trình
Thời gian để theo vết, quản lý các tiểu trình
Sự tranh chấp tài nguyên dùng chung
Tiến trình
Là một chương trình đang thực thi
Có một con trỏ lệnh, vùng không gian địa chỉ
ảo riêng, mã lệnh, dữ liệu, object handles,
các biến môi trường, độ ưu tiên…
Các thuộc tính này tác động lên mọi tiểu trình
trực thuộc tiến trình
Một tiến trình có thể có nhiều tiểu trình
Tiến trình
Tiểu trình
Là đơn vị nhỏ nhất thực thi được trên hệ điều hành
IDLE_PRIORITY_CLASS: chỉ được thực hiện khi không còn tiến
trình nào sử dụng CPU
NORMAL_PRIORITY_CLASS: được quyền sử dụng CPU theo
thời gian phân chia. Đây là độ ưu tiên mặc định cho tiến trình khi
mới tạo lập
HIGH_PRIORITY_CLASS: Tiến trình được dành quyền sử dụng
CPU từ các tiến trình thuộc lớp Normal ngay khi cần
REALTIME_PRIORITY_CLASS: Có độ ưu tiên cao nhất, được
sử dụng CPU bất kỳ lúc nào
ABOVE_NORMAL_PRIORITY_CLASS (chỉ có trong Windows
2000 trở lên): cao hơn NORMAL nhưng thấp hơn HIGH priority
BELOW_NORMAL_PRIORITY_CLASS (chỉ có trong Windows
2000 trở lên): cao hơn IDLE nhưng thấp hơn NORMAL priority
Độ ưu tiên của tiểu trình
Mỗi tiểu trình có 1 độ ưu tiên được xác lập từ
0 (thấp nhất) đến 31 (cao nhất), giá trị này
gọi là Base Priority
Base Priority là giá trị độ ưu tiên của tiểu
trình tính trên toàn hệ thống
Base Priority được xác định bởi:
Ứng dụng có thể tăng hay giảm ưu tiên của
tiểu trình bằng cách gọi hàm
SetThreadPriority