Một số thuật toỏn lập lịch cho CPU

Một phần của tài liệu Lý thuyết lập lịch và ứng dụng giải pháp quyết bài toán lập lịch cho CPU (Trang 34 - 91)

2.3.1. Mụ hỡnh bài toỏn lập lịch cho CPU

Bất cứ khi nào CPU khụng hoạt động, hệ điều hành phải chọn một trong những tiến trỡnh hàng đợi sẵn sàng để thực thi. Chọn tiến trỡnh đƣợc thực hiện bởi bộ lập lịch ngắn (short-term scheduler) hay bộ lập lịch CPU. Bộ lập lịch này chọn cỏc tiến trỡnh trong bộ nhớ sẵn sàng thực thi và cấp phỏt CPU tới một trong cỏc tiến trỡnh đú.

Hàng đợi sẵn sàng khụng nhất thiết là hàng đợi vào trƣớc, ra trƣớc (FIFO). Xem xột một số thuật toỏn lập lịch khỏc nhau, một hàng đợi sẵn sàng cú thể đƣợc cài đặt nhƣ một hàng đợi FIFO, một hàng đợi ƣu tiờn, một cõy, hay đơn giản là một danh sỏch liờn kết khụng thứ tự. Tuy nhiờn, về khỏi niệm tất cả cỏc tiến trỡnh trong hàng đợi sẵn sàng đƣợc xếp hàng chờ cơ hội để chạy trờn CPU. Cỏc mẫu tin trong hàng đợi thƣờng là khối điều khiển tiến trỡnh của phõn bố đú.

35

Số húa bởi Trung tõm Học liệu http://lrc.tnu.edu.vn

2.3.2. Một số thuật toỏn lập lịch cho CPU

2.3.2.1. Lập lịch FCFS

Thuật toỏn lập lịch FCFS (first-come, first-served) đƣợc thực hiện theo tƣ tƣởng là đến trƣớc, đƣợc phục vụ trƣớc (first-come, first-served-FCFS). Với cơ chế này, tiến trỡnh yờu cầu CPU trƣớc sẽ đƣợc cấp phỏt CPU trƣớc. Việc cài đặt FCFS đƣợc quản lý dễ dàng với hàng đợi FIFO. Khi một tiến trỡnh đi vào hàng đợi sẵn sàng, PCB của nú đƣợc liờn kết tới cuối của hàng đợi. Khi CPU khụng đƣợc sử dụng, nú đƣợc cấp phỏt tới một tiến trỡnh tại đầu hàng đợi. Sau đú, tiến trỡnh đang chạy đƣợc lấy ra khỏi hàng đợi. Với tƣ tƣởng này, việc thực hiện thuật toỏn FCFS là đơn giản.

Tuy nhiờn, thời gian chờ đợi trung bỡnh thuật toỏn FCFS thƣờng là dài. Xột tập hợp cỏc tiến trỡnh sau đến tại thời điểm 0, với chiều dài thời gian chu kỳ CPU đƣợc cho theo mini giõy.

Vớ dụ: Cho dóy tiến trỡnh và thời gian phục vụ tƣơng ứng Processes T thực hiện

P1 24

P2 3

P3 3

Sơ đồ Gantt biểu thị thứ tự thực hiện cỏc tiến trỡnh nhƣ sau:

Theo sơ đồ này, chỳng ta thấy thời gian chờ đợi của cỏc tiến trỡnh là: Processes T thực hiện T đợi

P1 24 0

P2 3 24

P3 3 27

36

Số húa bởi Trung tõm Học liệu http://lrc.tnu.edu.vn

Do đú, thời gian chờ đợi trung bỡnh là (0+24+27)/3=17 mili giõy. Tuy nhiờn, nếu cỏc tiến trỡnh đến theo thứ tự P2, P3, P1 thỡ cỏc kết quả đƣợc hiển thị trong lƣu đồ Gantt nhƣ sau:

