[He Dieu Hanh] Chuong 3. Quản lý tiến trình
Chương 3: QUẢN
LÝ TIẾN TRÌNH
Trạng thái của
tiến trình tại một thời điểm được xác định bởi hoạt động hiện thời của
tiến trình tại thời điểm đó. Trong quá trình sống, một tiến trình thay đổi trạng thái do nhiều nguyên nhân như: phải chờ một sự kiện nào đó xảy ra, hay đợi một thao tác nhập/xuất hoàn tất, buộc phải dừng hoạt động do đã hết thời gian xử lý...
tiến trình tại thời điểm đó. Trong quá trình sống, một tiến trình thay đổi trạng thái do nhiều nguyên nhân như: phải chờ một sự kiện nào đó xảy ra, hay đợi một thao tác nhập/xuất hoàn tất, buộc phải dừng hoạt động do đã hết thời gian xử lý...
Tại một thời điểm,
một tiến trình có thể nhận trong một các trạng thái sau đây:
- Mới tạo: Tiến
trình đang được tạo lập.
- Running: Các
chỉ thị của tiến trình đang được xử lý.
- Blocked: Tiến
trình chờ được cấp phát một tài nguyên, hay chờ một
sự kiện xảy ra.
sự kiện xảy ra.
- Ready: Tiến trình
chờ được cấp phát CPU để xử lý.
- Kết thúc: Tiến
trình hoàn tất xử lý.
Hình
2.1 Sơ đồ chuyển trạng thái giữa các
tiến trình
Tại một thời điểm,
chỉ có một tiến trình có thể nhận trạng thái running trên một bộ xử lý
bất kỳ. Trong khi đó, nhiều tiến trình có thể ở trạng thái blocked hay ready.
Các cung chuyển
tiếp trong sơ đồ trạng thái biểu diễn sáu sự chuyển trạng thái có thể xảy ra
trong các điều kiện sau:
- Tiến trình mới tạo được đưa vào hệ thống.
- Bộ điều phối cấp phát cho tiến trình một khoảng thời
gian sử dụng CPU.
- Tiến trình kết thúc.
- Tiến trình yêu cầu một tài nguyên nhưng chưa được đáp
ứng vì tài nguyên chưa sẵn sàng để cấp phát tại thời điểm đó; hoặc tiến trình
phải chờ một sự kiện hay thao tác nhập/xuất.
- Bộ điều phối chọn một tiến trình khác để cho xử lý.
- Tài nguyên mà tiến trình yêu cầu trở nên sẵn sàng để
cấp phát, hay sự kiện hoặc thao tác nhập/xuất tiến trình đang đợi hoàn tất.
Để đảm bảo hệ
thống hoạt động đúng đắn, hệ điều hành cần phải được bảo vệ khỏi sự xâm phạm
của các tiến trình. Bản thân các tiến trình và dữ liệu cũng cần được bảo vệ để
tránh các ảnh hưởng sai lạc lẫn nhau. Một cách tiếp cận để giải quyết vấn đề là
phân biệt hai chế độ xử lý cho các tiến trình: chế độ không đặc quyền và
chế độ đặc quyền nhờ vào sự trợ giúp của cơ chế phần cứng. Tập lệnh của
CPU được phân chia thành các lệnh đặc quyền và lệnh không đặc quyền. Cơ chế
phần cứng chỉ cho phép các lệnh đặc quyền được thực hiện trong chế độ đặc
quyền. Thông thường chỉ có hệ điều hành hoạt động trong chế độ đặc quyền, các
tiến trình của người dùng hoạt động trong chế độ không đặc quyền, không thực
hiện được các lệnh đặc quyền có nguy cơ ảnh hưởng đến hệ thống. Như vậy hệ điều
hành mới được bảo vệ. Khi một tiến trình người dùng gọi đến một lời gọi hệ
thống, tiến trình của hệ điều hành xử lý lời gọi này sẽ hoạt động trong chế độ
đặc quyền, sau khi hoàn tất thì trả quyền điều khiển về cho tiến trình người
dùng trong chế độ không đặc quyền.
Hình
vẽ 2.2 Hai chế độ xử lý
Hệ điều hành quản
lý các tiến trình trong hệ thống thông qua khối quản lý tiến trình (process
control block -PCB). PCB là một vùng nhớ lưu trữ các thông tin mô tả cho tiến
trình, với các thành phần chủ yếu bao gồm:
1) Định danh của tiến trình: giúp phân biệt giữa các tiến trình.
2) Trạng thái tiến trình:
xác định hoạt động hiện hành của tiến trình.
3) Ngữ cảnh của tiến trình:
mô tả các tài nguyên tiến trình đang trong quá trình, hoặc để phục vụ cho hoạt
động hiện tại, hoặc để làm cơ sở phục hồi hoạt động cho tiến trình, bao gồm các
thông tin về:
- Trạng thái CPU:
bao gồm nội dung các thanh ghi, quan trọng nhất là con trỏ lệnh IP lưu trữ địa
chỉ câu lệnh kế tiếp tiến trình sẽ xử lý. Các thông tin này cần được lưu trữ khi
xảy ra một ngắt, nhằm có thể cho phép phục hồi hoạt động của tiến trình đúng
như trước khi bị ngắt.
- Bộ xử lý: dùng
cho máy có cấu hình nhiều CPU, xác định số hiệu CPU mà tiến trình đang sử dụng.
- Bộ nhớ chính:
danh sách các khối nhớ được cấp cho tiến trình.
- Tài nguyên sử dụng: danh sách các tài nguyên hệ thống mà tiến trình đang sử dụng.
- Tài nguyên tạo lập: danh sách các tài nguyên được tiến trình tạo lập.
4) Thông tin giao tiếp: phản ánh các thông tin về quan hệ của tiến
trình với các tiến trình khác trong hệ thống:
- Tiến trình cha:
tiến trình tạo lập tiến trình này.
- Tiến trình con:
các tiến trình do tiến trình này tạo lập.
- Độ ưu tiên: giúp
bộ điều phối có thông tin để lựa chọn tiến trình được cấp CPU.
5) Thông tin thống kê: đây là những thông tin thống kê về hoạt động
của tiến trình, như thời gian đã sử dụng CPU, thời gian chờ. Các thông tin này
có thể có ích cho công việc đánh giá tình hình hệ thống và dự đoán các tình
huống tương lai.
Hình
vẽ 2.3 Khối mô tả tiến trình
Hệ điều hành cung
cấp các thao tác chủ yếu sau đây trên một tiến trình:
- Tạo lập tiến trình (create).
- Kết thúc tiến trình (destroy).
- Tạm dừng tiến trình (suspend).
- Tái kích hoạt tiến trình (resume).
- Thay đổi độ ưu tiên tiến trình.
a) Tạo lập tiến trình
Trong quá trình xử
lý, một tiến trình có thể tạo lập nhiều tiến trình mới bằng cách sử dụng một
lời gọi hệ thống tương ứng. Tiến trình gọi lời gọi hệ thống để tạo tiến trình
mới sẽ được gọi là tiến trình cha, tiến trình được tạo gọi là tiến trình
con. Mỗi tiến trình con đến lượt nó lại có thể tạo các tiến trình
mới…quá trình này tiếp tục sẽ tạo ra một cây tiến trình.
Hình
vẽ2.4 Một cây tiến trình trong hệ
thống UNIX
Các công việc hệ
điều hành cần thực hiện khi tạo lập tiến trình bao gồm:
- Định danh cho tiến trình mới phát sinh.
- Đưa tiến trình vào danh sách quản lý của hệ thống.
- Xác định độ ưu tiên cho tiến trình.
- Tạo PCB cho tiến trình.
- Cấp phát các tài nguyên
ban đầu cho tiến trình.
Khi một tiến trình tạo lập một tiến trình con, tiến trình con có thể sẽ
được hệ điều hành trực tiếp cấp phát tài nguyên hoặc được tiến trình cha cho
thừa hưởng một số tài nguyên ban đầu.
Khi một tiến trình tạo tiến trình mới, tiến trình ban đầu có thể xử lý theo
một trong hai khả năng sau:
- Tiến trình cha tiếp tục
xử lý đồng hành với tiến trình con.
- Tiến trình cha chờ đến
khi một tiến trình con nào đó, hoặc tất cả các tiến trình con kết thúc xử lý.
Các hệ điều hành khác nhau có thể chọn lựa các cài đặt khác nhau để thực
hiện thao tác tạo lập một tiến trình.
b) Kết thúc tiến trình
Một tiến trình kết thúc xử lý khi nó hoàn tất chỉ thị cuối cùng và sử dụng
một lời gọi hệ thống để yêu cầu hệ điều hành hủy bỏ nó. Đôi khi một tiến trình
có thể yêu cầu hệ điều hành kết thúc xử lý của một tiến trình khác. Khi một
tiến trình kết thúc, hệ điều hành thực hiện các công việc:
- Thu hồi các tài nguyên hệ
thống đã cấp phát cho tiến trình.
- Hủy tiến trình khỏi tất
cả các danh sách quản lý của hệ thống.
- Hủy bỏ PCB của tiến trình.
Hầu hết các hệ điều hành không cho phép các tiến trình con tiếp tục tồn tại
nếu tiến trình cha đã kết thúc. Trong những hệ thống như thế, hệ điều hành sẽ
tự động phát sinh một loạt các thao tác kết thúc tiến trình con.
Khi có nhiều người sử dụng đồng thời làm việc trong hệ thống, hệ điều hành
cần phải cấp phát các tài nguyên theo yêu cầu cho mỗi người sử dụng. Do tài
nguyên hệ thống thường rất giới hạn và có khi không thể chia sẻ, nên hiếm khi
tất cả các yêu cầu tài nguyên đồng thời đều được thỏa mãn. Vì thế cần phải
nghiên cứu một phương pháp để chia sẻ một số tài nguyên hữu hạn giữa nhiều tiến
trình người dùng đồng thời. Hệ điều hành quản lý nhiều loại tài nguyên khác
nhau (CPU, bộ nhớ chính, các thiết bị ngoại vi...), với mỗi loại cần có một cơ
chế cấp phát và các chiến lược cấp phát hiệu quả. Mỗi tài nguyên được biểu diễn
thông qua một cấu trúc dữ liệu, khác nhau về chi tiết cho từng loại tài nguyên,
nhưng cơ bản chứa đựng các thông tin sau:
-
Định danh tài nguyên.
- Trạng thái tài nguyên: đây là các thông tin mô
tả chi tiết trạng thái tài nguyên: phần nào của tài nguyên đã cấp phát cho tiến
trình, phần nào còn có thể sử dụng?
- Hàng đợi trên một tài
nguyên: danh
sách các tiến trình đang chờ được cấp phát tài nguyên tương ứng.
- Bộ cấp phát: là đoạn code đảm nhiệm
việc cấp phát một tài nguyên đặc thù. Một số tài nguyên đòi hỏi các giải thuật
đặc biệt (như CPU, bộ nhớ chính, hệ thống tập tin), trong khi những tài nguyên
khác (như các thiết bị nhập/xuất) có thể cần các giải thuật cấp phát và giải
phóng tổng quát hơn.
Hình
2.5 Khối quản lý tài nguyên
Các mục tiêu của
kỹ thuật cấp phát:
- Bảo đảm một số lượng hợp lệ các tiến trình truy xuất
đồng thời đến các tài nguyên không chia sẻ được.
- Cấp phát tài nguyên cho tiến trình có yêu cầu trong
một khoảng thời gian trì hoãn có thể chấp nhận được.
- Tối ưu hóa sự sử dụng tài nguyên.
Để có thể đạt được
các mục tiêu kể trên, cần phải giải quyết các vấn đề nảy sinh khi có nhiều tiến
trình đồng thời yêu cầu một tài nguyên không thể chia sẻ.
Trong môi trường
đa chương, có thể xảy ra tình huống nhiều tiến trình đồng thời sẵn sàng để xử
lý. Mục tiêu của các hệ phân chia thời gian (time-sharing) là chuyển đổi CPU
qua lại giữa các tiến trình một cách thường xuyên để nhiều người sử dụng có thể
tương tác cùng lúc với từng chương trình trong quá trình xử lý.
Để thực hiện được
mục tiêu này, hệ điều hành phải lựa chọn tiến trình được xử lý tiếp theo. Bộ
điều phối sẽ sử dụng một giải thuật điều phối thích hợp để thực hiện nhiệm vụ
này. Một thành phần khác của hệ điều hành cũng tiềm ẩn trong công tác điều phối
là bộ phân phối (dispatcher). Bộ phân phối sẽ chịu trách nhiệm chuyển
đổi ngữ cảnh và trao CPU cho tiến trình được chọn bởi bộ điều phối để xử lý.
a) Mục tiêu
điều phối
Bộ điều phối không
cung cấp cơ chế, mà đưa ra các quyết định. Các hệ điều hành xây dựng nhiều
chiến lược khác nhau để thực hiện việc điều phối, nhưng tựu chung cần đạt được
các mục tiêu sau:
a.1 Sự công
bằng (Fairness):
Các tiến trình
chia sẻ CPU một cách công bằng, không có tiến trình nào phải chờ đợi vô hạn để
được cấp phát CPU.
a.2 Tính hiệu qủa
(Efficiency):
Hệ thống phải tận
dụng được CPU 100% thời gian.
a.3 Thời gian
đáp ứng hợp lý (Response time):
Cực tiểu hoá thời
gian hồi đáp cho các tương tác của người sử dụng
a.4 Thời gian
lưu lại trong hệ thống (Turnaround Time):
Cực tiểu hóa thời gian
hoàn tất các tác vụ xử lý theo lô.
a.5 Thông lượng
tối đa (Throughput):
Cực đại hóa số
công việc được xử lý trong một đơn vị thời gian.
Tuy nhiên thường
không thể thỏa mãn tất cả các mục tiêu kể trên vì bản thân chúng có sự mâu
thuẫn với nhau mà chỉ có thể dung hòa chúng ở mức độ nào đó.
b) Các đặc
điểm của tiến trình
Điều phối hoạt
động của các tiến trình là một vấn đề rất phức tạp, đòi hỏi hệ điều hành khi
giải quyết phải xem xét nhiều yếu tố khác nhau để có thể đạt được những mục
tiêu đề ra. Một số đặc tính của tiến trình cần được quan tâm như tiêu chuẩn
điều phối:
b.1 Tính hướng
xuất/nhập của tiến trình (I/O-boundedness):
Khi một tiến trình
nhận được CPU, chủ yếu nó chỉ sử dụng CPU đến khi phát sinh một yêu cầu nhập
xuất? Hoạt động của các tiến trình như thế thường bao gồm nhiều lượt sử dụng
CPU, mỗi lượt trong một thời gian khá ngắn.
b.2 Tính hướng
xử lý của tiến trình (CPU-boundedness):
Khi một tiến trình
nhận được CPU, nó có khuynh hướng sử dụng CPU đến khi hết thời gian dành cho nó?
Hoạt động của các tiến trình như thế thường bao gồm một số ít lượt sử dụng CPU,
nhưng mỗi lượt trong một thời gian đủ dài.
b.3 Tiến trình
tương tác hay xử lý theo lô:
Người sử dụng theo
kiểu tương tác thường yêu cầu được hồi đáp tức thời đối với các yêu cầu của họ,
trong khi các tiến trình của tác vụ được xử lý theo lô nói chung có thể trì
hoãn trong một thời gian chấp nhận được.
b.4 Độ ưu tiên
của tiến trình:
Các tiến trình có
thể được phân cấp theo một số tiêu chuẩn đánh giá nào đó, một cách hợp lý, các
tiến trình quan trọng hơn (có độ ưu tiên cao hơn) cần được ưu tiên hơn.
b.5 Thời gian
đã sử dụng CPU của tiến trình:
Một số quan điểm
ưu tiên chọn những tiến trình đã sử dụng CPU nhiều thời gian nhất vì hy vọng
chúng sẽ cần ít thời gian nhất để hoàn tất và rời khỏi hệ thống. Tuy nhiên cũng
có quan điểm cho rằng các tiến trình nhận được CPU trong ít thời gian là những
tiến trình đã phải chờ lâu nhất, do vậy ưu tiên chọn chúng.
b.6 Thời gian
còn lại tiến trình cần để hoàn tất:
Có thể giảm thiểu
thời gian chờ đợi trung bình của các tiến trình bằng cách cho các tiến trình
cần ít thời gian nhất để hoàn tất được thực hiện trước. Tuy nhiên đáng tiếc là
rất hiếm khi biết được tiến trình cần bao nhiêu thời gian nữa để kết thúc xử
lý.
c) Điều phối
không độc quyền và điều phối độc quyền (preemptive/no preemptive)
Thuật toán điều
phối cần xem xét và quyết định thời điểm chuyển đổi CPU giữa các tiến trình. Hệ
điều hành có thể thực hiện cơ chế điều phối theo nguyên lý độc quyền hoặc
không độc quyền.
c.1 Điều phối
độc quyền: Nguyên lý điều phối độc
quyền cho phép một tiến trình khi nhận được CPU sẽ có quyền độc chiếm CPU
đến khi hoàn tất xử lý hoặc tự nguyện giải phóng CPU. Khi đó quyết định điều
phối CPU sẽ xảy ra trong các tình huống sau:
- Khi tiến trình chuyển từ trạng thái đang xử
lý(running) sang trạng thái bị khóa blocked (ví dụ chờ một thao tác nhập xuất
hay chờ một tiến trình con kết thúc…).
- Khi tiến trình kết thúc.
Các giải thuật độc
quyền thường đơn giản và dễ cài đặt. Tuy nhiên chúng thường không thích hợp với
các hệ thống tổng quát nhiều người dùng, vì nếu cho phép một tiến trình có
quyền xử lý bao lâu tùy ý, có nghĩa là tiến trình này có thể giữ CPU một thời
gian không xác định, có thể ngăn cản những tiến trình còn lại trong hệ thống có
một cơ hội để xử lý.
c.2 Điều phối
không độc quyền: Ngược với nguyên lý
độc quyền, điều phối theo nguyên lý không độc quyền cho phép tạm dừng
hoạt động của một tiến trình đang sẵn sàng xử lý. Khi một tiến trình nhận được
CPU, nó vẫn được sử dụng CPU đến khi hoàn tất hoặc tự nguyện giải phóng CPU,
nhưng một tiến trình khác có độ ưu tiên có thể dành quyền sử dụng CPU của tiến
trình ban đầu. Như vậy là tiến trình có thể bị tạm dừng hoạt động bất cứ lúc
nào mà không được báo trước, để tiến trình khác xử lý. Các quyết định điều phối
xảy ra khi:
- Khi tiến trình chuyển từ trạng thái đang xử lý
(running) sang trạng thái bị khóa blocked (ví dụ chờ một thao tác nhập xuất hay
chờ một tiến trình con kết thúc…).
- Khi tiến trình chuyển từ trạng thái đang xử lý
(running) sang trạng thái ready (ví dụ xảy ra một ngắt).
- Khi tiến trình chuyển từ trạng thái chờ (blocked) sang
trạng thái ready (ví dụ một thao tác nhập/xuất hoàn tất).
- Khi tiến trình kết thúc.
Các thuật toán
điều phối theo nguyên tắc không độc quyền ngăn cản được tình trạng một tiến
trình độc chiếm CPU, nhưng việc tạm dừng một tiến trình có thể dẫn đến các mâu
thuẫn trong truy xuất, đòi hỏi phải sử dụng một phương pháp đồng bộ hóa thích
hợp để giải quyết.
Trong các hệ thống
sử dụng nguyên lý điều phối độc quyền có thể xảy ra tình trạng các tác vụ cần
thời gian xử lý ngắn phải chờ tác vụ xử lý với thời gian rất dài hoàn tất!
Nguyên lý điều phối độc quyền thường chỉ thích hợp với các hệ xử lý theo lô.
Đối với các hệ
thống tương tác (time sharing), các hệ thời gian thực (real time), cần phải sử
dụng nguyên lý điều phối không độc quyền để các tiến trình quan trọng có cơ hội
hồi đáp kịp thời. Tuy nhiên thực hiện điều phối theo nguyên lý không độc quyền
đòi hỏi những cơ chế phức tạp trong việc phân định độ ưu tiên, và phát sinh
thêm chi phí khi chuyển đổi CPU qua lại giữa các tiến trình.
a) Các danh
sách sử dụng trong quá trình điều phối.
Hệ điều hành sử
dụng hai loại danh sách để thực hiện điều phối các tiến trình là danh sách
sẵn sàng (ready list) và danh sách chờ đợi (waiting list).
Khi một tiến trình
bắt đầu đi vào hệ thống, nó được chèn vào danh sách các tác vụ (job list). Danh
sách này bao gồm tất cả các tiến trình của hệ thống. Nhưng chỉ các tiến trình
đang thường trú trong bộ nhớ chính và ở trạng thái sẵn sàng tiếp nhận CPU để
hoạt động mới được đưa vào danh sách sẵn sàng.
Bộ điều phối sẽ
chọn một tiến trình trong danh sách sẵn sàng và cấp CPU cho tiến trình đó. Tiến
trình được cấp CPU sẽ thực hiện xử lý, và có thể chuyển sang trạng thái chờ khi
xảy ra các sự kiện như đợi một thao tác nhập/xuất hoàn tất, yêu cầu tài nguyên
chưa được thỏa mãn, được yêu cầu tạm dừng... Khi đó tiến trình sẽ được chuyển
sang một danh sách chờ đợi.
Hệ điều hành chỉ
sử dụng một danh sách sẵn sàng cho toàn hệ thống, nhưng mỗi một tài nguyên (thiết
bị ngoại vi) có một danh sách chờ đợi riêng bao gồm các tiến trình đang chờ
được cấp phát tài nguyên đó.
Hình
2.6 Các danh sách điều phối
Quá trình xử lý
của một tiến trình trải qua những chu kỳ chuyển đổi qua lại giữa danh sách sẵn
sàng và danh sách chờ đợi. Sơ đồ dưới đây mô tả sự điều phối các tiến trình dựa
trên các danh sách của hệ thống.
Thoạt đầu tiến
trình mới được đặt trong danh sách các tiến trình sẵn sàng (ready list), nó sẽ
đợi trong danh sách này cho đến khi được chọn để cấp phát CPU và bắt đầu xử lý.
Sau đó có thể xảy ra một trong các tình huống sau:
- Tiến trình phát sinh một yêu cầu một tài nguyên mà hệ
thống chưa thể đáp ứng, khi đó tiến trình sẽ được chuyển sang danh sách các
tiến trình đang chờ tài nguyên tương ứng.
- Tiến trình có thể bị bắt buộc tạm dừng xử lý do một
ngắt xảy ra, khi đó tiến trình được đưa trở lại vào danh sách sẵn sàng để chờ
được cấp CPU cho lượt tiếp theo.
Hình
2.7 Sơ đồ chuyển đổi giữa các danh
sách điều phối
Trong trường hợp
đầu tiên, tiến trình cuối cùng sẽ chuyển từ trạng thái blocked sang trạng thái
ready và lại được đưa trở vào danh sách sẵn sàng. Tiến trình lặp lại chu kỳ này
cho đến khi hoàn tất tác vụ thì được hệ thống hủy bỏ khỏi mọi danh sách điều
phối.
b) Các cấp
độ điều phối
Thực ra công việc
điều phối được hệ điều hành thực hiện ở hai mức độ: điều phối tác vụ (job
scheduling) và điều phối tiến trình (process scheduling).
b.1 Điều phối
tác vụ
Quyết định lựa
chọn tác vụ nào được đưa vào hệ thống, và nạp những tiến trình của tác vụ đó
vào bộ nhớ chính để thực hiện. Chức năng điều phối tác vụ quyết định mức độ đa
chương của hệ thống (số lượng tiến trình trong bộ nhớ chính). Khi hệ thống tạo
lập một tiến trình, hay có một tiến trình kết thúc xử lý thì chức năng điều
phối tác vụ mới được kích hoạt. Vì mức độ đa chương tương đối ổn định nên chức
năng điều phối tác vụ có tần suất hoạt động thấp.
Để hệ thống hoạt
động tốt, bộ điều phối tác vụ cần phân biệt tính chất của tiến trình là
hướng nhập xuất (I/O bounded) hay hướng xử lý (CPU bounded). Một
tiến trình được gọi là hướng nhập xuất nếu nó chủ yếu nó chỉ sử dụng CPU
để thực hiện các thao tác nhập xuất. Ngược lại một tiến trình được gọi là
hướng xử lý nếu nó chủ yếu nó chỉ sử dụng CPU để thực hiện các thao tác
tính toán. Để cân bằng hoạt động của CPU và các thiết bị ngoại vi, bộ điều phối
tác vụ nên lựa chọn các tiến trình để nạp vào bộ nhớ sao cho hệ thống là sự pha
trộn hợp lý giữa các tiến trình hướng nhập xuất và các tiến trình hướng
xử lý
b.2 Điều phối
tiến trình
Chọn một tiến
trình ở trạng thái sẵn sàng (đã được nạp vào bộ nhớ chính, và có đủ tài nguyên
để hoạt động) và cấp phát CPU cho tiến trình đó thực hiện. Bộ điều phối tiến
trình có tần suất hoạt động cao, sau mỗi lần xảy ra ngắt (do đồng hồ báo giờ,
do các thiết bị ngoại vi...), thường là 1 lần trong khoảng 100ms. Do vậy để
nâng cao hiệu suất của hệ thống, cần phải tăng tốc độ xử lý của bộ điều phối
tiến trình. Chức năng điều phối tiến trình là một trong chức năng cơ bản, quan
trọng nhất của hệ điều hành.
Trong nhiều hệ
điều hành, có thể không có bộ điều phối tác vụ hoặc tách biệt rất ít đối với bộ
điều phối tiến trình. Một vài hệ điều hành lại đưa ra một cấp độ điều phối
trung gian kết hợp cả hai cấp độ điều phối tác vụ và tiến trình
Hình
2.8 Cấp độ điều phối trung gian.
a) Chiến
lược FIFO
a.1 Nguyên tắc: CPU được cấp phát cho tiến trình đầu tiên trong danh
sách sẵn sàng có yêu cầu, là tiến trình được đưa vào hệ thống sớm nhất. Đây là
thuật toán điều phối theo nguyên tắc độc quyền. Một khi CPU được cấp phát cho
tiến trình, CPU chỉ được tiến trình tự nguyện giải phóng khi kết thúc xử lý hay
khi có một yêu cầu nhập/xuất.
Hình
2.9 Điều phối FIFO
a.2 Ví dụ:
Tiến trình
|
Thời điểm vào RL
|
Thời gian xử lý
|
P1
|
0
|
24
|
P2
|
1
|
3
|
P3
|
2
|
3
|
Thứ tự cấp phát
CPU cho các tiến trình là:
P1
|
P2
|
P3
|
0
|
‘24
|
27 30
|
thời gian chờ đợi
được xử lý là 0 đối với P1, (24 -1) với P2 và (24+3-2) với P3. Thời gian chờ
trung bình là (0+23+25)/3 = 16 milisecondes.
a.3 Thảo luận: Thời gian chờ trung bình không đạt cực tiểu, và biến
đổi đáng kể đối với các giá trị về thời gian yêu cầu xử lý và thứ tự khác nhau
của các tiến trình trong danh sách sẵn sàng. Có thể xảy ra hiện tượng tích lũy
thời gian chờ, khi các tất cả các tiến trình (có thể có yêu cầu thời gian ngắn)
phải chờ đợi một tiến trình có yêu cầu thời gian dài kết thúc xử lý.
Giải thuật này đặc
biệt không phù hợp với các hệ phân chia thời gian, trong các hệ này, cần cho
phép mỗi tiến trình được cấp phát CPU đều đặn trong từng khoảng thời gian.
b) Chiến
lược phân phối xoay vòng (Round Robin)
b.1 Nguyên tắc: Danh sách sẵn sàng được xử lý như một danh sách
vòng, bộ điều phối lần lượt cấp phát cho từng tiến trình trong danh sách một
khoảng thời gian sử dụng CPU gọi là quantum. Đây là một giải thuật điều
phối không độc quyền: khi một tiến trình sử dụng CPU đến hết thời gian quantum
dành cho nó, hệ điều hành thu hồi CPU và cấp cho tiến trình kế tiếp trong danh
sách. Nếu tiến trình bị khóa hay kết thúc trước khi sử dụng hết thời gian
quantum, hệ điều hành cũng lập tức cấp phát CPU cho tiến trình khác. Khi tiến
trình tiêu thụ hết thời gian CPU dành cho nó mà chưa hoàn tất, tiến trình được
đưa trở lại vào cuối danh sách sẵn sàng để đợi được cấp CPU trong lượt kế tiếp.
b.2 Ví dụ:
Hình
2.10 Điều phối Round Robin
Tiến trình
|
Thời điểm vào RL
|
Thời gian xử lý
|
P1
|
0
|
24
|
P2
|
1
|
3
|
P3
|
2
|
3
|
Nếu sử dụng quantum là 4 milisecondes, thứ tự cấp phát CPU sẽ là:
P1
|
P2
|
P3
|
P1
|
P1
|
P1
|
P1
|
P1
|
0
|
‘4
|
7
|
10
|
14
|
18
|
22
|
26 30
|
Thời gian chờ đợi
trung bình sẽ là (0+6+3+5)/3 = 4.66 milisecondes.
Nếu có n
tiến trình trong danh sách sẵn sàng và sử dụng quantum q, thì mỗi tiến
trình sẽ được cấp phát CPU 1/n trong từng khoảng thời gian q. Mỗi
tiến trình sẽ không phải đợi quá (n-1)q đơn vị thời gian trước khi nhận
được CPU cho lượt kế tiếp.
b.3 Thảo luận: Vấn đề đáng quan tâm đối với giải thuật RR là độ dài
của quantum. Nếu thời lượng quantum quá bé sẽ phát sinh quá nhiều sự chuyển đổi
giữa các tiến trình và khiến cho việc sử dụng CPU kém hiệu quả. Nhưng nếu sử
dụng quantum quá lớn sẽ làm tăng thời gian hồi đáp và giảm khả năng tương tác
của hệ thống.
c) Điều phối
với độ ưu tiên
c.1 Nguyên tắc: Mỗi tiến trình được gán cho một độ ưu tiên tương
ứng, tiến trình có độ ưu tiên cao nhất sẽ được chọn để cấp phát CPU đầu tiên.
Độ ưu tiên có thể được định nghĩa nội tại hay nhờ vào các yếu tố bên ngoài. Độ
ưu tiên nội tại sử dụng các đại lượng có thể đo lường để tính toán độ ưu tiên
của tiến trình, ví dụ các giới hạn thời gian, nhu cầu bộ nhớ…Độ ưu tiên cũng có
thể được gán từ bên ngoài dựa vào các tiêu chuẩn do hệ điều hành như tầm quan
trọng của tiến trình, loại người sử dụng sở hữu tiến trình…
Giải thuật điều
phối với độ ưu tiên có thể theo nguyên tắc độc quyền hay không độc quyền. Khi
một tiến trình được đưa vào danh sách các tiến trình sẵn sàng, độ ưu tiên của
nó được so sánh với độ ưu tiên của tiến trình hiện hành đang xử lý. Giải thuật
điều phối với độ ưu tiên và không độc quyền sẽ thu hồi CPU từ tiến trình hiện
hành để cấp phát cho tiến trình mới nếu độ ưu tiên của tiến trình này cao hơn
tiến trình hiện hành. Một giải thuật độc quyền sẽ chỉ đơn giản chèn tiến trình
mới vào danh sách sẵn sàng, và tiến trình hiện hành vẫn tiếp tục xử lý hết thời
gian dành cho nó.
c.2 Ví dụ: (độ ưu tiên 1 > độ ưu tiên 2 > độ ưu tiên 3)
Tiến trình
|
Thời điểm vào RL
|
Độ ưu tiên
|
Thời gian xử lý
|
P1
|
0
|
3
|
24
|
P2
|
1
|
1
|
3
|
P3
|
2
|
2
|
3
|
Sử dụng thuật giải
độc quyền, thứ tự cấp phát CPU như sau:
P1
|
P2
|
P3
|
0
|
‘24
|
27 30
|
Sử dụng thuật giải
không độc quyền, thứ tự cấp phát CPU như sau:
P1
|
P2
|
P3
|
P1
|
0
|
‘1
|
4
|
7 30
|
c.3 Thảo luận: Tình trạng ‘đói CPU’ (starvation) là một vấn đề
chính yếu của các giải thuật sử dụng độ ưu tiên. Các giải thuật này có thể để
các tiến trình có độ ưu tiên thấp chờ đợi CPU vô hạn ! Để ngăn cản các
tiến trình có độ ưu tiên cao chiếm dụng CPU vô thời hạn, bộ điều phối sẽ giảm
dần độ ưu tiên của các tiến trình này sau mỗi ngắt đồng hồ. Nếu độ ưu tiên của
tiến trình này giảm xuống thấp hơn tiến trình có độ ưu tiên cao thứ nhì, sẽ xảy
ra sự chuyển đổi quyền sử dụng CPU. Quá trình này gọi là sự ‘lão hóa’
(aging) tiến trình.
d) Chiến
lược công việc ngắn nhất (Shortest-job-first SJF)
d.1 Nguyên tắc: Đây là một trường hợp đặc biệt của giải thuật điều
phối với độ ưu tiên. Trong giải thuật này, độ ưu tiên p được gán cho mỗi
tiến trình là nghịch đảo của thời gian xử lý t mà tiến trình yêu cầu: p
= 1/t. Khi CPU được tự do, nó sẽ được cấp phát cho tiến trình yêu cầu ít
thời gian nhất để kết thúc - tiến trình ngắn nhất. Giải thuật này cũng có thể
độc quyền hay không độc quyền. Sự chọn lựa xảy ra khi có một tiến trình mới
được đưa vào danh sách sẵn sàng trong khi một tiến trình khác đang xử lý. Tiến
trình mới có thể sở hữu một yêu cầu thời gian sử dụng CPU cho lần tiếp theo
(CPU-burst) ngắn hơn thời gian còn lại mà tiến trình hiện hành cần xử lý. Giải
thuật SJF không độc quyền sẽ dừng hoạt động của tiến trình hiện hành, trong khi
giải thuật độc quyền sẽ cho phép tiến trình hiện hành tiếp tục xử lý.
d.2 Ví dụ:
Tiến trình
|
Thời điểm vào RL
|
Thời gian xử lý
|
P1
|
0
|
6
|
P2
|
1
|
8
|
P3
|
2
|
4
|
P4
|
3
|
2
|
Sử dụng thuật giải
SJF độc quyền, thứ tự cấp phát CPU như sau:
P1
|
P4
|
P3
|
P2
|
0
|
6
|
8
|
12 20
|
Sử dụng thuật giải
SJF không độc quyền, thứ tự cấp phát CPU như sau:
P1
|
P4
|
P1
|
P3
|
P2
|
0
|
3
|
5
|
8
|
12 20
|
d.3 Thảo luận: Giải thuật này cho phép đạt được thời gian chờ trung
bình cực tiểu. Khó khăn thực sự của giải thuật SJF là không thể biết được thời
gian yêu cầu xử lý còn lại của tiến trình? Chỉ có thể dự đoán giá trị này theo
cách tiếp cận sau: gọi tn là độ dài của thời gian xử lý lần thứ n,
τ n+1 là giá trị dự đoán cho lần xử lý tiếp theo. Với hy vọng
giá trị dự đoán sẽ gần giống với các giá trị trước đó, có thể sử dụng công thức:
Trong công thức
này, tn chứa đựng thông tin gần nhất, τ n chứa đựng các thông tin
quá khứ được tích lũy. Tham số α (0 ≤ α ≤ 1) kiểm soát trọng số của hiện tại
gần hay quá khứ ảnh hưởng đến công thức dự đoán.
e) Chiến
lược điều phối với nhiều mức độ ưu tiên
e.1 Nguyên tắc: Ý tưởng chính của giải thuật là phân lớp các tiến
trình tùy theo độ ưu tiên của chúng để có cách thức điều phối thích hợp cho
từng nhóm. Danh sách sẵn sàng được phân tách thành các danh sách riêng biệt
theo cấp độ ưu tiên, mỗi danh sách bao gồm các tiến trình có cùng độ ưu tiên và
được áp dụng một giải thuật điều phối thích hợp để điều phối. Ngoài ra, còn có
một giải thuật điều phối giữa các nhóm, thường giải thuật này là giải thuật
không độc quyền và sử dụng độ ưu tiên cố định. Một tiến trình thuộc về danh
sách ở cấp ưu tiên i sẽ chỉ được cấp phát CPU khi các danh sách ở cấp ưu
tiên lớn hơn i đã trống.
Hình
2.11 Điều phối nhiều cấp ưu tiên
e.2 Thảo luận: Thông thường, một tiến trình sẽ được gán vĩnh viễn
với một danh sách ở cấp ưu tiên i khi nó được đưa vào hệ thống. Các tiến
trình không di chuyển giữa các danh sách. Cách tổ chức này sẽ làm giảm chi phí
điều phối, nhưng lại thiếu linh động và có thể dẫn đến tình trạng ‘đói CPU’ cho
các tiến trình thuộc về những danh sách có độ ưu tiên thấp. Do vậy có thể xây
dựng giải thuật điều phối nhiều cấp ưu tiên và xoay vòng. Giải thuật này sẽ
chuyển dần một tiến trình từ danh sách có độ ưu tiên cao xuống danh sách có độ
ưu tiên thấp hơn sau mỗi lần sử dụng CPU. Cũng vậy, một tiến trình chờ quá lâu
trong các danh sách có độ ưu tiên thấp cũng có thể được chuyển dần lên các danh
sách có độ ưu tiên cao hơn. Khi xây dựng một giải thuật điều phối nhiều cấp ưu
tiên và xoay vòng cần quyết định các tham số:
- Số lượng các cấp ưu tiên
- Giải thuật điều phối cho từng danh sách ứng với một
cấp ưu tiên.
- Phương pháp xác định thời điểm di chuyển một tiến
trình lên danh sách có độ ưu tiên cao hơn.
- Phương pháp xác định thời điểm di chuyển một tiến
trình lên danh sách có độ ưu tiên thấp hơn.
- Phương pháp sử dụng để xác định một tiến trình mới
được đưa vào hệ thống sẽ thuộc danh sách ứng với độ tiên nào.
Hình
2.12 Điều phối Multilevel Feedback
f) Chiến
lược điều phối Xổ số (Lottery)
f.1 Nguyên tắc: Ý tưởng chính của giải thuật là phát hành một số vé
số và phân phối cho các tiến trình trong hệ thống. Khi đến thời điểm ra quyết
định điều phối, sẽ tiến hành chọn 1 vé “trúng giải”, tiến trình nào sỡ hữu vé
này sẽ được nhận CPU.
f.2 Thảo luận: Giải thuật Lottery cung cấp một giải pháp đơn giản
nhưng bảo đảm tính công bằng cho thuật toán điều phối với chi phí thấp để cập
nhật độ ưu tiên cho các tiến trình:
3.3 Tóm
tẮt
- Trong suốt chu trình sống, tiến trình chuyển đổi qua
lại giữa các trạng thái ready, running và blocked.
- Bộ điều phối của hệ điều hành chịu trách nhiệm áp dụng
một giải thuật điều phối thích hợp để chọn tiến trình thích hợp được sử dụng
CPU, và bộ điều phối sẽ chuyển giao CPU cho tiến trình này.
- Các giải thuật điều phối thông dụng: FIFO, RoundRobin,
điều phối với độ ưu tiên, SJF, Multilevel Feedback.
3.4 Câu hỏi
cũng cố bài học
Các
câu hỏi cần trả lời được sau bài học này:
1. Thông tin lưu trữ trong PCB và TCB?
2. Tổ chức điều phối tiến trình?
3. Phân tích ưu, khuyết của các chiến lược điều phối.
3.5 Bài tập
Bài 1. Xét tập các tiến trình sau (với thời gian yêu cầu CPU
và độ ưu tiên kèm theo):
Tiến trình
|
Thời điểm vào RL
|
Thời gian CPU
|
Độ ưu tiên
|
P1
|
0
|
10
|
3
|
P2
|
1
|
1
|
1
|
P3
|
2
|
2
|
3
|
P4
|
3
|
1
|
4
|
P5
|
4
|
5
|
2
|
Giả sử các tiến
trình cùng được đưa vào hệ thống tại thời điểm 0
a) Cho biết kết quả điều phối hoạt động của các tiến
trình trên theo thuật toán FIFO, SJF, điều phối theo độ ưu tiên độc quyền (độ
ưu tiên 1 > 2 >... ), và RR (quantum=2).
b) Cho biết thời gian lưu lại trong hệ thống
(turnaround time) của từng tiến trình trong từng thuật toán điều phối ở câu a.
c) Cho biết thời gian chờ trong hệ thống (waiting
time) của từng tiến trình trong từng thuật toán điều phối ở câu a.
d) Thuật toán điều phối nào trong các thuật toán ở câu
a cho thời gian chờ trung bình là cực tiểu?
Bài 2. Giả sử có các tiến trình sau trong hệ thống:
Tiến trình
|
Thời điểm vào RL
|
Thời gian CPU
|
P1
|
0.0
|
8
|
P2
|
0.4
|
4
|
P3
|
1.0
|
1
|
Sử dụng nguyên tắc
điều phối độc quyền và các thông tin có được tại thời điểm ra quyết định để trả
lời các câu hỏi sau đây:
a) Cho biết thời
gian lưu lại trung bình trong hệ thống (turnaround time) của các tiến trình
trong thuật toán điều phối FIFO.
b) Cho biết thời
gian lưu lại trung bình trong hệ thống (turnaround time) của các tiến trình
trong thuật toán điều phối SJF.
c) Thuật toán SJF
dự định cải tiến sự thực hiện của hệ thống, nhưng lưu ý chúng ta phải chọn điều
phối P1 tại thời điểm 0 vì không biết rằng sẽ có hai tiến trình ngắn
hơn vào hệ thống sau đó. Thử tính thời gian lưu lại trung bình trong hệ thống
nếu để CPU nhàn rỗi trong 1 đơn vị thời gian đầu tiên và sau đó sử dụng SJF để
điều phối. Lưu ý P1 và P2 sẽ phải chờ trong
suốt thời gian nhàn rỗi này, do vậy thời gian chờ của chúng tăng lên. Thuật
toán điều phối này được biết đến như điều phối dựa trên thông tin về tương lai.
Bài 3. Phân biệt sự khác nhau trong cách tiếp cận để ưu tiên
cho tiến trình ngắn trong các thuật toán điều phối sau:
a) FIFO.
b) RR.
c) Điều phối với độ ưu tiên đa cấp.
Bài 4. Cho biết hai ưu điểm chính của mô hình đa tiểu trình
so với đa tiến trình. Mô tả một ứng dụng thích hợp với mô hình đa tiểu trình và
một ứng dụng khác không thích hợp.
Bài 5. Mô tả các xử lý hệ điều hành phải thực hiện khi
chuyển đổi ngữ cảnh giữa:
a) Các tiến trình.
b) Các tiểu trình.
Bài 6. Xác định thời lượng quantum q là một nhiệm vụ
khó khăn. Giả sử chi phí trung bình cho một lần chuyển đổi ngữ cảnh là s,
và thời gian trung bình một tiến trình hướng nhập xuất sử dụng CPU trước khi
phát sinh một yêu cầu nhập xuất là t (t>>s). Thảo luận các tác
động đến sự thực hiện của hệ thống khi chọn q theo các quy tắc sau:
a) q bất định
b) q lớn hơn 0 một ít
c) q = s
d) s < q < t
e) q = t
f) q > t
Bài 7. Giả sử một hệ điều hành áp dụng giải thuật điều phối
multilevel feedback với 5 mức ưu tiên (giảm dần). Thời lượng quantum dành cho
hàng đợi cấp 1 là 0,5s. Mỗi hàng đợi cấp thấp hơn sẽ có thời lượng quantum dài
gấp đôi hàng đợi ứng với mức ưu tiên cao hơn nó. Một tiến trình khi vào hệ
thống sẽ được đưa vào hàng đợi mức cao nhất, và chuyển dần xuống các hàng đợi
bên dưới sau mỗi lượt sử dụng CPU. Một tiến trình chỉ có thể bị thu hồi CPU khi
đã sử dụng hết thời lượng quantum dành cho nó. Hệ thống có thể thực hiện các
tác vụ xử lý theo lô hoặc tương tác, và mỗi tác vụ lại có thể hướng xử lý hay
hướng nhập xuất.
a) Giải thích tại sao hệ thống
này hoạt động không hiệu quả?
b) Cần phải thay đổi (tối thiểu)
như thế nào để hệ thống điều phối các tác vụ với những bản chất khác biệt như
thế tốt hơn?
[He Dieu Hanh] Chuong 3. Quản lý tiến trình
Reviewed by Nguyen Nam
on
4/18/2014
Rating:
Không có nhận xét nào: