Tiểu trình là gì

-->

Đ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

cùng lúc

Các tiến trình có thể hoạt động độc lập hay kết hợp với nhau để
thực hiện nhiều tác vụ
Lợi ích của xử lý đồng hành

Cho phép nhiều ứng dụng hoạt động cùng
lúc

Tăng tốc độ xử lý

Tăng hiệu suất sử dụng CPU


Đa nhiệm

Hệ điều hành đa nhiệm phân chia thời gian xử lý của
CPU thành nhiều lát thời gian (time slice) để các
tiến trình/tiểu trình thực hiện luân phiên.

Tiến trình/tiểu trình đang thực thi sẽ tạm dừng khi
time slice của nó hết và tiến trình/tiểu trình khác sẽ
chạy.

Khi hệ thống chuyển đổi từ thread này sang thread
khác, nó sẽ lưu lại ngữ cảnh của thread bị mất quyền
và phục hồi ngữ cảnh của thread sắp được chạy.
Đa nhiệm

Độ dài time slice phụ thuộc từng hệ điều hành và bộ

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

Windows 32 bits

Là đơn vị xử lý mà hệ điều hành Windows phân chia
time slice.

Mỗi tiểu trình bao gồm các stack, trạng thái các thanh
ghi CPU,và một entry trên danh sách các tiểu trình
của hệ thống điều phối

Các tiểu trình của cùng một tiến trình chia sẻ nguồn
tài nguyên chung của toàn bộ tiến trình.
Tiểu trình

Các trạng thái của tiểu trình:
Tiểu trình

Khi kết thúc time slice của mình, một tiểu trình sẽ
dừng lại và nhường tài nguyên cho các tiểu trình
khác. Quá trình này được gọi là chuyển đổi ngữ cảnh
(context switch).

Độ ưu tiên là thuộc tính giúp hệ điều hành xác định
tiểu trình nào sẽ được thực hiện tiếp theo, đồng thời
phân chia thời gian xử lý của CPU.

Khi thời điểm context switch đến, đơn vị điều phối
(dispatcher) sẽ khảo sát tập các tiểu trình ở trạng thái
sẵn sàng và chọn tiểu trình đầu tiên có độ ưu tiên
cao nhất trên hàng đợi để thực hiện.
Độ ưu tiên của tiến trì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:


Độ ưu tiên của tiến trình chứa nó

Mức độ ưu tiên của tiểu trình bên trong tiến trình
Độ ưu tiên của tiểu trình trong
tiến trình

THREAD_PRIORITY_LOWEST (-2): thấp hơn 2
điểm so với độ ưu tiên NORMAL

THREAD_PRIORITY_BELOW_NORMAL (-1): thấp
hơn 1
điểm so với độ ưu tiên NORMAL

THREAD_PRIORITY_NORMAL: độ ưu tiên ngang
với độ ưu tiên của tiến trình

THREAD_PRIORITY_ABOVE_NORMAL (+1): cao
hơn 1 điểm so với độ ưu tiên NORMAL

THREAD_PRIORITY_HIGHEST (+2): cao hơn 2
điểm so với độ ưu tiên NORMAL
Độ ưu tiên của tiểu trình trong
tiến trình

Theo mặc định một tiểu trình vừa mới được
tạo ra sẽ có độ ưu tiên
THREAD_PRIORITY_NORMAL

Ta có thể xác định độ ưu tiên của tiểu trình
bằng cách gọi hàm GetThreadPriority


Ứ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


Tải File Word Nhờ tải bản gốc