Theo sơ đồ này, chỳng ta thấy thời gian chờ đợi của cỏc tiến trỡnh là: Processes T thực hiện T đợi

P2 3 0

P3 3 3

P1 24 6

 30 9

Thời gian chờ đợi trung bỡnh bõy giờ là (6+0+3) / 3=3 mili giõy. Việc cắt giảm này là quan trọng. Do đú, thời gian chờ đợi trung bỡnh đối với thuật toỏn FCFS thƣờng khụng là tối ƣu và cú sự thay đổi rất quan trọng nếu cỏc thời gian CPU dành cho cỏc tiến trỡnh khỏc nhau rất lớn.

Ngoài ra, xột tỏc dụng của lập lịch FCFS trong trƣờng hợp động. Giả sử chỳng ta cú một tiến trỡnh hƣớng xử lý (CPU-bound) và nhiều tiến trỡnh hƣớng nhập/xuất (I/O bound). Khi cỏc tiến trỡnh đồng thời cựng yờu cầu hệ thống thỡ hiện tƣợng sau cú thể xảy ra. Tiến trỡnh hƣớng xử lý sẽ nhận CPU và giữ nú. Trong suốt thời gian này, tất cả tiến trỡnh khỏc sẽ kết thỳc việc nhập/xuất của nú và chuyển vào hàng đợi sẵn sàng, cỏc thiết bị nhập/xuất ở trạng thỏi nghỉ. Cuối cựng, tiến trỡnh hƣớng xử lý kết thỳc chu kỳ CPU của nú và chuyển tới thiết bị nhập/xuất. Tất cả cỏc tiến trỡnh hƣớng xử lý cú chu kỳ CPU rất ngắn sẽ nhanh chúng thực thi và di chuyển trở về hàng đợi nhập/xuất. Tại thời điểm này CPU ở trạng thỏi nghỉ. Sau đú, tiến trỡnh hƣớng xử lý sẽ di chuyển trở lại hàng đợi sẵn sàng và đƣợc cấp CPU. Một lần nữa, tất cả tiến trỡnh hƣớng nhập/xuất kết thỳc việc chờ trong hàng đợi sẵn sàng cho đến khi tiến trỡnh hƣớng xử lý đƣợc thực hiện. Cú một tỏc dụng phụ (convoy effect) khi tất cả cỏc tiến trỡnh khỏc chờ một tiến

37

Số húa bởi Trung tõm Học liệu http://lrc.tnu.edu.vn

trỡnh lớn trả lại CPU. Tỏc dụng phụ này dẫn đến việc sử dụng thiết bị và CPU thấp hơn nếu cỏc tiến trỡnh ngắn hơn đƣợc cấp trƣớc. (adsbygoogle = window.adsbygoogle || []).push({});

Cú thể kết luận thuật toỏn FCSF là thuật toỏn lập lịch khụng khả dụng cho CPU. Một khi CPU đƣợc cấp phỏt tới một tiến trỡnh, tiến trỡnh đú giữ CPU cho tới khi nú giải phúng CPU bằng cỏch kết thỳc hay yờu cầu nhập/xuất. Thuật toỏn FCFS đặc biệt khụng phự hợp đối với hệ thống chia sẻ thời gian, ở đú mỗi ngƣời dựng nhận đƣợc sự chia sẻ CPU với những khoảng thời gian đều nhau.

2.3.2.2. Lập lịch SJF

Một tiếp cận khỏc đối với việc lập lịch CPU là thuật toỏn lập lịch cụng việc ngắn nhất trƣớc (shortest-job-first-SJF). Thuật toỏn này gỏn tới mỗi tiến trỡnh chiều dài của chu kỳ CPU tiếp theo cho tiến trỡnh sau đú. Khi CPU sẵn sàng, nú đƣợc gỏn tới tiến trỡnh cú chu kỳ CPU kế tiếp ngắn nhất. Nếu hai tiến trỡnh cú cựng chiều dài chu kỳ CPU kế tiếp, lập lịch FCFS đƣợc dựng. Chỳ ý rằng thuật ngữ phự hợp hơn là chu kỳ CPU kế tiếp ngắn nhất (shortest next CPU burst) vỡ lập lịch đƣợc thực hiện bằng cỏch xem xột chiều dài của chu kỳ CPU kế tiếp của tiến trỡnh hơn là toàn bộ chiều dài của nú.

