You are on page 1of 17

Quản lý tiến trình

I. Đa nhiệm và đa chương
Câu hỏi: Vì sao muốn xử lý đồng thời nhiều công việc trên máy tính?
→ Tăng hiệu suất sử dụng CPU

(Hình ảnh trên cho thấy ở những đoạn IO, tức lúc CPU không làm việc, ở Job 1,
Job 2 có thể sử dụng CPU để xử lý)
→ Tăng tốc độ xử lý

Quản lý tiến trình 1


Đa nhiệm (Multitasking): cho phép nhiều tác vụ / công việc được xử lý
đồng thời.

Hạn chế của đa nhiệm là yêu cầu máy tính có nhiều CPU, nhưng máy
tính thưởng chỉ có 1 CPU

Đa chương (Multiprogramming): kỹ thuật cho phép chạy nhiều chương


trình đồng thời (trên 1 CPU)

Kỹ thuật này sẽ được thực hiện bằng cách giả lập nhiều CPU ảo từ 1
CPU thật để cho phép chạy các chương trình đồng thời

1 vấn đề xảy ra khi xử lý đồng hành đó là tài nguyên của máy tính có
hạn, trong khi nhu cầu mở ứng dụng là vô hạn

Giải pháp cho việc này (cũng là ý tưởng cho việc giả lập CPU ảo) đó
là tư tưởng “chia để trị”, mỗi thời điểm chỉ giải quyết 1 yêu cầu, khi
đó toàn bộ tài nguyên sẽ được đưa cho chương trình đó, và CPU sẽ
quy định thời gian để chương trình đó có được tài nguyên.

Quá trình luân chuyển tài nguyên được diễn ra liên tục, hết chương
trình này qua chương trình khác, nhưng vì nó diễn ra quá nhanh nên
đôi khi chúng ta nghĩ là các chương trình được chạy đồng thời

Quản lý tiến trình 2


II. Tiến trình
Tiến trình là một chương trình đang trong quá trình thực hiện, mỗi tiến trình
có một CPU (ảo) riêng, chiếm hữu 1 số tài nguyên của hệ thống

Có 3 trạng thái khác nhau của 1 tiến trình:

Ready: Tiến trình đang nằm sẵn trong Ready List, chờ được nhận CPU
để chạy

Running: Đang có CPU để chạy

Blocked: Nằm trong Waiting List, chờ nhận R (tức IO: thiết bị nhập xuất)
chạy xong để vào Ready List

Quản lý tiến trình 3


1. Khối quản lý tiến trình (Process Control
Block - PCB)
Là một cấu trúc dữ liệu trong nhân hệ điều hành chứa thông tin cần
thiết để quản lý một tiến trình (theo Wikipedia)

Thông thường, PCB có các thành phần chính bao gồm:

Process ID (pID)

Trạng thái tiến trình

Ngữ cảnh tiến trình (trạng thái CPU, bộ nhớ chính, tài nguyên, bộ
xử lý (cho nhiều CPU))

Thông tin giao tiếp (tiến trình cha - tiến trình con, độ ưu tiên của
tiến trình)

Thông tin thống kê (Thời gian sử dụng CPU, thời gian chờ)

Quản lý tiến trình 4


2. Các thao tác trên một tiến trình
a. Tạo lập tiến trình
Các tình huống có thể dẫn đến tạo lập tiến trình có thể là:

Khởi động batch job (chạy một công việc trên file bat)

Users log on (kết nối vào một chương trình nào đo)

Process gọi hàm đến một tiến trình khác

Các tiến trình có thể tạo lập các tiến trình con, tạo thành một cây
tiến trình. Các tiến trình con được tạo có thể kế thừa tài nguyên
từ tiến trình cha hoặc được cấp một tài nguyên mới.

b. Kết thúc tiến trình


Các tình huống có thể dẫn đến việc kết thúc một tiến trình có thể
là:

Kết thúc batch job

Users log off

Quản lý tiến trình 5


Tiến trình xử lý xong công việc cuối cùng hay trong quá trình
chạy tiến trình xuất hiện lệnh exit()

Lỗi chương trình

Một tiến trình đang chạy có thể kết thúc một tiến trình khác nếu
nó có PID của tiến trình đó và sử dụng lệnh kill —s SIGKILL [PID]

Ngoài ra còn có một số thao tác thay đổi trạng thái tiến trình như
điều chỉnh độ ưu tiên, hiển thị cây tiến trình,….
3. Mô hình đa tiến trình
Là một tập các tiến trình hoạt động đồng thời, trong đó 2 tiến trình
bất kỳ sẽ độc lập và không có sự trao đổi tài nguyên.

4. Tiểu trình (thread) và mô hình đa tiểu trình


