lOMoARcPSD| 58933639
Các ến trình trong hệ điều hành máy nh
Trong bài viết này, chúng ta sẽ m hiểu cách quản ến trình trong hệ điều hành
và các thuật toán liên quan đến nó. Trước khi đi sâu vào m hiểu cách quản lý ến
trình thì trước hết ta sẽ xem qua định nghĩa và các khía cạnh liên quan của nó.
Hiểu đơn giản thì một chương trình đang thực thi được gọi ến trình, hay nói
cách khác, ến trình một thực thể của chương trình đang chạy, thực thể này
thđược gán thực thị bởi một trình xử. Hai phần tử cốt lõi của một ến trình
là code của chương trình và tập dữ liệu liên quan đến đoạn code đó.
Bộ nh ến trình (process memory) được chia làm bốn phần:
Phn program lưu trữ code của chương trình, đọc từ bnhđiện nh (non-
volale storage) khi chương trình được khởi động.
Phn data lưu trữ biến toàn cục biến nh, được cấp phát khởi tạo trước
khi thực thi chương trình chính.
Phn heap đưc dùng cho quản lý cấp phát bộ nhđộng trong chương trình.
Nói cách khác, nó là một phần của bộ nhớ khi thực hiện cấp phát động ví dụ
như cấp phát thông qua new hay malloc giải phóng thông qua delete
hay free,...
Phn stack lưu trữ biến cục bộ được đinh nghĩa bên trong hàm. Không gian
trong stack được tạo cho biến cục bộ khi chúng được khai báo phần không
gian này được giải phóng khi ra khỏi phạm vi của nó.
lOMoARcPSD| 58933639
Process Control Block (PCB)
Một chương trình thực thi như một ến trình được c định duy nhất bởi các tham
số khác nhau. Các tham số này được lưu trữ trong Process Control Block (PCB) cho
mỗi ến trình. Nó là một cấu trúc dữ liệu lưu trữ các thông n như sau:
Idener/Process Id: một định danh duy nhất hay ID liên kết với tất cả ến
trình để phân biệt một ến trình với các ến trình khác.
Process State: trạng thái ến trình thể ready, running, halted,
completed,...
CPU-Scheduling: độ ưu ên so với các ến trình khác và con trỏ đến hàng
đợi định thời (scheduling queues).
CPU register và Program Counter: cần cho lưu trữ phục hồi khi hoán đổi
các ến trình trong ngoài CPU.
I/O status: bao gồm các yêu cầu I/O chưa giải quyết, I/O của thiết bị đưc
gán cho ến trình này, một danh sách các le được sử dụng bởi ến trình.
Memory-Management: bảng trang hoặc bảng phân đoạn.
Accounng Informaon: dung lượng CPU sử dụng cho thực thi ến trình,
giới hạn thời gian,...
Trạng thái của ến trình
y giờ, ta sẽ m hiểu về ến trình, khi ta định nghĩa một tham số của ến trình
được gọi State. Các ến trình thể một trong 5 trạng thái là: start, ready,
running, wait và terminated.
lOMoARcPSD| 58933639
y giờ ta sẽ m hiểu về cách chuyển đổi trạng thái của chúng:
Null -> Start: khi một ến trình được tạo, được bảo rằng ến trình đã
được khởi tạo hoặc một ến trình từ trạng thái NULL trở thành một trạng
thái mới.
Start -> Ready: hệ điều hành sau đó chuyển một ến trình từ trạng thái Start
sang trạng thái Ready, khi nó chuẩn bị được nhận. Ở giai đoạn này, ến trình
tất cả tài nguyên khả dụng cần để chy với đang chờ đợi để CPU thời
gian thực thi nó.
Ready -> Running: chuyển đổi y, hệ điều hành chọn một trong các ến
trình trạng thái Ready bằng cách sử dụng bộ định thời ến trình hoặc
dispatcher. Sau đó CPU bắt đầu thực thi ến trình đã chọn trạng thái
running.
Running -> Terminated: ến trình đang chạy hiện tại bị hu bởi hệ điều hành
nếu nó đã hoàn thành.
Running -> Ready: tập định thời chỉ định thời gian giới hạn cho việc thực thi
bất kỳ ến trình đang chạy nào. Nhưng nếu ến trình hiện tại nhiều hơn thời
gian được chỉ định bởi bộ định thời, nó sẽ được chuyển lại trạng thái ready.
Lý do chính cho chuyển đổi này để đạt được khoảng thời gian tối đa cho
việc thực thi không bị gián đoạn. Hầu hết các hệ điều hành đa chương trình
đều bắt buộc ràng buộc thời gian này.
Running -> Wait: nếu một ến trình muốn bất cứ thứ gì nó phải đợi,
sẽ được đặt trạng thái chđợi. Quá trình không thể chạy ngay y giờ
nó đang chờ một số tài nguyên sẵn có hoặc cho một số sự kiện xảy ra. Ví dụ:
lOMoARcPSD| 58933639
quá trình thể đang đợi nhập liệu bằng bàn phím, yêu cầu truy cập đĩa,
thông báo giữa các ến trình, bộ hẹn giờ hoạt động hoặc quá trình con kết
thúc.
Wait -> Ready: Khi sự kiện đã chờ xảy ra, một quá trình trạng thái
Waing sẽ được chuyển sang trạng thái Ready.
Lưu ý: Một số hệ thống có thể có các trạng thái khác ngoài những trạng thái được
liệt kê ở đây.
Thực thi một ến trình trong Hệ điều hành
Hệ điều hành thực thi nhiều hoạt động khác nhau trong khi tạo một ến trình, khi
sử dụng PCB để theo dõi trạng thái thực thi của từng ến trình.
Để theo dõi tất cả ến nh, gán một PID (ID của ến trình) với từng ến
trình để định danh duy nhất. Như đã thảo luận trên, còn lưu trữ
nhiều chi ết cốt lõi trong PCB.
Hệ điều hành cập nhật thông n trong PCB của ến trình khi chuyển từ
trạng thái này sang trạng thái khác.
Để truy cập PCB thường xuyên, hệ điều hành giữ các con trỏ đến từng PCB
của ến trình trong một bảng ến trình.
lOMoARcPSD| 58933639
Bộ định thời ến trình trong Hđiều hành
Định thời ến trình rất quan trọng để chọn loại bỏ ến trình đang chạy dựa
trên một chiến lược hoặc thuật toán cụ thể. Các mục êu chính của quá trình định
thời ến trình giữ cho CPU luôn bận rộn và cung cấp thời gian phản hồi "có thể
chấp nhận được" cho tất cả các chương trình. Hệ điều hành đa chương trình cho
phép nhiều ến trình được tải vào bộ nhthực thi tại một thời điểm và ến trình
được tải chia sẻ CPU bằng cách sử dụng ghép kênh thời gian.
Hệ điều hành có ba loại bộ định thời để định thời ến trình.
Bộ định thời dài hạn (Job scheduler): b định thời này đưa ến trình mới về trạng
thái Ready. xác định ến trình nào được gán cho CPU để xử , chọn các ến
trình từ hàng đợi và tải chúng vào bộ nhớ để thực thi.
Mục êu chính của bộ định thời dài hạn cung cấp sự kết hợp cân bằng giữa
các công việc (chẳng hạn như giới hạn I/O ràng buộc trình xử lý) kiểm
soát mức độ đa chương trình. Đây một hệ thống được tải nhiều, thể
dành thời gian để triển khai các thuật toán định thời thông minh nâng cao.
lOMoARcPSD| 58933639
Bộ định thời ngắn hạn (CPU scheduler): Nó chịu trách nhiệm chọn một ến trình
từ trạng thái Readylên lịch cho nó đến trạng thái Running. Nó còn được gọi là
Dispatchers.
Bộ định thời CPU chịu trách nhiệm đảm bảo không bị chết đói do c ến
trình thời gian bùng nổ cao.
chạy rất thường xuyên nhanh chóng hoán đổi một quá trình ttrạng
thái Running sang trạng thái Ready.
Bộ định thời trung hạn: chịu trách nhiệm hoán đổi các ến trình khi một quy
trình cụ thđang thực hiện thao c I/O. Nếu một ến trình đang chạy thực hiện
một yêu cầu I/O, thbị tạm dừng. Tiến trình đã bị tạm ngừng sẽ không thể
đạt được bất kỳ ến độ nào để hoàn thành. Tiến trình bị treo được chuyển sang bộ
nhthcấp trong nh huống này để xóa khỏi bộ nh nhường chỗ cho các
ến trình khác. Điều này được gọi chuyển mạch, ến trình y được gọi
chuyển đổi hoặc triển khai.
Định thời CPU trong Hệ điều hành
y giờ mục êu ếp theo của chúng ta hiểu khái niệm về định thời CPU tại
sao chúng ta cần nó. Thời gian cho I/O CPU đều được sử dụng trong một ến
trình điển hình. Thời gian chờ đợi I/O trong một hệ điều hành như MS-DOS bị
lãng phí và CPU đang rảnh rỗi trong thời gian này.
Một ến trình thể sử dụng CPU trong khi một ến trình khác đợi I/O trong hệ
điều hành đa chương trình. Chỉ định thời ến trình mới cho phép điều y. Định
lOMoARcPSD| 58933639
thời CPU là quá trình xác định quá trình nào sẽ có quyền sử dụng riêng đối với CPU
trong khi một ến trình khác bị tạm dừng. Mục êu bản của định thời CPU
đảm bảo rằng bất cứ khi nào CPU rãnh, HĐH sẽ chọn ít nhất một trong các chương
trình trong hàng đợi sẵn sàng để chy. Bộ định thời CPU sẽ phụ trách quá trình lựa
chọn. Nó chọn một trong số cácến trình đang sẵn sàng chạy trong bộ nhớ.
Các kiểu định thi CPU
Có hai kiểu định thời CPU chính là:
1. Định thời preempve:c tác vụ thường được giao với mức độ ưu ên của
chúng trong. Ngay cả khi hoạt động có mức độ ưu ên thấp hơn vẫn đang chạy, đôi
khi cần phải chạy một tác vụ có mức độ ưu ên cao hơn trước một tác vụ mức
độ ưu ên thấp hơn. Tác vụ mức độ ưu ên thấp hơn được tạm dừng trong mt
thời gian sau đó ếp tục khi tác vụ có mức độ ưu ên cao hơn được hoàn thành.
2. Định thời non-preempve: CPU đã được gán cho một ến trình nhất định
trong chế định thời y. Quá trình giữ CPU bị chiếm đóng sẽ chuyển đổi ngữ
cảnh hoặc kết thúc để giải phóng CPU. Đây phương pháp duy nhất hoạt động
trên nhiều nền tảng phần cứng. Đó bởi vì, không giống như định thời preempve,
nó không yêu cầu bất kỳ phần cứng cụ th nào như bộ hẹn giờ.
Sự khác biệt giữa định thời Preempve và Non-Preempve
1. Trong preempve, bộ nhđược cấp phát trong bộ nhchính của CPU với
thời gian giới hạn, thể được gán cho bất kỳ ến trình nào khác phụ
thuộc vào trạng thái của ến trình hiện tại hoặc độ ưu ên của ến trình mới
đến. Trong khi với Non-preempve, bộ nhđược cấp phát cho cùng một ến
trình đến khi nó hoàn thành.
2. Trong preempve, nếu các ến trình mức độ ưu ên cao ếp tục diễn ra
thì ến trình mức độ ưu ên thấp sẽ vẫn bị gián đoạn trong thời gian
không xác định. Trong khi với định thời Non-preempve, nếu bất kỳ ến trình
lớn nào đang xử lý, nó sẽ ếp tục xử lý và sẽ không cho phép một ến trình
dù rất nhỏ xử lý trước khi thực thi hoàn chỉnh.
3. Trong preempve, phải lưu tất cả dữ liệu của ến trình trạng thái tạm
dừng để chthể ếp tục từ thời điểm đó trong khi không yêu cầu
nào như vậy trong định thời Nonpreempve.
Các giải thuật định thời trong hệ điều hành
y giờ, ta sẽ m hiểu một vài giải thuật định thời khác nhau về Quản lý ến trình.
lOMoARcPSD| 58933639
First Come First Serve (FCFS)
Đây giải thuật định thời CPU bản và trực quan nhất. Tiến trình đầu ên yêu
cầu CPU sđược nhận phân bổ CPU đầu ên trong phương thức này. Hàng đợi FIFO
được sử dụng để quản lý chiến lược định thời này. PCB của ến trình được liên kết
với phần đuôi của hàng đợi khi đi o. Do đó, bất cứ khi nào CPU trở nên khả
dụng, nó sẽ được gán cho ến trình ở đầu hàng đợi.
Vài điểm quan trọng của phương thức này:
Nó cung cấp giải thuật định thời preempve và nonpreempve.
Công việc luôn được thực hiện theo thứ tự đến trước, phục vụ trước.
Rất dễ triển khai và sử dụng.
Hiệu suất tệ và thời gian đợi thường rất cao.
Giả sử chúng ta có 5 ến trình p1, p2, p3, p4, p5 và chúng được nhận bởi hàng đợi
sẵn sàng tại thời điểm t1, t2, t3, t4, t5 sao cho t1 <t2 <t3 <t4 <t5. Do đó p1 đến đầu
ên trong hàng đợi sẵn sàng và do đó nó sđược thực thi đầu ên, ếp theo là p2,
p3, p4 và p5 tương ứng.
Hiu ứng Convoy
Trong loại giải thuật FCFS (First Come First Serve), nếu một hiệu ứng nhất định với
thời gian chiếm dụng CPU lớn đến trước bất kỳ ến trình nhỏo thì ến trình nh
sẽ bị chặn bởi ến trình lớn đó hiệu ứng này được gọi là Hiệu ứng Convoy.
Shortest Job First (SJF)
Đây giải thuật non-preempve. một chính sách định thời ưu ên cái ến
trình đang đợi thời gian thực thi ngắn. Trong tất cả các giải thuật định thời SJF
có lợi thế là thời gian chờ đợi trung bình ngắn nhất. Đầu ên, nó sắp xếp tất cả
các ến trình theo thời gian đến. Sau đó chọn phương thức có thời gian đến ngn
nhất và thời gian thực thi ngắn nhất. Sau khi chọn, hãy tạo một nhóm các ến trình
sẽ chạy khi ến trình trước đó hoàn tất, sau đó chọn ến trình thời gian thực thi
ngắn nhất từ nhóm.
Vài điểm quan trọng của phương thức này:
Các ến trình ngắn được xử lý rất nhanh chóng.
Hệ thống cũng có chi phí thấp vì nó chỉ đưa ra quyết định khi một ến trình
kết thúc hoặc một ến trình mới được thêm vào.
Khi một ến trình mới được thêm o, giải thuật chỉ phải so sánh ến trình
hiện đang chạy với quy trình mới, bỏ qua bất kỳ ến trình nào khác đang chờ
chy.
lOMoARcPSD| 58933639
Các ến trình dài thể bị hoãn thời hạn nếu các ến trình ngắn được
thêm vào một cách thường xuyên.
Nó còn được phân loại thành hai loi:
o Định thời ưu ên preempve nếu do ến trình mới đến thời gian
sử dụng CPU nhỏ hơn, ến trình hiện tại được chuyển sang trạng thái
tạm dừng và ến trình mới ếp tục thực hiện.
o Định thời ưu ên non-preempve nếu ến trình đến thời gian sử
dụng CPU nhỏ hơn ến trình hiện tại không bị xáo trộn.
Ví dụ đơn giản về giải thuật này:
Giả sử chúng ta có 5 ến trình p1, p2, p3, p4, p5 và chúng được nhận bởi hàng đợi
sẵn sàng tại thời điểm t1, t2, t3, t4, t5 sao cho t1 <t2 <t3 <t4 <t5. Bây giờ, bạn
thgisử lần này hàng đợi sẵn sàng hàng đợi ưu ên sắp xếp lại ến trình đến
trên sở thời gian sử dụng CPU. Do đó, ến trình có thời gian sử dụng CPU ít nhất
sẽ được phân phối trước, ...
Longest Job First (LJF)
Đây cũng một giải thuật định thời non-preepmve. Giải thuật này chủ yếu theo
dõi thời gian thực thi của tất cả các ến trình có thể truy cập tại thời điểm đến, sau
đó chỉ định bộ xử cho ến trình thời gian thực thi dài nhất. Trong giải thuật
y, khi một ến trình bắt đầu chạy, nó không thể bị tạm dừng giữa chừng. Chỉ cho
đến khi ến trình được cấp phát hoàn tất ến trình xử của và bị kết thúc thì
bất kỳ ến trình nào khác mới thể được thực hiện. sắp xếp các ến trình theo
thứ tự tăng dần của thời gian đến của chúng. Sau đó, trong số tất cả các ến trình
đã đến thời điểm đó, sẽ chọn ến trình thời gian thực thi lâu nhất. Sau đó,
nó sẽ xử lý nó trong suốt thời gian thực thi. Cho đến khi ến trình này hoàn tất quá
trình thực thi, LJF sẽ giám sát xem có thêm ến trình nào nữa hay không.
Vài điểm quan trọng của phương thức này:
Thuật toán này làm giảm tốc độ xử lý, dẫn đến giảm hiệu suất và sử dụng hệ
thống.
Thời gian chtrung bình thời gian quay vòng trung bình cho một nhóm
thủ tục cụ th tăng lên do cách ếp cận này.
Với kỹ thuật này, có thể một ến trình ngắn sẽ không bao giờ được thực thi,
trong khi hệ thng ếp tục chạy các ến trình lớn.
Một ví dụ đơn giản về Thuật toán này:
lOMoARcPSD| 58933639
Tương tự nhưdụ trên nhưng bạn thể giả sử ở đây rằng cùng một hàng đợi sẵn
sàng ưu ên dựa trên thời gian sử dụng CPU lớn hơn ở lần đầu ên, tức là trong số
năm ến trình đó, ến trình nào thời gian sử dụng CPU lớn nhất sẽ được thực
thi trước ên, ...
Round Robin (RR)
Round Robin một hệ thống định thời cho CPU, trong đó mỗi ến trình được n
định một khoảng thời gian đã định theo chu kỳ. Giải thuật Round Robin được tạo
ra với các hệ thống chia sẻ thi gian. này tương tự như định thời FCFS, ngoại trừ
việc nó bao gồm quyền ưu ên, cho phép hệ thống chuyển đổi giữa các ến trình.
Mỗi ến trình một khoảng thời gian nhất định được ấn định cho khi khoảng
thời gian đó trôi qua, ến trình này đã được ưu ên và một ến trình khác sẽ din
ra. Kết quả là, tất cả các ến trình nhận được một lượng thời gian bằng nhau ca
CPU. Thuật toán này hoạt động tốt nhất về thời gian phản hồi trung bình.
Một số điểm quan trọng của phương pháp này:
Round robin một giải thuật ưu ên trước và tương tự như FCFS với một số
cải ến
CPU được chuyển sang ến trình ếp theo sau một khoảng thời gian cố định.
Phương pháp định thời được sử dụng rộng rãi trong các hệ điều hành truyền
thống.
Một ví dụ đơn giản với giải thuật này:
Một lần nữa, giả sử chúng ta có 5 ến trình p1, p2, p3, p4, p5 và để chúng có tổng
thời gian thực hiện t1, t2, t3, t4 t5. y giờ, chúng ta có thêm một yếu tố t'
(thời gian) sẽ đảm bảo việc chia sẻ thời gian CPU bằng nhau cho mỗi ến trình. Giả
sử trạng thái đầu ên đến và sau thời gian t', ến trình p1 y được thực hiện trong
(t1 - t') thời gian. Bây giờ, chuyển sang trạng thái chờ, nơi ththực hiện
hoạt động I/O của mình nhưng bây giờ bộ nhớ chính được giải phóng cho ến trình
ếp theo p2. Sau khi hoàn thành hoạt động I / O của nó, ến trình p1 lại được đẩy
đến hàng đợi sẵn sàng cho chu kỳ xử lý ếp theo của nó. Dữ liệu của ến trình p1
để thực hiện cho đến (t1 - t ') đã được CPU lưu để thể ếp tục từ trạng
thái đó trong chu kỳ ếp theo. Điềuy cũng xảy ra với tất cả các ến trình.
Định thời dựa trên độ ưu ên
Định thời dựa trên độ ưu ên là một trong những phương pháp định thời hàng loạt
thường được sử dụng nhất. Một mức độ ưu ên được chỉ định cho mỗi ến trình.
Tiến trình ưu ên cao nhất được thực hiện trước. Mức độ ưu ên có thể được xác
lOMoARcPSD| 58933639
định bởi giới hạn bộ nhớ, giới hạn thời gian hoặc bất kỳ hạn chế tài nguyên nào
khác. Định thời ưu ên không phải lúc nào cũng đặt ưu ên là nghịch đảo của thời
gian thực thi CPU và bộ nhớ; thay o đó, nó thể được đặt bên trong hoặc bên
ngoài, nhưng việc định thời được thực hiện trên sở độ ưu ên của ến trình, với
các ến trình khẩn cấp nhất được xử lý trước, sau đó là cácến trình có thứ tự ưu
ên thấp hơn.
Một số điểm quan trọng của phương pháp này:
Trong giải thuật định thời ưu ên, khả năng bị chặn thời hạn hoặc chết
đói.
Chúng ta thể tận dụng khái niệm lão hóa để ngăn chặn sự chết đói của bất
kỳ ến trình nào bằng cách tăng mức độ ưu ên của các ến trình có mức đ
ưu ên thấp dựa trên thời gian chờ đợi của chúng.
Nó cũng được phân loại thành hai loại:
o Định thời ưu ên preempve: nếu ến trình mới mức độ ưu ên cao
hơn, Định thời ưu ên preempve trình hiện tại được chuyển sang
trạng thái tạm dừng và thực hiện ến trình mới.
Định thời ưu ên non-preempve nếu do ến trình mức độ ưu ên
cao hơn sắp đến, ến trình hiện tại không bị xáo trn.
Một ví dụ đơn giản về giải thuật này:
Tương tự như dụ về giải thuật FCFS, các ến trình được chèn vào hàng đợi sẵn
sàng nhưng đây trên sở mức độ ưu ên bây giờ thể thời gian thực thi
CPU, giới hạn bộ nhớ, v.v. sau đó việc thực thi của tương tự như thuật toán
FCFS.

Preview text:

lOMoAR cPSD| 58933639
Các tiến trình trong hệ điều hành máy tính
Trong bài viết này, chúng ta sẽ tìm hiểu cách quản lý tiến trình trong hệ điều hành
và các thuật toán liên quan đến nó. Trước khi đi sâu vào tìm hiểu cách quản lý tiến
trình thì trước hết ta sẽ xem qua định nghĩa và các khía cạnh liên quan của nó.
Hiểu đơn giản thì một chương trình đang thực thi được gọi là tiến trình, hay nói
cách khác, tiến trình là một thực thể của chương trình đang chạy, thực thể này có
thể được gán và thực thị bởi một trình xử lý. Hai phần tử cốt lõi của một tiến trình
là code của chương trình và tập dữ liệu liên quan đến đoạn code đó.
Bộ nhớ tiến trình (process memory) được chia làm bốn phần: •
Phần program lưu trữ code của chương trình, đọc từ bộ nhớ điện tĩnh (non-
volatile storage) khi chương trình được khởi động. •
Phần data lưu trữ biến toàn cục và biến tĩnh, được cấp phát và khởi tạo trước
khi thực thi chương trình chính. •
Phần heap được dùng cho quản lý cấp phát bộ nhớ động trong chương trình.
Nói cách khác, nó là một phần của bộ nhớ khi thực hiện cấp phát động ví dụ
như cấp phát thông qua new hay malloc và giải phóng thông qua delete hay free,... •
Phần stack lưu trữ biến cục bộ được đinh nghĩa bên trong hàm. Không gian
trong stack được tạo cho biến cục bộ khi chúng được khai báo và phần không
gian này được giải phóng khi ra khỏi phạm vi của nó. lOMoAR cPSD| 58933639
Process Control Block (PCB)
Một chương trình thực thi như một tiến trình được xác định duy nhất bởi các tham
số khác nhau. Các tham số này được lưu trữ trong Process Control Block (PCB) cho
mỗi tiến trình. Nó là một cấu trúc dữ liệu lưu trữ các thông tin như sau: •
Identifier/Process Id: một định danh duy nhất hay ID liên kết với tất cả tiến
trình để phân biệt một tiến trình với các tiến trình khác. •
Process State: trạng thái tiến trình có thể là ready, running, halted, completed,... •
CPU-Scheduling: độ ưu tiên so với các tiến trình khác và con trỏ đến hàng
đợi định thời (scheduling queues). •
CPU register và Program Counter: cần cho lưu trữ và phục hồi khi hoán đổi
các tiến trình trong và ngoài CPU. •
I/O status: bao gồm các yêu cầu I/O chưa giải quyết, I/O của thiết bị được
gán cho tiến trình này, một danh sách các file được sử dụng bởi tiến trình. •
Memory-Management: bảng trang hoặc bảng phân đoạn. •
Accounting Information: dung lượng CPU sử dụng cho thực thi tiến trình, giới hạn thời gian,...
Trạng thái của tiến trình
Bây giờ, ta sẽ tìm hiểu về tiến trình, khi ta định nghĩa một tham số của tiến trình
được gọi là State. Các tiến trình có thể có một trong 5 trạng thái là: start, ready, running, wait và terminated. lOMoAR cPSD| 58933639
Bây giờ ta sẽ tìm hiểu về cách chuyển đổi trạng thái của chúng: •
Null -> Start: khi một tiến trình được tạo, nó được bảo rằng tiến trình đã
được khởi tạo hoặc một tiến trình từ trạng thái NULL trở thành một trạng thái mới. •
Start -> Ready: hệ điều hành sau đó chuyển một tiến trình từ trạng thái Start
sang trạng thái Ready, khi nó chuẩn bị được nhận. Ở giai đoạn này, tiến trình
có tất cả tài nguyên khả dụng cần có để chạy với đang chờ đợi để CPU có thời gian thực thi nó. •
Ready -> Running: ở chuyển đổi này, hệ điều hành chọn một trong các tiến
trình ở trạng thái Ready bằng cách sử dụng bộ định thời tiến trình hoặc
dispatcher. Sau đó CPU bắt đầu thực thi tiến trình đã chọn ở trạng thái running. •
Running -> Terminated: tiến trình đang chạy hiện tại bị huỷ bởi hệ điều hành nếu nó đã hoàn thành. •
Running -> Ready: tập định thời chỉ định thời gian giới hạn cho việc thực thi
bất kỳ tiến trình đang chạy nào. Nhưng nếu tiến trình hiện tại nhiều hơn thời
gian được chỉ định bởi bộ định thời, nó sẽ được chuyển lại trạng thái ready.
Lý do chính cho chuyển đổi này là để đạt được khoảng thời gian tối đa cho
việc thực thi không bị gián đoạn. Hầu hết các hệ điều hành đa chương trình
đều bắt buộc ràng buộc thời gian này. •
Running -> Wait: nếu một tiến trình muốn bất cứ thứ gì mà nó phải đợi, nó
sẽ được đặt ở trạng thái chờ đợi. Quá trình không thể chạy ngay bây giờ vì
nó đang chờ một số tài nguyên sẵn có hoặc cho một số sự kiện xảy ra. Ví dụ: lOMoAR cPSD| 58933639
quá trình có thể đang đợi nhập liệu bằng bàn phím, yêu cầu truy cập đĩa,
thông báo giữa các tiến trình, bộ hẹn giờ hoạt động hoặc quá trình con kết thúc. •
Wait -> Ready: Khi sự kiện mà nó đã chờ xảy ra, một quá trình ở trạng thái
Waiting sẽ được chuyển sang trạng thái Ready.
Lưu ý: Một số hệ thống có thể có các trạng thái khác ngoài những trạng thái được liệt kê ở đây.
Thực thi một tiến trình trong Hệ điều hành
Hệ điều hành thực thi nhiều hoạt động khác nhau trong khi tạo một tiến trình, khi
sử dụng PCB để theo dõi trạng thái thực thi của từng tiến trình. •
Để theo dõi tất cả tiến tình, nó gán một PID (ID của tiến trình) với từng tiến
trình để định danh nó là duy nhất. Như đã thảo luận ở trên, nó còn lưu trữ
nhiều chi tiết cốt lõi trong PCB. •
Hệ điều hành cập nhật thông tin trong PCB của tiến trình khi nó chuyển từ
trạng thái này sang trạng thái khác. •
Để truy cập PCB thường xuyên, hệ điều hành giữ các con trỏ đến từng PCB
của tiến trình trong một bảng tiến trình. lOMoAR cPSD| 58933639
Bộ định thời tiến trình trong Hệ điều hành
Định thời tiến trình là rất quan trọng để chọn và loại bỏ tiến trình đang chạy dựa
trên một chiến lược hoặc thuật toán cụ thể. Các mục tiêu chính của quá trình định
thời tiến trình là giữ cho CPU luôn bận rộn và cung cấp thời gian phản hồi "có thể
chấp nhận được" cho tất cả các chương trình. Hệ điều hành đa chương trình cho
phép nhiều tiến trình được tải vào bộ nhớ thực thi tại một thời điểm và tiến trình
được tải chia sẻ CPU bằng cách sử dụng ghép kênh thời gian.
Hệ điều hành có ba loại bộ định thời để định thời tiến trình.
Bộ định thời dài hạn (Job scheduler): bộ định thời này đưa tiến trình mới về trạng
thái Ready. Nó xác định tiến trình nào được gán cho CPU để xử lý, chọn các tiến
trình từ hàng đợi và tải chúng vào bộ nhớ để thực thi. •
Mục tiêu chính của bộ định thời dài hạn là cung cấp sự kết hợp cân bằng giữa
các công việc (chẳng hạn như giới hạn I/O và ràng buộc trình xử lý) và kiểm
soát mức độ đa chương trình. Đây là một hệ thống được tải nhiều, có thể
dành thời gian để triển khai các thuật toán định thời thông minh và nâng cao. lOMoAR cPSD| 58933639
Bộ định thời ngắn hạn (CPU scheduler): Nó chịu trách nhiệm chọn một tiến trình
từ trạng thái Ready và lên lịch cho nó đến trạng thái Running. Nó còn được gọi là Dispatchers. •
Bộ định thời CPU chịu trách nhiệm đảm bảo không bị chết đói do các tiến
trình thời gian bùng nổ cao. •
Nó chạy rất thường xuyên và nhanh chóng hoán đổi một quá trình từ trạng
thái Running sang trạng thái Ready.
Bộ định thời trung hạn: Nó chịu trách nhiệm hoán đổi các tiến trình khi một quy
trình cụ thể đang thực hiện thao tác I/O. Nếu một tiến trình đang chạy thực hiện
một yêu cầu I/O, nó có thể bị tạm dừng. Tiến trình đã bị tạm ngừng sẽ không thể
đạt được bất kỳ tiến độ nào để hoàn thành. Tiến trình bị treo được chuyển sang bộ
nhớ thứ cấp trong tình huống này để xóa nó khỏi bộ nhớ và nhường chỗ cho các
tiến trình khác. Điều này được gọi là chuyển mạch, và tiến trình này được gọi là
chuyển đổi hoặc triển khai.
Định thời CPU trong Hệ điều hành
Bây giờ mục tiêu tiếp theo của chúng ta là hiểu khái niệm về định thời CPU và tại
sao chúng ta cần nó. Thời gian cho I/O và CPU đều được sử dụng trong một tiến
trình điển hình. Thời gian chờ đợi I/O trong một hệ điều hành cũ như MS-DOS bị
lãng phí và CPU đang rảnh rỗi trong thời gian này.
Một tiến trình có thể sử dụng CPU trong khi một tiến trình khác đợi I/O trong hệ
điều hành đa chương trình. Chỉ định thời tiến trình mới cho phép điều này. Định lOMoAR cPSD| 58933639
thời CPU là quá trình xác định quá trình nào sẽ có quyền sử dụng riêng đối với CPU
trong khi một tiến trình khác bị tạm dừng. Mục tiêu cơ bản của định thời CPU là
đảm bảo rằng bất cứ khi nào CPU rãnh, HĐH sẽ chọn ít nhất một trong các chương
trình trong hàng đợi sẵn sàng để chạy. Bộ định thời CPU sẽ phụ trách quá trình lựa
chọn. Nó chọn một trong số các tiến trình đang sẵn sàng chạy trong bộ nhớ.
Các kiểu định thời CPU
Có hai kiểu định thời CPU chính là: 1.
Định thời preemptive: các tác vụ thường được giao với mức độ ưu tiên của
chúng trong. Ngay cả khi hoạt động có mức độ ưu tiên thấp hơn vẫn đang chạy, đôi
khi cần phải chạy một tác vụ có mức độ ưu tiên cao hơn trước một tác vụ có mức
độ ưu tiên thấp hơn. Tác vụ có mức độ ưu tiên thấp hơn được tạm dừng trong một
thời gian và sau đó tiếp tục khi tác vụ có mức độ ưu tiên cao hơn được hoàn thành. 2.
Định thời non-preemptive: CPU đã được gán cho một tiến trình nhất định
trong cơ chế định thời này. Quá trình giữ CPU bị chiếm đóng sẽ chuyển đổi ngữ
cảnh hoặc kết thúc để giải phóng CPU. Đây là phương pháp duy nhất hoạt động
trên nhiều nền tảng phần cứng. Đó là bởi vì, không giống như định thời preemptive,
nó không yêu cầu bất kỳ phần cứng cụ thể nào như bộ hẹn giờ.
Sự khác biệt giữa định thời Preemptive và Non-Preemptive
1. Trong preemptive, bộ nhớ được cấp phát trong bộ nhớ chính của CPU với
thời gian giới hạn, nó có thể được gán cho bất kỳ tiến trình nào khác phụ
thuộc vào trạng thái của tiến trình hiện tại hoặc độ ưu tiên của tiến trình mới
đến. Trong khi với Non-preemptive, bộ nhớ được cấp phát cho cùng một tiến
trình đến khi nó hoàn thành.
2. Trong preemptive, nếu các tiến trình có mức độ ưu tiên cao tiếp tục diễn ra
thì tiến trình có mức độ ưu tiên thấp sẽ vẫn bị gián đoạn trong thời gian
không xác định. Trong khi với định thời Non-preemptive, nếu bất kỳ tiến trình
lớn nào đang xử lý, nó sẽ tiếp tục xử lý và sẽ không cho phép một tiến trình
dù rất nhỏ xử lý trước khi thực thi hoàn chỉnh.
3. Trong preemptive, nó phải lưu tất cả dữ liệu của tiến trình ở trạng thái tạm
dừng để nó chỉ có thể tiếp tục từ thời điểm đó trong khi không có yêu cầu
nào như vậy trong định thời Nonpreemptive.
Các giải thuật định thời trong hệ điều hành
Bây giờ, ta sẽ tìm hiểu một vài giải thuật định thời khác nhau về Quản lý tiến trình. lOMoAR cPSD| 58933639
First Come First Serve (FCFS)
Đây là giải thuật định thời CPU cơ bản và trực quan nhất. Tiến trình đầu tiên yêu
cầu CPU sẽ được nhận phân bổ CPU đầu tiên trong phương thức này. Hàng đợi FIFO
được sử dụng để quản lý chiến lược định thời này. PCB của tiến trình được liên kết
với phần đuôi của hàng đợi khi nó đi vào. Do đó, bất cứ khi nào CPU trở nên khả
dụng, nó sẽ được gán cho tiến trình ở đầu hàng đợi.
Vài điểm quan trọng của phương thức này: •
Nó cung cấp giải thuật định thời preemptive và nonpreemptive. •
Công việc luôn được thực hiện theo thứ tự đến trước, phục vụ trước. •
Rất dễ triển khai và sử dụng. •
Hiệu suất tệ và thời gian đợi thường rất cao.
Giả sử chúng ta có 5 tiến trình p1, p2, p3, p4, p5 và chúng được nhận bởi hàng đợi
sẵn sàng tại thời điểm t1, t2, t3, t4, t5 sao cho t1 tiên trong hàng đợi sẵn sàng và do đó nó sẽ được thực thi đầu tiên, tiếp theo là p2, p3, p4 và p5 tương ứng.
Hiệu ứng Convoy
Trong loại giải thuật FCFS (First Come First Serve), nếu một hiệu ứng nhất định với
thời gian chiếm dụng CPU lớn đến trước bất kỳ tiến trình nhỏ nào thì tiến trình nhỏ
sẽ bị chặn bởi tiến trình lớn đó và hiệu ứng này được gọi là Hiệu ứng Convoy.
Shortest Job First (SJF)
Đây là giải thuật non-preemptive. Nó là một chính sách định thời ưu tiên cái tiến
trình đang đợi có thời gian thực thi ngắn. Trong tất cả các giải thuật định thời SJF
có lợi thế là có thời gian chờ đợi trung bình ngắn nhất. Đầu tiên, nó sắp xếp tất cả
các tiến trình theo thời gian đến. Sau đó chọn phương thức có thời gian đến ngắn
nhất và thời gian thực thi ngắn nhất. Sau khi chọn, hãy tạo một nhóm các tiến trình
sẽ chạy khi tiến trình trước đó hoàn tất, sau đó chọn tiến trình có thời gian thực thi ngắn nhất từ nhóm.
Vài điểm quan trọng của phương thức này: •
Các tiến trình ngắn được xử lý rất nhanh chóng. •
Hệ thống cũng có chi phí thấp vì nó chỉ đưa ra quyết định khi một tiến trình
kết thúc hoặc một tiến trình mới được thêm vào. •
Khi một tiến trình mới được thêm vào, giải thuật chỉ phải so sánh tiến trình
hiện đang chạy với quy trình mới, bỏ qua bất kỳ tiến trình nào khác đang chờ chạy. lOMoAR cPSD| 58933639 •
Các tiến trình dài có thể bị hoãn vô thời hạn nếu các tiến trình ngắn được
thêm vào một cách thường xuyên. •
Nó còn được phân loại thành hai loại:
o Định thời ưu tiên preemptive nếu do tiến trình mới đến có thời gian
sử dụng CPU nhỏ hơn, tiến trình hiện tại được chuyển sang trạng thái
tạm dừng và tiến trình mới tiếp tục thực hiện.
o Định thời ưu tiên non-preemptive nếu tiến trình đến có thời gian sử
dụng CPU nhỏ hơn tiến trình hiện tại không bị xáo trộn.
Ví dụ đơn giản về giải thuật này:
Giả sử chúng ta có 5 tiến trình p1, p2, p3, p4, p5 và chúng được nhận bởi hàng đợi
sẵn sàng tại thời điểm t1, t2, t3, t4, t5 sao cho t1 thể giả sử lần này hàng đợi sẵn sàng là hàng đợi ưu tiên sắp xếp lại tiến trình đến
trên cơ sở thời gian sử dụng CPU. Do đó, tiến trình có thời gian sử dụng CPU ít nhất
sẽ được phân phối trước, ...
Longest Job First (LJF)
Đây cũng là một giải thuật định thời non-preepmtive. Giải thuật này chủ yếu theo
dõi thời gian thực thi của tất cả các tiến trình có thể truy cập tại thời điểm đến, sau
đó chỉ định bộ xử lý cho tiến trình có thời gian thực thi dài nhất. Trong giải thuật
này, khi một tiến trình bắt đầu chạy, nó không thể bị tạm dừng giữa chừng. Chỉ cho
đến khi tiến trình được cấp phát hoàn tất tiến trình xử lý của nó và bị kết thúc thì
bất kỳ tiến trình nào khác mới có thể được thực hiện. Nó sắp xếp các tiến trình theo
thứ tự tăng dần của thời gian đến của chúng. Sau đó, trong số tất cả các tiến trình
đã đến thời điểm đó, nó sẽ chọn tiến trình có thời gian thực thi lâu nhất. Sau đó,
nó sẽ xử lý nó trong suốt thời gian thực thi. Cho đến khi tiến trình này hoàn tất quá
trình thực thi, LJF sẽ giám sát xem có thêm tiến trình nào nữa hay không.
Vài điểm quan trọng của phương thức này: •
Thuật toán này làm giảm tốc độ xử lý, dẫn đến giảm hiệu suất và sử dụng hệ thống. •
Thời gian chờ trung bình và thời gian quay vòng trung bình cho một nhóm
thủ tục cụ thể tăng lên do cách tiếp cận này. •
Với kỹ thuật này, có thể một tiến trình ngắn sẽ không bao giờ được thực thi,
trong khi hệ thống tiếp tục chạy các tiến trình lớn.
Một ví dụ đơn giản về Thuật toán này: lOMoAR cPSD| 58933639
Tương tự như ví dụ trên nhưng bạn có thể giả sử ở đây rằng cùng một hàng đợi sẵn
sàng ưu tiên dựa trên thời gian sử dụng CPU lớn hơn ở lần đầu tiên, tức là trong số
năm tiến trình đó, tiến trình nào có thời gian sử dụng CPU lớn nhất sẽ được thực thi trước tiên, ... Round Robin (RR)
Round Robin là một hệ thống định thời cho CPU, trong đó mỗi tiến trình được ấn
định một khoảng thời gian đã định theo chu kỳ. Giải thuật Round Robin được tạo
ra với các hệ thống chia sẻ thời gian. Nó này tương tự như định thời FCFS, ngoại trừ
việc nó bao gồm quyền ưu tiên, cho phép hệ thống chuyển đổi giữa các tiến trình.
Mỗi tiến trình có một khoảng thời gian nhất định được ấn định cho nó và khi khoảng
thời gian đó trôi qua, tiến trình này đã được ưu tiên và một tiến trình khác sẽ diễn
ra. Kết quả là, tất cả các tiến trình nhận được một lượng thời gian bằng nhau của
CPU. Thuật toán này hoạt động tốt nhất về thời gian phản hồi trung bình.
Một số điểm quan trọng của phương pháp này: •
Round robin là một giải thuật ưu tiên trước và tương tự như FCFS với một số cải tiến •
CPU được chuyển sang tiến trình tiếp theo sau một khoảng thời gian cố định. •
Phương pháp định thời được sử dụng rộng rãi trong các hệ điều hành truyền thống.
Một ví dụ đơn giản với giải thuật này:
Một lần nữa, giả sử chúng ta có 5 tiến trình p1, p2, p3, p4, p5 và để chúng có tổng
thời gian thực hiện là t1, t2, t3, t4 và t5. Bây giờ, chúng ta có thêm một yếu tố t'
(thời gian) sẽ đảm bảo việc chia sẻ thời gian CPU bằng nhau cho mỗi tiến trình. Giả
sử trạng thái đầu tiên đến và sau thời gian t', tiến trình p1 này được thực hiện trong
(t1 - t') thời gian. Bây giờ, nó chuyển sang trạng thái chờ, nơi nó có thể thực hiện
hoạt động I/O của mình nhưng bây giờ bộ nhớ chính được giải phóng cho tiến trình
tiếp theo p2. Sau khi hoàn thành hoạt động I / O của nó, tiến trình p1 lại được đẩy
đến hàng đợi sẵn sàng cho chu kỳ xử lý tiếp theo của nó. Dữ liệu của tiến trình p1
để thực hiện nó cho đến (t1 - t ') đã được CPU lưu để nó có thể tiếp tục từ trạng
thái đó trong chu kỳ tiếp theo. Điều này cũng xảy ra với tất cả các tiến trình.
Định thời dựa trên độ ưu tiên
Định thời dựa trên độ ưu tiên là một trong những phương pháp định thời hàng loạt
thường được sử dụng nhất. Một mức độ ưu tiên được chỉ định cho mỗi tiến trình.
Tiến trình ưu tiên cao nhất được thực hiện trước. Mức độ ưu tiên có thể được xác lOMoAR cPSD| 58933639
định bởi giới hạn bộ nhớ, giới hạn thời gian hoặc bất kỳ hạn chế tài nguyên nào
khác. Định thời ưu tiên không phải lúc nào cũng đặt ưu tiên là nghịch đảo của thời
gian thực thi CPU và bộ nhớ; thay vào đó, nó có thể được đặt bên trong hoặc bên
ngoài, nhưng việc định thời được thực hiện trên cơ sở độ ưu tiên của tiến trình, với
các tiến trình khẩn cấp nhất được xử lý trước, sau đó là các tiến trình có thứ tự ưu tiên thấp hơn.
Một số điểm quan trọng của phương pháp này: •
Trong giải thuật định thời ưu tiên, khả năng bị chặn vô thời hạn hoặc chết đói. •
Chúng ta có thể tận dụng khái niệm lão hóa để ngăn chặn sự chết đói của bất
kỳ tiến trình nào bằng cách tăng mức độ ưu tiên của các tiến trình có mức độ
ưu tiên thấp dựa trên thời gian chờ đợi của chúng. •
Nó cũng được phân loại thành hai loại:
o Định thời ưu tiên preemptive: nếu tiến trình mới có mức độ ưu tiên cao
hơn, Định thời ưu tiên preemptive trình hiện tại được chuyển sang
trạng thái tạm dừng và thực hiện tiến trình mới.
Định thời ưu tiên non-preemptive nếu do tiến trình có mức độ ưu tiên
cao hơn sắp đến, tiến trình hiện tại không bị xáo trộn.
Một ví dụ đơn giản về giải thuật này:
Tương tự như ví dụ về giải thuật FCFS, các tiến trình được chèn vào hàng đợi sẵn
sàng nhưng ở đây trên cơ sở mức độ ưu tiên bây giờ có thể là thời gian thực thi
CPU, giới hạn bộ nhớ, v.v. và sau đó việc thực thi của nó tương tự như thuật toán FCFS.