Vớ dụ: Xột tập hợp cỏc tiến trỡnh sau, với chiều dài của thời gian chu kỳ CPU đƣợc tớnh bằng mili giõy: Processes T thực hiện P1 6 P2 8 P3 7 P4 3

Sơ đồ Gantt biểu thị thứ tự thực hiện cỏc tiến trỡnh nhƣ sau:

Theo sơ đồ này, chỳng ta thấy thời gian chờ đợi của cỏc tiến trỡnh là: Processes T thực hiện T đợi

P4 3 0

P1 6 3

P3 7 9

38

Số húa bởi Trung tõm Học liệu http://lrc.tnu.edu.vn

 24 28

Do đú, thời gian chờ đợi trung bỡnh là (3+16+9+0)/4 = 7 mili giõy. Nếu chỳng ta dựng cơ chế lập lịch FCFS thỡ thời gian chờ đợi trung bỡnh là 10.23 mili giõy.

Thuật toỏn SJF cú thể là tối ƣu, trong đú nú cho thời gian chờ đợi trung bỡnh nhỏ nhất cho cỏc tiến trỡnh đƣợc cho. Bằng cỏch chuyển một tiến trỡnh ngắn trƣớc một tiến trỡnh dài thỡ thời gian chờ đợi của tiến trỡnh ngắn giảm hơn so với việc tăng thời gian chờ đợi của tiến trỡnh dài. Do đú, thời gian chờ đợi trung bỡnh giảm.

Khú khăn thật sự với thuật toỏn SJF là làm thế nào để biết chiều dài của yờu cầu CPU tiếp theo. Đối với lập lịch dài trong hệ thống bú, chỳng ta cú thể dựng chiều dài nhƣ giới hạn thời gian xử lý mà ngƣời dựng xỏc định khi gửi cụng việc. Do đú, ngƣời dựng đƣợc cơ động để ƣớc lƣợng chớnh xỏc giới hạn thời gian xử lý vỡ giỏ trị thấp hơn cú nghĩa là đỏp ứng nhanh hơn. Lập lịch SJF đƣợc dựng thƣờng xuyờn trong lập lịch dài.

Mặc dự SJF là tối ƣu nhƣng nú khụng thể đƣợc cài đặt tại cấp lập lịch CPU ngắn vỡ khụng cú cỏch nào để biết chiều dài chu kỳ CPU tiếp theo. Một tiếp cận là khỏc gần đỳng lập lịch SJF đƣợc thực hiện. Chỳng ta cú thể khụng biết chiều dài của chu kỳ CPU kế tiếp nhƣng chỳng ta cú đoỏn giỏ trị của nú. Chỳng ta mong muốn rằng chu kỳ CPU kế tiếp sẽ tƣơng tự chiều dài những chu kỳ CPU trƣớc đú. Do đú, bằng cỏch tớnh toỏn mức xấp xỉ chiều dài của chu kỳ CPU kế tiếp, chỳng ta chọn một tiến trỡnh với chu kỳ CPU đƣợc đoỏn là ngắn nhất.

Chu kỳ CPU kế tiếp thƣờng đƣợc đoỏn nhƣ trung bỡnh số mũ của chiều dài cỏc chu kỳ CPU trƣớc đú. Gọi tn là chiều dài của chu kỳ CPU thứ n và gọi Tn+1 giỏ trị đƣợc đoỏn cho chu kỳ CPU kế tiếp. Thỡ đối với α, với 0 ≤ α ≤ 1, định nghĩa

Tn+1 = α tn + (1- α) Tn