Có nhiều tình huống khi mà một tiến trình có nhiều dòng xử lý cùng
hoạt động trong một không gian địa chỉ, lúc này nó chia sẻ tài
nguyên cho nhau, mỗi dòng xử lý ở đây được coi là một tiểu trình

Vì thế, mô hình đa tiểu trình là mô hình mà ở đó các tiểu trình hoạt


động đồng thời, cùng chia sẻ tài nguyên và có thể trao đổi với nhau

III. Điều phối tiến trình


Như đã nói, để chạy cùng lúc nhiều tiến trình, người ta sẽ sử dụng giải pháp ảo
hoá CPU bằng cách luân chuyển CPU liên tục giữa các tiến trình. Tiếp sau đây
chúng ta sẽ làm rõ hơn về sự luân chuyển đó

Quản lý tiến trình 6


1. Các danh sách tiến trình
Trong quá trình điều phối, ta quan tâm đến 2 loại danh sách chứa các
tiến trình:

Ready List: Chứa các tiến trình trong trạng thái “sẵn sàng” nhận CPU
để chạy

Waiting List: Chứa các tiến trình đang ở trạng thái Blocked, chờ nhận
R (IO) để vào Ready List

2. Các thành phần tham gia


Trong hệ điều hành, hai bộ phân chính tham gia quá trình điều phối tiến
trình là Scheduler và Dispatcher, trong đó:

Scheduler đóng vai trò chọn 1 tiến trình được nhận CPU

Dispatcher đóng vai trò chuyển CPU cho tiến trình được chọn đó,
tức chuyển đổi ngữ cảnh tiến trình
a. Scheduler
Khi thực hiện nhiệm vụ, Scheduler sẽ xem xét các tiến trình hiện
có trong Ready List. Nếu có nhiều các tiến trình cần xem xét,
Scheduler sẽ áp dụng thuật toán tương ứng được cài đặt trong nó
để chọn 1 tiến trình (chúng ta sẽ xem xét các thuật toán này ở
phần sau)

i. Mục tiêu khi lựa chọn tiến trình


Sử dụng CPU một cách hiệu quả

Sự hiệu quả được đánh giá qua các tiêu chí về thời
gian (thời gian đáp ứng, thời gian hoàn tất, thời gian
chờ) và thông lượng (hiệu suất tài nguyên, chi phí
chuyển đổi ngữ cảnh)

Tất cả các tiến trình đều có cơ hội sử dụng CPU

ii. Tiêu chuẩn lựa chọn


Độ ưu tiên của tiến trình, thời gian hoàn thành tiến trình,…

iii. Hai nguyên tắc điều phối

Quản lý tiến trình 7


Độc quyền: Tiến trình được toàn quyền sử dụng CPU
đến khi hoàn tất

Trong kiểu phân phối độc quyền, có 2 thời điểm


lựa chọn tiến trình (thời gian kích hoạt Scheduler)

Khi tiến trình kết thúc

Khi tiến trình đang chạy thì chuyển sang trạng


thái blocked (trong trường hợp có nhiều CPU)

Không độc quyền: Một tiến trình được cấp phát CPU
trong quá trình sử dụng, nếu có một tiến trình có độ ưu
tiên cao hơn thì phải nhường CPU cho tiến trình đó.

So với kiểu phân phối độc quyền, thời điểm lựa


chọn tiến trình của kiểu phân phối không độc
quyền bổ sung thêm thời điểm khi 1 tiến trình mới
(hoặc vừa xong trạng thái blocked) bổ sung vào
ready list (vì có thể tiến trình này có độ ưu tiên cao
hơn các tiến trình khác trong ready list)

Quản lý tiến trình 8


iv. Đánh giá chiến lược phân phối
Scheduler trong hệ điều hành sẽ có 1 thuật toán phân phối
(chiến lược phân phối) để chọn 1 tiến trình trong Ready List
trong trường hợp có nhiều tiến trình muốn sử dụng CPU.

Do đó, để xem xét 1 chiến lược điều phối có hiệu quả hay
không, chúng ta cần một số thông số đánh giá. Có 3 loại
thông số phổ biến:

Thời gian hoàn tất (Turn-around time) (ký hiệu là TT)

TT = Tquit − Tarrive = Thời gian hoàn tất tiến trình


​ ​

- thời gian bắt đầu xuất hiện tiến trình

Thời gian chờ (Waiting Time) (ký hiệu là WT)

WT = thời gian tiến trình trong Ready List

Thời gian chờ trung bình (Average Waiting Time)


b. Dispatcher
Khi chuyển đổi ngữ cảnh tiến trình, Dispatcher sẽ lưu lại ngữ
cảnh của tiến trình hiện tại, sau đó mới chuyển sang ngữ cảnh
của tiến trình được chọn kế tiếp

Quản lý tiến trình 9


