CHƢƠNG 4 LẬP LỊCH
4.1 Lập lịch cho tiến trớnh
4.1.2 Cỏc dạng điềuđộ
Trong một số hệ thống, điều độ tiến trỡnh được phõn chia thành một số mức khỏc nhau, bao gồm: điều độ dài hạn, điều độ trung hạn, và điều độ ngắn hạn. Theo như tờn gọi, điều độ dài hạn được thực hiện cho những khoảng thời gian dài và ớt diễn ra nhất. Ngược lại, điều độ ngắn hạn diễn ra thường xuyờn, điều độ trung hạn chiếm vị trớ ở giữa.
Điều độ dài hạn được thực hiện khi mới tạo ra tiến trỡnh. Hệ điều hành quyết định xem tiến
trỡnh cú được thờm vào danh sỏch đang hoạt động hay khụng. Nếu được chấp nhận, trong hệ thống sẽ thờm tiến trỡnh mới. Ngược lại, tiến trỡnh sẽ phải chờ tới thời điểm khỏc để được tạo ra và thực hiện. Điều độ dài hạn ảnh hưởng tới mức độ đa chương trỡnh, tức là số lượng tiến trỡnh tối đa trong hệ thống. Trong mỏy tớnh cỏ nhõn, người dựng ớt cảm nhận được ảnh hưởng của điều độ dài hạn do hầu hết tiến trỡnh đều được chấp nhận tạo mới. Đối với những mỏy tớnh lớn được sử dụng chung, điều độ dài hạn đúng vai trũ quan trọng và rừ ràng hơn.
Điều độ trung hạn là quyết định tiến trỡnh cú được cấp bộ nhớ để thực hiện khụng. Để thực
hiện được, tiến trỡnh cần được tải vào bộ nhớ hoàn toàn, hoặc một phần nếu sử dụng bộ nhớ ảo. Trong một số trường hợp như khi mới khởi tạo và bộ nhớ được nạp trang theo nhu cầu, hay khi tiến trỡnh bị trao đổi ra đĩa (swapping) để nhường chỗ cho tiến trỡnh khỏc, hệ điều hành cần quyết định cú cho phộp tải tiến trỡnh vào bộ nhớ để thực hiện khụng. Điều độ trung hạn cũng ảnh hưởng tới mức độ đa chương trỡnh và được quyết định dựa trờn mức độ ưu tiờn cựng tỡnh trạng hệ thống. Cỏc tiến trỡnh đó được tạo mới và được tải vào bộ nhớ do kết quả điều độ dài hạn và trung hạn được xếp vào hàng đời để điều độ ngắn hạn.
Điều độ ngắn hạn là quyết định tiến trỡnh nào được cấp CPU để thực hiện. Việc điều độ ngắn
hạn được thực đối với những tiến trỡnh đang ở trạng thỏi sẵn sàng. Hệ điều hành lựa chọn một tiến trỡnh đang trong bộ nhớ và sẵn sàng thực hiện để cấp phỏt CPU. Việc lựa chọn tiến trỡnh được thực hiện theo một thuật toỏn nào đú.
Cỏc dạng điều độ gắn liền với việc chuyển tiến trỡnh tự trạng thỏi này sang trạng thỏi khỏc. Hỡnh 2.9 minh họa quan hệ giữa trạng thỏi tiến trỡnh và ba dạng điều độ trờn.
Trong cỏc phần tiếp theo, chỳng ta chỉ xem xột vấn đề điều độ ngắn hạn. Vỡ vậy, nếu khụng núi gỡ thờm, điều độ tiến trỡnh được hiểu là điều độ ngắn hạn hay điều độ CPU.
Điều độ cú phõn phối lại
Tựy thuộc vào việc hệ điều hành cú thể thực hiện điều độ khi một tiến trỡnh đang sử dụng CPU hay khụng, ta phõn biệt điều độ khụng phõn phối lại (nonpreemptive) và điều độ cú phõn phối lại (preemptive).
Điều độ cú phõn phối lại là kiểu điều độ trong đú hệ điều hành cú thể sử dụng cơ chế ngắt để
thu hồi CPU của một tiến trỡnh đang trong trạng thỏi chạy, tức là tiến trỡnh đang sử dụng CPU để thực hiện lệnh của mỡnh. Với kiểu điều độ này, hệ điều hành cú thể phõn phối lại CPU một cỏch chủ động, khụng cần chờ cho tới khi tiến trỡnh đang chạy kết thỳc hoặc chuyển sang trạng thỏi chờ đợi.
Điều độ khụng phõn phối lại là kiểu điều độ trong đú tiến trỡnh đang ở trạng thỏi chạy sẽ được
sử dụng CPU cho đến khi xảy ra một trong cỏc tỡnh huống sau: tiến trỡnh kết thỳc, hoặc tiến trỡnh phải chuyển sang trạng thỏi chờ đợi do thực hiện yờu cầu vào/ra hoặc lời gọi hệ thống, hoặc chờ đợi tớn hiệu đồng bộ từ tiến trỡnh khỏc. Điều độ khụng phõn phối lại cũn gọi lại điều
độ hợp tỏc (cooperative), do việc điều độ chỉ cú thể thực hiện khi tiến trỡnh thể hiện thỏi độ
hợp tỏc và nhường lại CPU do khụng cần dựng nữa. Trong trường hợp tiến trỡnh khụng hợp tỏc và chiếm CPU vụ hạn, vớ dụ khi sử dụng vũng lặp vụ hạn khụng chứa lời gọi hệ thống, cỏc tiến trỡnh khỏc sẽ khụng bao giờ được cấp CPU.
Cỏc phiờn bản đầu tiờn của Windows là Windows 3.x sử dụng điều độ khụng phõn phối lại. Windows 95, NT và cỏc phiờn bản sau sử dụng điều độ cú phõn phối lại, cho phộp thực hiện đa chương trỡnh và chia sẻ thời gian đỳng nghĩa và tin cậy hơn.
So với điều độ khụng phõn phối lại, điều độ cú phõn phối lại cú nhiều ưu điểm hơn do hệ điều hành chủ động hơn, khụng phụ thuộc vào hoạt động của tiến trỡnh. Chỉ cú điều độ phõn phối lại mới đảm bảo chia sẻ thời gian thực sự. Tuy nhiờn, điều độ cú phõn phối lại đũi hỏi phần cứng phải cú bộ định thời gian (timer) và một số hỗ trợ khỏc.
Bờn cạnh đú, điều độ cú phõn phối lại cũng làm cho vấn đề quản lý tiến trỡnh phức tạp hơn, đặc biệt trong trường hợp cỏc tiến trỡnh chia sẻ dữ liệu dựng chung hoặc cú cạnh tranh về tài nguyờn. Lấy vớ dụ hai tiến trỡnh cựng sử dụng một mảng dữ liệu chung. Do cú phõn phối lại, CPU cú thể được thu hồi từ tiến trỡnh thứ nhất để cấp cho tiến trỡnh thứ hai khi chưa tiến trỡnh thứ nhất chưa cập nhật xong dữ liệu. Nếu tiến trỡnh thứ hai đọc dữ liệu khi đú sẽ nhận được dữ liệu khụng nhất quỏn.
4.1.3 Cỏc tiờu chỡ lập lịch
Cỏc tiến trỡnh trong trạng thỏi sẵn sàng được xếp vào hàng đợi chờ được điều độ, tức là chờ được cấp CPU để thực hiện. Hệ điều hành sử dụng thuật toỏn điều độ để lựa chọn tiến trỡnh được cấp CPU tiếp theo. Mỗi thuật toỏn thường tốt cho một số trường hợp cụ thể tựy vào điều kiện hệ thống và tiờu chớ điều độ.
Cú nhiều tiờu chớ được sử dụng khi điều độ CPU và đỏnh giỏ thuật toỏn. Một số tiờu chớ chỳ trọng tới việc khai thỏc hiệu quả hệ thống trong khi một số tiờu chớ tập trung nõng cao tớnh tiện lợi cho người dựng. Sau đõy là một số tiờu chớ thường sử dụng:
Đối với hướng người sử dụng (User-oriented)
- Thời gian đỏp ứng (Response time): khoảng thời gian process nhận yờu
cầu đến khi yờu cầu đầu tiờn được đỏp ứng (time-sharing, interactive system) -> cực tiểu.
- Thời gian quay vũng (hoàn thành) (Turnaround time): khoảng thời gian
từ lỳc một process được nạp vào hệ thống đến khi process đú kết thỳc -> cực tiểu.
- Thời gian chờ (Waiting time): tổng thời gian một process đợi trong
ready queue -> cực tiểu.
Đối với hướng hệ thống (System-oriented)
- Sử dụng CPU (processor utilization): định thời sao cho CPU càng bận
càng tốt -> cực đại.
- Cụng bằng (fairness): tất cả process phải được đối xử như nhau.
- Thụng lƣợng (throughput): số process hoàn tất cụng việc trong một đơn
vị thời gian -> cực đại.
4.1.4 Preemptive và Nonpreemptive
Scheduling
Hàm định thời được thực hiện khi
(1) Chuyển từ trạng thỏi running sang waiting (2) Chuyển từ trạng thỏi running sang ready (3) Chuyển từ trạng thỏi waiting, new sang ready (4) Kết thỳc thực thi
Trong đú, lập lịch chuyển trạng thỏi (1) và (4) là khụng được ưu tiờn trước – (nonpreemptive) – độc quyền. Nghĩa là khụng cú sự lựa chọn, tiến trỡnh phải chọn 1 tiến trỡnh mới để thực hiện. Tiến trỡnh được phõn phối CPU, CPU được sử dụng cho đến khi nú giải phúng CPU bằng cỏch kết thỳc hoặc chuyển sang trạng thỏi chờ, cỏc tiến trỡnh sẵn sàng nhường điều khiển của CPU.
Lập lịch khi chuyển trạng thỏi (2), (3) được gọi là định thời preemptive – khụng độc quyền: tiến trỡnh cú thể đẩy tiến trỡnh khỏc để dành quyền điều khiển CPU
4.1.5 Cỏc thuật toỏn điều độ
Nhiều thuật toỏn điều độ tiến trỡnh được đề xuất và sử dụng trờn thực tế. Sau đõy là những thuật toỏn tiờu biểu hoặc thường gặp nhất.
4.1.5.1 Thuật toỏn đến trƣớc phục
vụ trƣớc - FCFS
Đến trước phục vụ trước (First Come First Served – viết tắt là FCFS) là phương phỏp điều độ
đơn giản nhất, cả về nguyờn tắc và cỏch thực hiện. Tiến trỡnh yờu cầu CPU trước sẽ được cấp CPU trước.
Hệ điều hành xếp tiến trỡnh sẵn sàng vào hàng đợi FIFO. Tiến trỡnh mới được xếp vào cuối hàng đợi, khi CPU được giải phúng, hệ điều hành sẽ lấy tiến trỡnh từ đầu hàng đợi và cấp CPU cho tiến trỡnh đú thực hiện.
Mặc dự đơn giản và đảm bảo tớnh cụng bằng, FCFS cú thời gian chờ đợi trung bỡnh của tiến trỡnh lớn do phải chờ đợi tiến trỡnh cú chu kỳ CPU dài trong trường hợp những tiến trỡnh như vậy nằm ở đầu hàng đợi. Để minh họa, ta xột vớ dụ: cho 3 tiến trỡnh với thứ tự xuất hiện và độ dài chu kỳ CPU như sau:
Thời gian chờ đợi của P1, P2, P3 lần lượt là 0, 10, và 14. Thời gian chờ đợi trung bỡnh = (0 + 10 + 14)/3 = 8.
Cú thể thấy thời gian chờ đợi trung bỡnh như vậy là rất lớn, chẳng hạn so với trường hợp tiến trỡnh được cấp CPU theo thứ tự P3, P2, P1. Khi đú thời gian chờ đợi trung bỡnh giảm xuống chỉ cũn (6 + 2 + 0)/3 = 2,67.
Cần lưu ý rằng việc tăng thời gian chờ đợi CPU của tiến trỡnh ảnh hưởng rất lớn tới hiệu suất chung của hệ thống do nhiều tiến trỡnh phải dồn lại chờ một tiến trỡnh trong khoảng thời gian quỏ lõu, dẫn tới tỡnh trạng khụng tiến trỡnh nào thực hiện được cụng việc của mỡnh, kể cả vào ra. Kết quả là toàn hệ thống phải dừng lại chờ giải phúng CPU.
Thuật toỏn FCFS thụng thường là thuật toỏn điều độ khụng phõn phối lại. Sau khi tiến trỡnh được cấp CPU, tiến trỡnh đú sẽ sử dụng CPU cho đến khi kết thỳc hoặc phải dừng lại để chờ kết quả vào ra. Để cú thể sử dụng được trong những hệ thống chia sẻ thời gian, thuật toỏn đến trước phục vụ trước được cải tiến để thờm cơ chế phõn phối lại. Ta sẽ xem xột thuật toỏn điều độ như vậy trong một phần sau.
4.1.5.2 Điều độ quay vũng - RR
Điều độ quay vũng (round robin - RR) là phiờn bản sửa đổi của FCFS được dựng cho cỏc hệ
chia sẻ thời gian. Điều độ quay vũng tương tự FCFS nhưng cú thể cơ chế phõn phối lại bằng cỏch sử dụng ngắt của đồng hồ. Hệ thống định nghĩa những khoảng thời gian nhỏ gọi là lượng
tử thời gian (time quantum) hay lỏt cắt thời gian (time slice) cú độ dài từ vài mili giõy tới vài
trăm mili giõy tựy vào cấu hỡnh cụ thể. Tiến trỡnh sẽ lần lượt được cấp CPU trong những khoảng thời gian như vậy trước khi bị ngắt và CPU được cấp cho tiến trỡnh khỏc.
Giống như FCFS, tiến trỡnh sẵn sàng được xếp vào hàng đợi sao cho tiến trỡnh đến sau được thờm vào cuối hàng. Khi CPU được giải phúng, hệ điều hành đặt thời gian của đồng hồ bằng độ dài lượng tử, lấy một tiến trỡnh ở đầu hàng đợi và cấp CPU cho tiến trỡnh.
Sau khi được cấp CPU, tiến trỡnh chuyển sang trạng thỏi chạy. Nếu tiến trỡnh kết thỳc chu kỳ sử dụng CPU trước khi hết thời gian lượng tử, tiến trỡnh sẽ giải phúng CPU và trả lại quyền điều khiển cho hệ điều hành. Trong trường hợp ngược lại, khi hết độ dài lượng tử, đồng hồ sẽ sinh ngắt. Tiến trỡnh đang thực hiện phải dừng lại và quyền điều khiển chuyển cho hàm xử lý
ngắt của hệ điều hành. Hệ điều hành thực hiện việc chuyển đổi ngữ cảnh và chuyển tiến trỡnh về cuối hàng đợi sau đú chọn một tiến trỡnh ở đầu và lặp lại quỏ trỡnh trờn.
Điều độ quay vũng cho phộp cải thiện thời gian đỏp ứng của tiến trỡnh so với FCFS nhưng vẫn cú thời gian chờ đợi trung bỡnh tương đối dài. Sau đõy là minh họa cho phương phỏp điều độ này với ba tiến trỡnh P1, P2, P3 lấy từ vớ dụ ở phần trước và lượng tử thời gian cú độ dài bằng 2.
Thời gian chờ đợi của P1, P2, P3 lần lượt là 6, 6, và 4. Thời gian chờ đợi trung bỡnh = (6 + 6 + 4)/3=5,33.
Một vấn đề quan trọng khi điều độ quay vũng là lựa chọn độ dài lượng tử thời gian. Nếu lượng tử ngắn, thời gian đỏp ứng sẽ giảm. Tuy nhiờn, việc chuyển đổi tiến trỡnh diễn ra thường xuyờn đũi hỏi nhiều thời gian hơn cho việc chuyển đổi ngữ cảnh. Độ dài lượng tử nờn lựa chọn lớn hơn thời gian cần thiết để tiến trỡnh thực hiện một thao tỏc tương tỏc tiờu biểu hoặc. Ngược lại, lượng tử càng lớn càng tốn ớt thời gian chuyển đổi giữa cỏc tiến trỡnh nhưng tớnh đỏp ứng cũng kộm đi. Khi lượng tử lớn tới một mức nào đú, điều độ quay vũng sẽ trở thành FCFS.
4.1.5.3 Điều độ ƣu tiờn tiến trớnh ngắn nhất - SPF
Một phương phỏp điều độ cho phộp giảm thời gian chờ đợi trung bỡnh là điều độ ưu tiờn tiến trỡnh ngắn nhất trước (Shortest Process First - SPF), hay cũn cú cỏc tờn gọi khỏc như cụng
việc ngắn nhất trước (Shortest Job Fist), tiến trỡnh ngắn nhất tiếp theo (Shortest Process Next). Phương phỏp điều độ này lựa chọn trong hàng đợi tiến trỡnh cú chu kỳ sử dụng CPU tiếp theo ngắn nhất để phõn phối CPU. Trong trường hợp cú nhiều tiến trỡnh với chu kỳ CPU tiếp theo bằng nhau, tiến trỡnh đứng trước sẽ được chọn.
Ưu điểm lớn nhất của SPF so với FCFS là thời gian chờ đợi trung bỡnh nhỏ hơn nhiều. Xột vớ dụ điều độ cho cỏc tiến trỡnh như ở phần trờn nhưng sử dụng SPF.
Thời gian chờ đợi trung bỡnh = (6 + 2 +0)/3 = 2,67.
Mặc dự điều độ ưu tiờn tiến trỡnh ngắn nhất cú thời gian chờ đợi trung bỡnh tối ưu, phương phỏp này rất khú sử dụng trờn thực tế do đũi hỏi phải biết trước độ dài chu kỳ sử dụng CPU tiếp theo của tiến trỡnh. Cú hai cỏch để giải quyết phần nào khú khăn này. Cỏch thứ nhất được ỏp dụng đối với hệ thống xử lý theo mẻ như tại cỏc trung tõm tớnh toỏn hiệu năng cao hiện nay. Quản trị hệ thống căn cứ vào thời gian đăng ký tối đa do lập trỡnh viờn cung cấp để xếp những ứng dụng cú thời gian đăng ký ngắn hơn lờn trước. Lưu ý, đõy là thời gian thực hiện cả ứng dụng chứ khụng phải một chu kỳ sử dụng CPU cụ thể.
Cỏch thứ hai là dự đoỏn độ dài chu kỳ sử dụng CPU tiếp theo. Cỏch dự đoỏn đơn giản nhất là dựa trờn độ dài trung bỡnh cỏc chu kỳ CPU trước đú để dự đoỏn độ dài chu kỳ tiếp theo và ra quyết định cấp CPU.
Điều độ ưu tiờn tiến trỡnh ngắn nhất trước là điều độ khụng cú phõn phối lại. Nếu một tiến trỡnh được cấp CPU, tiến trỡnh sẽ thực hiện cho tới khi khụng cần CPU nữa, kể cả trong trường hợp xuất hiện tiến trỡnh mới với chu kỳ sử dụng CPU ngắn hơn chu kỳ CPU cũn lại của tiến trỡnh đang thực hiện. Trong phần tiếp theo ta sẽ xem xột việc thờm cơ chế phõn phối lại cho điều độ ưu tiờn tiến trỡnh ngắn nhất trước.
4.1.5.4 Điều độ ƣu tiờn thời gian cũn
lại ngắn nhất - SRTF
Phiờn bản ưu tiờn tiến trỡnh ngắn nhất cú thờm cơ chế phõn phối lại được gọi là điều độ ưu
64
trỡnh mới xuất hiện trong hàng đợi, hệ điều hành so sỏnh thời gian cũn lại của tiến trỡnh đang chạy với thời gian cũn lại của tiến trỡnh mới xuất hiện. Nếu tiến trỡnh mới xuất hiện cú thời gian cũn lại ngắn hơn, hệ điều hành sẽ thu hồi CPU của tiến trỡnh đang chạy và phõn phối cho tiến trỡnh mới.
4.1.5.5 Điều độ cú mức ƣu tiờn
Theo phương phỏp này, mỗi tiến trỡnh cú một mức ưu tiờn. Tiến trỡnh được ưu tiờn hơn sẽ được cấp CPU trước. Cỏc tiến trỡnh cú mức ưu tiờn như nhau được điều độ theo nguyờn tắc FCFS.
Cú thể thấy hai phương phỏp STF và SRTF ở trờn là trường hợp riờng của điều độ cú mức ưu tiờn trong đú tiến trỡnh cú thời gian chu kỳ CPU hoặc thời gian chu kỳ CPU cũn lại ngắn hơn được ưu tiờn hơn. Trong trường hợp tổng quỏt, mức ưu tiờn được xỏc định theo nhiều tiờu chớ khỏc nhau như yờu cầu bộ nhớ, hạn chế thời gian… Mức ưu tiờn cũng cú thể do người quản trị hệ thống xỏc định dựa trờn mức độ quan trọng của tiến trỡnh.
Hệ điều hành quy định mức ưu tiờn dưới dạng số nguyờn trong một khoảng nào đú, vớ dụ từ 0 đến 31. Tuy nhiờn, khụng cú quy tắc chung về việc mức ưu tiờn cao tương ứng với số nhỏ hay số to. Một số hệ điều hành coi số 0 ứng với mức ưu tiờn cao nhất trong khi một số hệ điều hành sử dụng 0 cho mức ưu tiờn thấp nhất.
Vớ dụ sau minh họa cho điều độ cú mức ưu tiờn, trong đú 0 ứng với mức ưu tiờn cao nhất và cỏc số lớn hơn tương ứng với mức ưu tiờn thấp hơn.
Điều độ cú mức ưu tiờn vừa trỡnh bày ở trờn là điều độ khụng phõn phối lại. Tuy nhiờn cú thể thờm cơ chế phõn phối lại cho phương phỏp này. Nếu tiến trỡnh mới xuất hiện cú mức ưu tiờn cao hơn tiến trỡnh đang chạy, hệ điều hành sẽ thu hồi CPU và phõn phối cho tiến trỡnh mới.