Cụng thức này định nghĩa một giỏ trị trung bỡnh số mũ. Giỏ trị của tn chứa thụng tin mới nhất; Tn lƣu lịch sử quỏ khứ. Tham số α điều khiển trọng số liờn quan giữa lịch sử quỏ khứ và lịch sử gần đõy trong việc đoỏn. Nếu α=0 thỡ Tn+1=Tn và lịch sử gần đõy khụng cú ảnh hƣởng (điều kiện hiện hành đƣợc đảm bảo là ngắn); nếu α =1 thỡ Tn+1=tn

39

Số húa bởi Trung tõm Học liệu http://lrc.tnu.edu.vn

và chỉ chu kỳ CPU gần nhất cú ảnh hƣởng (lịch sử đƣợc đảm bảo là cũ và khụng phự hợp). Thụng dụng hơn, α=1/2 thỡ lịch sử gần đõy và lịch sử quỏ khứ cú trọng số tƣơng đƣơng. Giỏ trị khởi đầu T0 cú thể đƣợc định nghĩa nhƣ một hằng số hay nhƣ toàn bộ giỏ trị trung bỡnh hệ thống. Hỡnh 11 dƣới đõy hiển thị giỏ trị trung bỡnh dạng mũ với α=1/2 và T0=10.

Để hiểu hành vi của giỏ trị trung bỡnh dạng mũ, chỳng ta cú thể mở rộng cụng thức cho Tn+1 bằng cỏch thay thế Tn để tỡm

Tn+1=α tn+(1-α) α tn-1+…+(1-α)j α tn-j+…+(1-α)n - 1

T0

Vỡ cả hai α và (1- α) là nhỏ hơn hay bằng 1, mỗi số hạng tiếp theo cú trọng số nhỏ hơn số hạng trƣớc đú.

Thuật toỏn SJF cú thể khả dụng hoặc khụng khả dụng CPU. Chọn lựa này phỏt sinh khi một tiến trỡnh mới đến tại hàng đợi sẵn sàng trong khi một tiến trỡnh trƣớc đú đang thực thi. Một tiến trỡnh mới cú thể cú chu kỳ CPU tiếp theo ngắn hơn chu kỳ CPU đƣợc để lại của tiến trỡnh thực thi hiện tại. Thuật toỏn SJF khả dụng sẽ khả dụng CPU của tiến trỡnh đang thực thi hiện tại, trong khi thuật toỏn SJF khụng khả dụng sẽ cho phộp tiến trỡnh đang thực thi kết thỳc chu kỳ CPU của nú. Lập lịch SJF khả dụng cũn đƣợc gọi là lập lịch thời gian cũn lại ngắn nhất trƣớc (shortest-remaining-time-first).

Hỡnh 3 :Giỏ trị trung bỡnh dạng mũ

Vớ dụ: Xột 4 tiến trỡnh sau với chiều dài của thời gian chu kỳ CPU đƣợc cho tớnh bằng mili giõy.

40 (adsbygoogle = window.adsbygoogle || []).push({});

Số húa bởi Trung tõm Học liệu http://lrc.tnu.edu.vn P1 0 8

P2 1 4 P3 2 9 P4 3 5

Nếu cỏc tiến trỡnh đi vào hàng đợi sẵn sàng tại những thời điểm và cần thời gian xử lý đƣợc hiển thị trong bảng trờn thỡ lập lịch theo SJF khả dụng đƣợc mụ tả trong lƣu đồ Gantt nhƣ sau:

Theo sơ đồ này, chỳng ta thấy thời gian chờ đợi của cỏc tiến trỡnh là: Processes T thực hiện T đợi

P1 8 9 P2 4 0 P4 5 2 P3 9 15

 26 26