Lúc này, một câu hỏi đặt ra đó là: Làm sao dispatcher có thể thu
hồi CPU lại trong khi tiến trình A đang sử dụng nó ?

Giải pháp cho vấn đề này là sử dụng ngắt điều phối để kiểm
soát hệ thống

Mỗi khi xuất hiện ngắt điều phối, CPU sẽ tạm thời không
thuộc về tiến trình nào cả, đây cũng là lúc Dispatcher xem xét
có thu hồi lại CPU của tiến trình đang chiếm nó hay không
(Lưu ý rằng HĐH chỉ thu hồi CPU khi có ngắt điều phối)

Một thông tin thú vị là trung bình 1 giây sẽ có ít nhất 18.2 lần
ngắt điều phối
3. Một số chiến lược phân phối
Dưới đây là một số chiến lược phân phối phổ biến được sử dụng trong
quá trình điều phối của hệ điều hành

a. FCFS (First Come First Serve)


Chọn theo thứ tự vào Ready List

Quản lý tiến trình 10


Khi đã có CPU thì sẽ được độc quyền sử dụng CPU

Ưu điểm Nhược điểm

Tiến trình có thời gian xử lý ngắn


Đơn giản, dễ hiểu phải chờ tiến trình có thời gian xử
lý dài

Nếu một tiến trình sử dụng CPU


trong thời gian vô tận —> lỗi
nghiêm trọng với máy tính

b. Điều phối xoay vòng (Round Robin - RR)


Là một chiến lược cải tiến từ FCFS, bằng cách chỉ cho phép mỗi
tiến trình sử dụng CPU trong một khoảng thời gian q nhất định

Quản lý tiến trình 11


Đối với chiến lược RR, một trường hợp đặc biệt có thể xảy ra, đó là
khi một tiến trình vừa kết thúc khoảng thời gian q để sử dụng CPU
(tiến trình chưa xử lý xong) thì tiến trình được chọn tiếp theo vừa
tới Ready List, như trong bảng số liệu dưới đây:

Khi đó, tiến trình chưa xử lý xong (tức P1 trong ví dụ trên) sẽ được
sử dụng CPU. Việc không chuyển sang tiến trình khác (tức P2
trong ví dụ trên) mà vẫn “chung thuỷ” với tiến trình cũ sẽ giúp đỡ
tốn chi phí chuyển đổi ngữ cảnh tiến trình mà vẫn không vi phạm
nội dung của chiến lược điều phối.
Nhận xét:

Ưu điểm

Là chiến lược cải tiến từ FCFS, ta thấy được đây là chiến


lược tuân thủ nguyên tắc không độc quyền

Loại bỏ việc độc chiếm CPU

Nhược điểm

Việc chọn 1 giá trị q hợp lý là rất khó, đặc biệt trong bối
cảnh áp dụng cho việc điều phối của hệ điều hành

Nếu q quá lớn sẽ giảm tính tương tác giữa tiến trình và
CPU, nói dễ hiểu là nó không khác gì so với FCFS nếu
q lớn

Nếu q quá nhỏ sẽ tăng chi phí chuyển đổi ngữ cảnh
c. Điều phối với độ ưu tiên
Tiến trình có độ ưu tiên cao nhất được chọn cấp CPU trước

Quản lý tiến trình 12


Việc gán độ ưu tiên có thể do người dùng gán hoặc do hệ
thống gán

Độ ưu tiên có thể tĩnh hoặc động

Thông thường, độ ưu tiên tĩnh sẽ dành cho các tiến trình


của người quản trị hệ thống và không thể thay đổi, trong
khi độ ưu tiên động thích hợp với các tiến trình của người
dùng thường và có thể thay đổi

Câu hỏi đặt ra là: Số phận của các tiến trình có độ ưu tiên thấp sẽ
ra sao nếu có quá nhiều tiến trình có độ ưu tiên cao hơn nó?

Giải pháp: Những tiến trình có độ ưu tiên thấp thường sẽ có độ ưu


tiên động, tức có thể thay đổi, do đó, hệ thống sẽ tăng độ ưu tiên
cho những tiến trình chờ lâu trong hệ thống
d. Shortest Job First (SJF)
Đây là chiến lược biến thể của chiến lược điều phối với độ ưu tiên,
trong đó, độ ưu tiên được xem xét là thời gian còn lại của tiến
trình tại thời điểm quyết định điều phối

IV. Bài tập minh hoạ SJF không độc


quyền cho nhiều chu kỳ CPU
Bài tập 1
Đề bài
Bảng dữ liệu sau mô tả yêu cầu xử lý của các tiến trình trong hệ thống.
Biết CPU được điều phối sử dụng chiến lược SJF không độc quyền còn
các tài nguyên R1, R2 được điều phối theo quy luật FIFO

a. Vẽ sơ đồ điều phối hoạt động của các tiến trình

Quản lý tiến trình 13


b. Tính thời gian turn around, thời gian chờ của từng tiến trình và thời
gian chờ trung bình?
Lời giải
a. Dưới đây là sơ đồ điều phối hoạt động của các tiến trình tương ứng
với bảng số liệu trên

b. Dưới đây là bảng số liệu của thời gian turn around, thời gian chờ của
từng tiến trình và thời gian chờ trung bình

TT WT

P1 19 8

P2 17 1

P3 12 3

AVG(WT) 4

Dưới đây là giải thích chi tiết:

Khi bắt đầu tại 0, Ready List = [(P1, 5)], chọn P1 để chạy

Đến thời điểm 2, Ready List = [(P1, 3), (P2, 1)], chọn P2 nhận CPU

P2 chạy xong đến thời điểm 3, chuyển sang đọc I/O từ thời điểm 3
đến thời điểm 13 tại R1

Cùng lúc đó, tại thời điểm 3, Ready List = [(P1, 3)], chọn P1 nhận CPU

P1 chạy xong tiến trình tại thời điểm 6 và sẽ đọc I/O tại R1, nhưng vì
đến thời điểm 13 thì P2 mới đọc tại R1 xong nên P1 phải chờ

Từ thời điểm 6 đến thời điểm 10, Ready List trống

Tại thời điểm 10, P3 xuất hiện, Ready List = [(P3, 8)], chọn P3 nhận
CPU

Quản lý tiến trình 14


Đến thời điểm 13 khi P2 đọc I/O tại R1 xong, P2 chuyển sang CP U2 , ​

khi đó Ready List = [(P3, 5), (P2, 1)], chọn P2 nhận CPU, đồng thời P1
đọc I/O tại R1 từ thời điểm 13 đến thời điểm 15

Đến thời điểm 14, P2 chạy xong, chuyển sang đọc I/O lần 2 tại R1,
nhưng vì P1 đọc đến thời điểm 15 mới xong nên phải chờ, đồng thời
lúc này, Ready List = [(P3, 5)], chọn P3 nhận CPU

Đến thời điểm 15, P1 đọc I/O lần 1 tại R1 xong, P2 tiến hành đọc I/O
lần 2 tại R1 từ thời điểm 15 đến thời điểm 19, đồng thời lúc này, Ready
List = [(P3, 4), (P1, 2)], chọn P1 nhận CPU

Đến thời điểm 17, P1 chạy xong, tiến hành đọc I/O lần 2 tại R2, đồng
thời lúc này, Ready List = [(P3, 4)], chọn P3 nhận CPU

Đến thời điểm 21, P3 chạy xong, tiến hành đọc I/O lần 1 đến thời điểm
22, sau đó vì các tiến trình còn lại đã xong và thông tin lần 2 của P3
là null nên mọi thứ kết thúc
Bài tập 2
Đề bài
Bảng dữ liệu sau mô tả yêu cầu xử lý của các tiến trình trong hệ thống.
Biết CPU được điều phối sử dụng chiến lược SJF không độc quyền còn
các tài nguyên R1, R2 được điều phối theo quy luật FIFO

a. Vẽ sơ đồ điều phối hoạt động của các tiến trình

b. Tính thời gian turn around, thời gian chờ của từng tiến trình và thời
gian chờ trung bình?

Lời giải
a. Dưới đây là sơ đồ điều phối hoạt động của các tiến trình tương ứng
với bảng số liệu trên

Quản lý tiến trình 15


b. Dưới đây là bảng số liệu của thời gian turn around, thời gian chờ của
từng tiến trình và thời gian chờ trung bình

TT WT

P1 15 1

P2 17 1

P3 30 14

P4 26 3

AVG(WT) 4.75

Bài tập 3
Đề bài
Bảng dữ liệu sau mô tả yêu cầu xử lý của các tiến trình trong hệ thống.
Biết CPU được điều phối sử dụng chiến lược SJF không độc quyền còn
các tài nguyên R1, R2 được điều phối theo quy luật FIFO

a. Vẽ sơ đồ điều phối hoạt động của các tiến trình

b. Tính thời gian turn around, thời gian chờ của từng tiến trình và thời
gian chờ trung bình?

Lời giải
a. Dưới đây là sơ đồ điều phối hoạt động của các tiến trình tương ứng
với bảng số liệu trên

Quản lý tiến trình 16


b. Dưới đây là bảng số liệu của thời gian turn around, thời gian chờ của
từng tiến trình và thời gian chờ trung bình

TT WT

P1 14 0

P2 23 6

P3 25 9

P4 34 23

AVG(WT) 9.5

Quản lý tiến trình 17

You might also like