Tiến trỡnh P1 đƣợc bắt đầu tại thời điểm 0, vỡ nú là tiến trỡnh duy nhất trong hàng đợi. Tiến trỡnh P2 đến tại thời điểm 1. Thời gian cũn lại cho P1 (7 mili giõy) là lớn hơn thời gian đƣợc yờu cầu bởi tiến trỡnh P2 (4 mili giõy) vỡ thế tiến trỡnh P1 bị vụ hiệu bởi CPU và tiến trỡnh P2 đƣợc lập lịch. Thời gian chờ trung bỡnh cho vớ dụ này là: ((10-1) + (1-1) + (17-2) + (5-3))/4 = 6.5 mili giõy. Lập lịch SJF khụng khả dụng cho kết quả thời gian chờ đợi trung bỡnh là 7.75 mili giõy.

2.3.2.3. Lập lịch theo độ ưu tiờn

Thuật toỏn SJF là trƣờng hợp đặc biệt của thuật toỏn lập lịch theo độ ƣu tiờn (priority-scheduling algorithm). Độ ƣu tiờn đƣợc gỏn với mỗi tiến trỡnh và CPU đƣợc cấp phỏt tới tiến trỡnh với độ ƣu tiờn cao nhất. Tiến trỡnh cú độ ƣu tiờn bằng nhau đƣợc lập lịch trong thứ tự FCFS.

41

Số húa bởi Trung tõm Học liệu http://lrc.tnu.edu.vn

Thuật toỏn SJF là thuật toỏn ƣu tiờn đơn giản ở đú độ ƣu tiờn p là nghịch đảo với chu kỳ CPU đƣợc đoỏn tiếp theo. Chu kỳ CPU lớn hơn cú độ ƣu tiờn thấp hơn và ngƣợc lại.

Cỏc độ ƣu tiờn thƣờng nằm trong dóy số cố định, chẳng hạn 0 tới 7 hay 0 tới 4,095. Tuy nhiờn, khụng cú sự quy ƣớc chung về 0 là độ ƣu tiờn thấp nhất hay cao nhất. Một vài hệ thống dựng số thấp để biểu diễn độ ƣu tiờn thấp; ngƣợc lại cỏc hệ thống khỏc dựng cỏc số thấp cho độ ƣu tiờn cao. Sự khỏc nhau này cú thể dẫn đến sự lẫn lộn.

Vớ dụ: Xột tập hợp tiến trỡnh sau đến tại thời điểm 0 theo thứ tự P1, P2,…, P5 với chiều dài thời gian chu kỳ CPU đƣợc tớnh bằng mili giõy:

Processes T thực hiện Độ ƣu tiờn P1 10 3 P2 1 1 P3 2 4 P4 1 5 P5 5 2

Sử dụng lập lịch theo độ ƣu tiờn, chỳng ta sẽ lập lịch cỏc tiến trỡnh này theo lƣu đồ Gantt nhƣ sau:

Theo sơ đồ này, chỳng ta thấy thời gian chờ đợi của cỏc tiến trỡnh là: Processes T thực hiện T đợi

P2 1 0

P5 5 1

P1 10 6

P3 2 16

42

Số húa bởi Trung tõm Học liệu http://lrc.tnu.edu.vn

 19 41

Thời gian chờ đợi trung bỡnh là 41/5=8.2 mili giõy.

Độ ƣu tiờn cú thể đƣợc định nghĩa bờn trong hay bờn ngoài. Độ ƣu tiờn đƣợc định nghĩa bờn trong thƣờng dựng định lƣợng hoặc nhiều định lƣợng cú thể đo để tớnh toỏn độ ƣu tiờn của một tiến trỡnh. Vớ dụ, cỏc giới hạn thời gian, cỏc yờu cầu bộ nhớ, số lƣợng tập tin đang mở và tỉ lệ của chu kỳ nhập/xuất trung bỡnh với tỉ lệ của chu kỳ CPU trung bỡnh. Cỏc độ ƣu tiờn bờn ngoài đƣợc thiết lập bởi cỏc tiờu chuẩn bờn ngoài đối với hệ điều hành nhƣ sự quan trọng của tiến trỡnh, loại và lƣợng chi phớ đang đƣợc trả cho việc dựng mỏy tớnh, văn phũng hỗ trợ cụng việc …

Lập lịch theo độ ƣu tiờn cú thể khả dụng hoặc khụng khả dụng CPU. Khi một tiến trỡnh đến hàng đợi 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 đang chạy. Thuật toỏn lập lịch theo độ ƣu tiờn khả dụng sẽ chiếm CPU nếu độ ƣu tiờn của tiến trỡnh mới đến cao hơn độ ƣu tiờn của tiến trỡnh đang thực thi. Thuật toỏn lập lịch theo độ ƣu tiờn khụng khả dụng sẽ đơn giản đặt tiến trỡnh mới tại đầu hàng đợi sẵn sàng.

Vấn đề chớnh với thuật toỏn lập lịch theo độ ƣu tiờn là nghẽn khụng hạn định (indefinite blocking) hay đúi CPU (starvation). Một tiến trỡnh sẵn sàng chạy nhƣng thiếu CPU cú thể xem nhƣ bị nghẽn - chờ đợi CPU. Thuật toỏn lập lịch theo độ ƣu tiờn cú thể để lại nhiều tiến trỡnh cú độ ƣu tiờn thấp chờ CPU khụng hạn định. Trong một hệ thống mỏy tớnh tải cao, dũng đều đặn cỏc tiến trỡnh cú độ ƣu tiờn cao hơn cú thể ngăn chặn việc nhận CPU của tiến trỡnh cú độ ƣu tiờn thấp. Thụng thƣờng, một trong hai trƣờng hợp xảy ra. Cuối cựng, một tiến trỡnh sẽ đƣợc chạy (lỳc 2 a.m chủ nhật là thời điểm cuối cựng hệ thống nạp cỏc tiến trỡnh nhẹ), hay cuối cựng hệ thống mỏy tớnh sẽ đổ vỡ và mất tất cả cỏc tiến trỡnh cú độ ƣu tiờn thấp chƣa đƣợc kết thỳc.

Một giải phỏp cho vấn đề nghẽn khụng hạn định này là sự hoỏ già (aging). Húa già là kỹ thuật tăng dần độ ƣu tiờn của tiến trỡnh chờ trong hệ thống một thời gian dài. Vớ dụ, nếu cỏc độ ƣu tiờn nằm trong dóy từ 127 (thấp) đến 0 (cao), chỳng ta giảm độ ƣu tiờn của tiến trỡnh đang chờ xuống 1 mỗi 15 phỳt. Cuối cựng, thậm chớ một tiến trỡnh với độ ƣu tiờn khởi

43 (adsbygoogle = window.adsbygoogle || []).push({});

Số húa bởi Trung tõm Học liệu http://lrc.tnu.edu.vn

đầu 127 sẽ đạt độ ƣu tiờn cao nhất trong hệ thống và sẽ đƣợc thực thi. Thật vậy, một tiến trỡnh sẽ mất khụng quỏ 32 giờ để đạt đƣợc độ ƣu tiờn từ 127 tới 0.

2.3.2.4. Lập lịch RR

Thuật toỏn lập lịch luõn phiờn (round - robin scheduling algorithm - RR) đƣợc thiết kế đặc biệt cho hệ thống chia sẻ thời gian. Tƣơng tự nhƣ lập lịch FCFS nhƣng sự khả dụng CPU đƣợc thờm vào để chuyển CPU giữa cỏc tiến trỡnh. Đơn vị thời gian nhỏ đƣợc gọi là định mức thời gian (time quantum) hay phần thời gian (time slice) đƣợc định nghĩa. Định mức thời gian thƣờng từ 10 đến 100 mili giõy. Hàng đợi sẵn sàng đƣợc xem nhƣ một hàng đợi vũng. Bộ lập lịch CPU di chuyển vũng quanh hàng đợi sẵn

Một phần của tài liệu Lý thuyết lập lịch và ứng dụng giải pháp quyết bài toán lập lịch cho CPU (Trang 34 - 91)