Nội dung chính của đề tài bao gồm: Chương 1: Trình bày một số khái niệm về thuật toán và các nguyên tắc đánh giá độ phức tạp của thuật toán, vấn đề phân lớp các bài toán theo độ phức tạp
Trang 11
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
Nguyễn Văn Kiên
LÝ THUYẾT LẬP LỊCH VÀ ỨNG DỤNG GIẢI QUYẾT BÀI
TOÁN LẬP LỊCH CHO CPU
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
Trang 2
Dựa trên sự chỉ bảo tận tình của T.S Vũ Vinh Quang dựa trên những kiến thức
đã học, và tìm hiểu đƣợc, em đã hoàn thành luận văn theo đúng thời gian quy định Tuy nhiên trong quá trình thiết kế và thực hiện luận văn không tránh khỏi sai sót, do thời gian có hạn và khả năng còn hạn chế Em mong quý thầy cô và các bạn thông cảm và
có những ý kiến quý báu nhằm hoàn thiện hơn cho sản phẩm
Em xin chân thành cảm ơn
Thái nguyên, ngày 18 tháng 7 năm 2013
Học viên
Nguyễn Văn Kiên
Trang 33
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
LỜI CAM ĐOAN
Em xin cam đoan luận văn tốt nghiệp: “Lý thuyết lập lịch và ứng dụng giải quyết bài toán lập lịch cho CPU” do em tự thực hiện dưới sự hướng dẫn của thầy giáo
Vũ Vinh Quang Các kết quả và số liệu hoàn toàn trung thực
Ngoài các tài liệu tham khảo đã dẫn ra ở cuối luận văn em đảm bảo rằng không sao chép các công trình hay luận văn tốt nghiệp của người khác Nếu phát hiện có sự sai phạm với điều cam đoan trên, em xin hoàn toàn chịu trách nhiệm
Trang 44
Số húa bởi Trung tõm Học liệu http://lrc.tnu.edu.vn
MỤC LỤC
LỜI CẢM ƠN 1
LỜI CAM ĐOAN 3
MỤC LỤC 4
LỜI NểI ĐẦU 6
CHƯƠNG 1 8
MỘT SỐ KIẾN THỨC CƠ BẢN VỀ THUẬT TOÁN VÀ ĐỘ PHỨC TẠP THUẬT TOÁN 8
1.1 Khỏi niệm cơ bản 8
1.1.1 Thuật toỏn 8
1.1.2 Khái niệm về độ phức tạp thuật toán 8
1.1.3 Cỏch tớnh độ phức tạp 12
1.2 Vấn đề phõn lớp cỏc bài toỏn 13
1.2.1 Tổng quan về sự phõn lớp cỏc bài toỏn 13
1.2.2 Khỏi niệm dẫn về được 16
1.3 Lớp cỏc bài toỏn P và NP 16
1.3.1 Một số khỏi niệm 16
1.3.2 Một số bài toỏn đó được chứng minh là NP – khú, NP - đầy đủ 21
1.4 Thuật toỏn xấp xỉ 23
1.4.1 Cỏc khỏi niệm 23
1.4.2 Thuật toỏn - xấp xỉ tuyệt đối 24
1.4.3 Thuật toỏn - xấp xỉ 26
CHƯƠNG 2 28
Lí THUYẾT LẬP LỊCH 28
2.1 Mụ hỡnh bài toỏn lập lịch 28
2.2 Cỏc thuật toỏn lập lịch kinh điển 32
2.3 Một số thuật toỏn lập lịch cho CPU 34
2.3.1 Mụ hỡnh bài toỏn lập lịch cho CPU 34
2.3.2 Một số thuật toỏn lập lịch cho CPU 35
Trang 55
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
2.3.2.1 Lập lịch FCFS 35
2.3.2.2 Lập lịch SJF 37
2.3.2.3 Lập lịch theo độ ưu tiên 40
2.3.2.4 Lập lịch RR 43
2.3.2.5 Lập lịch với hàng đợi nhiều cấp 46
2.3.2.6 Lập lịch hàng đợi phản hồi đa cấp 48
CHƯƠNG 3 51
KẾT QUẢ CÀI ĐẶT MỘT SỐ THUẬT TOÁN LẬP LỊCH CPU 51
3.1 Giới thiệu sơ lược về ngôn ngữ lập trình C# và công cụ lập trình Visual Studio 51
3.1.1.Giới thiệu về ngôn ngữ lập trình C# 51
3.1.2 Giới thiệu về công cụ lập trình Visual Studio 54
3.2 Phân tích thuật toán cài đặt CPU 56
3.2.1 Thuật toán FCFS 56
3.2.2 Thuật toán SJF 57
3.2.3 Thuật toán RR 59
3.2.4 Sơ đồ thuật toán CPU 60
3.3 Kết quả cài đặt thuật toán CPU 60
3.3.1 Các thành phần của chương trình 60
3.3.2 Cấu trúc chi tiết 61
3.3.3 Sử dụng chương trình 63
KẾT LUẬN 66
TÀI LIỆU THAM KHẢO 67
PHỤ LỤC 68
I Thuật toán cài đặt 68
II Các hàm và phương thức cơ bản của chương trình 77
Trang 66
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
LỜI NÓI ĐẦU
Máy tính điện tử ra đời vào những năm 40 của thế kỷ XX Ban đầu, phạm vi sử dụng máy tính còn rất hẹp, đa phần chỉ nhằm phục vụ mục đích nghiên cứu khoa học Hơn nữa, để vận hành hệ thống cần phải sử dụng các công cụ phần cứng đặc biệt và thao tác vận hành rất phức tạp
Cùng phát triển song song với sự phát triển của kỹ thuật điện tử, các thế hệ máy tính về sau được cải tiến ngày một tinh vi hơn, có tốc độ xử lý nhanh hơn, kích thước nhỏ gọn hơn, tiêu tốn ít năng lượng hơn và đã làm nên một cuộc cách mạng trong lĩnh vực xử lý, tính toán, điều khiển động…Với các hệ máy tính này đòi hỏi phải có sự điều khiển, vận hành một cách tự động để phát huy hiệu quả của nó một cách tối ưu nhất Như vậy, cần phải có một chương trình phần mềm đảm bảo việc giải quyết các vấn đề trên Đó chính là các hệ điều hành máy tính
Mỗi hệ điều hành đều cần có thuật toán lập lịch cho riêng chúng Thuật toán thường được thực hiện để cân bằng cho hệ thống máy tính được hiệu quả Sự cần thiết của thuật toán lập lịch xuất phát từ yêu cầu cho hầu hết các hệ thống hiện đại để thực thi nhiều hơn một công việc tại cùng một thời điểm và có thể truyền tải nhiều luồng dữ liệu một lúc Trong môi trường thời gian thực, chẳng hạn như các hệ thống nhúng điều khiển tự động trong ngành công nghiệp (Robot) thì lập lịch cũng phải đảm bảo rằng quá trình có thể đáp ứng đúng thời hạn, điều này là rất quan trọng để giữ hệ thống ổn định
Việc nghiên cứu các thuật toán lập lịch dành CPU này mở ra nhiều hướng mới cho khoa học và ứng dụng của nó trong thực tiễn cuộc sống Được sự đồng ý của Thầy hướng dẫn, Em chọn đề tài “Lý thuyết lập lịch và ứng dụng giải quyết bài toán lập lịch cho CPU” làm đề tài luận văn cao học Nội dung chính của đề tài bao gồm:
Chương 1: Trình bày một số khái niệm về thuật toán và các nguyên tắc đánh giá
độ phức tạp của thuật toán, vấn đề phân lớp các bài toán theo độ phức tạp của thuật toán Đầy là phần lý thuyết quan trọng làm cơ sở để nghiên cứu trong các chương tiếp sau của luận văn
Trang 77
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Chương 2: Trình bày lý thuyết cơ bản về bài toán lập lịch, các thuật toán giải bài toán lập lịch cơ bản và trọng tâm là trình bày một số thuật toán lập lịch cho CPU Đây chính là nội dung trọng tâm của luận văn
Chương 3: Đưa ra kết quả cài đặt các thuật toán lập lịch cho CPU trên nền ngôn ngữ Visual Studio 10
Nội dung đề tài là một lĩnh vực rộng và khó, với khoảng thời gian không nhiều cùng với kiến thức của bản thân còn hạn chế, trong đề tài này mới chỉ đề cập đến việc nghiên cứu thuật toán lập lịch chủ yếu là trên một máy và ứng dụng cho lập lịch CPU
Trang 88
Số húa bởi Trung tõm Học liệu http://lrc.tnu.edu.vn
CHƯƠNG 1 MỘT SỐ KIẾN THỨC CƠ BẢN VỀ THUẬT TOÁN
VÀ ĐỘ PHỨC TẠP THUẬT TOÁN
Trong chương 1, luận văn sẽ trỡnh bày một số kiến thức cơ bản về thuật toỏn và
độ phức tạp thuật toỏn, vấn đề phõn lớp cỏc bài toỏn dựa trờn độ phức tạp thuật toỏn Cỏc kiến thức này đó được tham khảo trong cỏc tài liệu [3], [4] Đõy là cỏc kiến thức quan trọng để trỡnh bày tiếp cỏc nội dung trong chương 2 và chương 3 của luận văn
1.1 Khỏi niệm cơ bản
1.1.1 Thuật toỏn
Thuật toỏn để giải một bài toỏn là một dóy hữu hạn cỏc thao tỏc được sắp xếp theo một trỡnh tự xỏc định sao cho sau khi thực hiện dóy thao tỏc đú, từ dữ liệu đầu vào (Input) của bài toỏn, ta nhận được kết quả (Output) cần tỡm
Ta đó biết 2 mụ hỡnh tớnh toỏn là mỏy Turing và mỏy xử lý thuật toỏn viết bằng ngụn ngữ tựa ALGOL Ứng với hai mụ hỡnh tớnh toỏn này cú 2 cỏch biểu diễn thuật toỏn:
+ Thuật toỏn được biểu diễn bằng ngụn ngữ mỏy Turing
+ Thuật toỏn được biểu diễn bằng ngụn ngữ tựa ALGOL
1.1.2 Khái niệm về độ phức tạp thuật toán
a Chi phớ phải trả cho một quỏ trỡnh tớnh toỏn
Trong quỏ trỡnh xử lý thuật toỏn, người ta thường quan tõm tới chi phớ cho thời
gian tớnh toỏn và chi phớ cho khụng gian chứa dữ liệu tớnh toỏn (bộ nhớ)
- Chi phớ thời gian chớnh là tổng thời gian cần thiết để thực hiện xong một quỏ trỡnh tớnh toỏn
+ Với mỏy Turing: Chi phớ thời gian là số bước chuyển hỡnh trạng từ hỡnh trạng đầu q0 đến hỡnh trạng kết thỳc q n
Trang 99
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
+ Với thuật toán tựa Algol: Chi phí thời gian là số các phép tính cơ bản cần thực hiện trong quá trình tính toán
- Chi phí không gian chính là số ô nhớ cần để thực hiện hoàn chỉnh trong quá trình tính toán
Gọi A là một thuật toán tương ứng với một mô hình tính toán, gọi e là bộ dữ liệu vào đã được mã hóa theo cách nào đó Khi đó thuật toán A tính trên bộ dữ liệu e cần phải trả về giá thời gian và giá không gian trong đó ta kí hiệu
+ t e A( ) là giá phải trả về thời gian tính toán + l e A( ) là giá về không gian của bộ nhớ cần thiết sử dụng
Khi đó tổng giá phải trả của thuật toán A tính trên bộ dữ liệu e chính bằng :
T(A)=t e A( )+l e A( )
b Các khái niệm về độ phức tạp của thuật toán
Độ phức tạp trong trường hợp xấu nhất
Cho một thuật toán A với đầu vào n, khi đó:
- Độ phức tạp về bộ nhớ trong trường hợp xấu nhất được định nghĩa là:
L n A( )= max{ ( ) || |l e A e|£ n} tức là chi phí lớn nhất về bộ nhớ
- Độ phức tạp thời gian trong trường hợp xấu nhất được định nghĩa là :
T n A( )= max{ ( ) || |t e A e|£ n} tức là chi phí lớn nhất về thời gian
Trang 1010
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Trang 11Thuật toán đa thức
Thuật toán được gọi là đa thức nếu độ phức tạp về thời gian trong trường hợp xấu nhất của nó là đa thức
Việc đánh giá đúng độ phức tạp của bài toán là một vấn đề hết sức phức tạp Vì vậy người ta thường quan tâm đến việc đánh giá độ phức tạp thời gian trong trường hợp xấu nhất của bài toán
Một số quy ước kí hiệu về độ phức tạp thuật toán
Trang 1212
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
1.1.3 Cách tính độ phức tạp
a Các quy tắc cơ bản
Quy tắc cộng: Nếu T 1(n) và T2(n) là thời gian thực hiện 2 chương trình P1, P2
và T1(n)=O(f(n)), T2(n)=O(g(n)) thì thời gian thực hiện của đoạn 2 chương trình đó nối tiếp nhau là T(n)=O(max(f(n),g(n))
Quy tắc nhân: Nếu T 1(n) và T2(n) là thời gian thực hiện 2 đoạn chương trình P1, P2 và T1(n)=O(f(n)), T2(n)=O(g(n)) thì thời gian thực hiện của 2 đoạn chương trình
đó lồng nhau là T(n)=O(f(n).g(n))
Quy tắc tổng quát để phân tích một chương trình
- Thời gian thực hiện của mỗi lệnh gán, READ, WRITE là O(1)
- Thời gian thực hiện của một chuỗi tuần tự các lệnh được xác định bằng quy tắc cộng,thời gian này là thời gian thi hành một lệnh nào đó lâu nhất trong chuỗi lệnh
- Thời gian thực hiên cấu trúc IF là thời gian lớn nhất thực hiện câu lệnh sau THEN hoặc ELSE và thời gian kiểm tra điều kiện, thường là thời gian kiểm tra điều kiện là O(1)
- Thời gian thực hiện vòng lặp là tổng (trên tất cả các lần lặp) thời gian thực hiện thân vòng lặp Nếu thời gian thực hiện thân vòng lặp không đổi thì thời gian thực hiện vòng lặp là tích số lần lặp với thời gian thực hiện thân vòng lặp
Chú ý: Độ phức tạp thuật toán không chỉ phụ thuộc vào kích thước, thời gian
mà còn phụ thuộc vào tính chất của dữ liệu vào
c Độ phức tạp của các chương trình đệ quy
Với các chương trình chương trình đệ quy, trước hết ta cần thành lập các phương trình đệ quy, sau đó giải các phương trình đệ quy Nghiệm của phương trình đệ quy là thời gian thực hiện chương trình đệ quy đó
Trang 13T(n) là thời gian thực hiện với kích thước dữ liệu nhập là n,
T(k) là thời gian thực hiện với kích thước dữ liệu nhập là k, k<n
Giải phương trình đệ quy:
Phương pháp truy hồi:
Dùng đệ quy để thay thế bất kì T(m) với m<n vào phía phải của phương trình cho đến khi tất cả T(m) với m>1 được thay thế bởi biểu thức của T(1) Vì T(1) luôn là hằng nên ta có công thức của T(n) chứa các số hạng chỉ liên quan tới n và các hằng số
Định lý: (Về nghiệm của phương trình truy hồi)
Cho a, b, c nguyên, dương Khi đó nghiệm của phương trình truy hồi:
aT( nÕu n 1, n c c
O n
ïï ïï
ïïî log c
nÕu a c nÕu a c O(n nÕu a c
1.2 Vấn đề phân lớp các bài toán
1.2.1 Tổng quan về sự phân lớp các bài toán
Độ phức tạp của thuật toán chính là yếu tố cơ sở để phân loại vấn đề bài toán Một cách tổng quát, mọi bài toán đều có thể chia làm 2 lớp lớn là: giải được và không giải được Lớp giải được chia làm 2 lớp con Lớp con đầu tiên là các bài toán có độ phức tạp đa thức: nghĩa là bài toán có thể giải được bằng thuật toán có độ phức tạp đa
Trang 1414
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
thức (hay nói ngắn gọn: lớp đa thức) được xem là có lời giải thực tế Lớp con thứ hai là những bài toán có độ phức tạp không phải là đa thức mà lời giải của nó được xem là thực tế chỉ cho những số liệu đầu vào có chọn lựa cẩn thận và tương đối nhỏ Cuối cùng là những bài toán thuộc loại NP chưa phân loại một cách chính xác là thuộc lớp bài toán có độ phức tạp đa thức hay có độ phức tạp không đa thức
Do đó, ta có sự phân lớp các bài toán do 2 tác giả Cook và Karp đề xuất năm 1970-1971 như sau:
a Lớp bài toán có độ phức tạp đa thức (lớp P) : Là lớp các bài toán có thể giải được
bằng thuật toán đơn định trong thời gian đa thức (Deterministic polynomial)
Lớp bài toán có độ phức tạp đa thức là lớp bài toán có độ phức tạp là O(nk) hoặc nhỏ hơn O(nk) Chẳng hạn như các bài toán có độ phức tạp là O(nlog2n) được xem là các bài toán thuộc lớp đa thức vì nlog2n bị chặn bởi n2 Như vậy các bài toán có độ phức tạp hằng O(1), phức tạp tuyến tính O(n) và logarit O(nlog an) đều là các bài toán thuộc lớp đa thức Còn các bài toán có độ phức tạp lũy thừa O(an) hoặc giai thừa O(n!)
là không thuộc lớp đa thức
Tuy độ phức tạp chỉ là số đo về độ tăng chi phí ứng với độ tăng của dữ liệu đầu vào nhưng nó cũng cho chúng ta một đánh giá tương đối về thời gian thực hiện thuật toán Các thuật toán thuộc lớp đa thức được xem là các bài toán có lời giải thực tế Lời giải thực tế được hiểu rằng là chi phí về mặt thời gian và không gian cho việc giải bài toán là chấp nhận được trong điều kiện hiện tại Bất kỳ một bài toán nào không thuộc lớp này thì đều có chi phí rất lớn
Chính vì lý do này, một bài toán được xem là có thể giải được trên thực tế hay không phụ thuộc vào độ phức tạp của bài toán có phải là đa thức hay không
b Lớp bài toán có độ phức tạp trên đa thức
Trong thực tế, nhiều bài toán thực sự có lời giải lại không thuộc lớp của bài toán
đa thức Ví dụ: Cho một tập hợp có n phần tử, hãy liệt kê tất cả các tập con khác trống của tập hợp này Bằng toán học, người ta đã chứng minh được rằng số tập con của một
Trang 1515
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
tập hợp có n phần tử là 2n-1 Lời giải tuy đã có nhưng khi thể hiện lời giải này bằng bất
kỳ thuật toán nào thì phải tốn ít nhất 2n-1
bước Dễ thấy rằng độ phức tạp của bài toán này cỡ O(2n) Như vậy bài toán này không thuộc lớp của bài toán đa thức Với n vào khoảng 16, số bước cần thiết chỉ khoảng vài chục ngàn là hoàn toàn giải được trên các máy tính hiện nay Nhưng khi phần tử lên tới 32 thì ta đã tốn một số bước lên tới 4 tỷ, chỉ thêm một phần tử nữa thôi chúng ta lại tốn thêm 8 tỷ bước Với số lượng bước như vậy, du chạy trên một siêu máy tính cũng phải tốn một thời gian đáng kể Các bài toán không thuộc lớp đa thức chỉ giải được với một độ lớn dữ liệu đầu vào nhất định
Dĩ nhiên, lớp bài toán NP cũng chứa những bài toán thuộc lớp đa thức thực sự, bởi vì nếu một bài toán được giải bằng thuật toán tự quyết có độ phức tạp đa thức thì chắc chắn khi dùng thuật toán không tự quyết thì cũng sẽ có độ phức tạp đa thức
Như vậy P NP
Trang 1616
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Nhưng hiện nay chưa chứng minh được P là tập con thực sự của NP, vấn đề P =
NP hay không hiện là một trong số các vấn đề mở nổi tiếng nhất và cũng đắt giá nhất trong Toán học và trong Tin học lý thuyết
1.2.2 Khái niệm dẫn về được
Cho hai bài toán A, B
Định nghĩa 1: Bài toán A được gọi là dẫn về được bài toán B sau thời gian đa
thức nếu có một thuật toán đa thức để giải bài toán B thì cũng có một thuật toán đa thức để giải bài toán A
Nghĩa là: Bài toán B “khó hơn” bài toán A hay A “dễ hơn” B hay A là trường hợp riêng của B Kí hiệu A B
Phép quy dẫn có tính chất bắc cầu: AB và BCAC
Tư tưởng quy dẫn đã giải thích vai trò quan trọng của lớp bài toán P Nếu ta có bài toán A thuộc lớp P và một bài toán B có thể quy dẫn về A, thế thì B cũng thuộc vào
P Nghĩa là P là đóng đối với phép quy dẫn
Định nghĩa 2 : Bài toán A được gọi là “khó tương đương” bài toán B nếu AB
và BA Kí hiệu A ~ B
1.3 Lớp các bài toán P và NP
1.3.1 Một số khái niệm
a Bài toán quyết định: Bài toán quyết định là bài toán mà đầu ra chỉ có thể là “Yes”
hoặc “No” (Đúng/sai, 0/1, chấp nhận/từ chối)
Ví dụ: Bài toán về tính nguyên tố: ” Hỏi số nguyên n có là số nguyên tố hay
không?” Khi đó ta có n = 23 là bộ dữ liệu vào “Yes”, còn n = 24 là bộ dữ liệu vào “ No” của bài toán
b Bài toán NP – Khó (NP – Hard)
Trang 1717
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Bài toán A được gọi là NP- khó nếu như tồn tại thuật toán đa thức để giải bài toán A thì kéo theo sự tồn tại thuật toán đa thức để giải mọi bài toán trong NP
Hay: A là NP – Khó nếu như BA, với mọi bài toán B NP
Một cách không hình thức, có thể nói rằng nếu ta có thể giải được một cách hiệu quả một bài toán NP – Khó cụ thể thì ta cũng có thể giải hiệu quả bất kỳ bài toán nào trong NP bằng cách sử dụng thuật toán giải bài toán NP-Khó như là một chương trình con
c Bài toán NP - đầy đủ (NP – complete, NPC)
Một bài toán quyết định A được gọi là NP - đầy đủ nếu như
i) A là bài toán trong NP, ii) Mọi bài toán trong NP đều có thể quy dẫn về A
Lưu ý: Khái niệm NP - đầy đủ đòi hỏi bài toán nhất thiết phải có dạng quyết định
Ta có bức tranh tạm thời đầy đủ về phân lớp các bài toán trên hình sau:
Trang 1818
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Bổ đề: Giả sử bài toán A là NP - đầy đủ, bài toán B thuộc NP và bài toán A quy
dẫn về B Khi đó bài toán B cũng là NP - đầy đủ
Ví dụ: Bài toán xếp balô(KNASPACK) NPCChứng minh bài toán lập lịch
NPC
Bài toán lập lịch (Bài toán phạt):
Input: Có n công việc xử lý trên một máy
c : Thời gian kết thúc công việc i, t i = c i - b i
nếu c i £ d i, công việc i là xử lý đúng hạn
nếu c i > d i, công việc i là xử lý quá hạn(bị phạt)
wi : Tiền phạt
Output: Hãy sắp xếp các công việc theo một thứ tự nhất định để theo đó chờ đến lƣợt xử lý, sao cho lƣợng tiền phạt là ít nhất
0 1
i i i
i i
c d U
U
=
®å
Ta có thể viết bài toán trên ngắn gọn nhƣ sau :
1
| 1 | W
n
i i i
=
å , kí hiệu là phạt
nếu nếu
(đúng hạn) (quá hạn)
Kí hiệu
Trang 1919
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Bài toán này rõ ràng là giải được bằng phương pháp “vét toàn bộ” Nhưng thực
tế khó giải vì nó thuộc lớp NP_đầy đủ
Để chứng minh bài toán “phạt” là NP - đầy đủ, chỉ cần chứng minh rằng bài toán KNAPSACK là bài toán phạt vì ta đã biết KNAPSACK là NP_đầy đủ Nói một cách khác KNAPSACK là trường hợp riêng của bài toán phạt
Nhắc lại bài toán KNAPSACK:
Input: n đồ vật với thể tích a1,a2,…an cần nhét vào balô có thể tích B
Output: Tìm nhóm đồ vật có thể nhét vừa balô trên
Tóm lại ta có thể biểu diễn bài toán như sau:
Input:
- n công việc đồng thời được xử lý r i= 0, "i = 1, 2, ,n
- mỗi công việc i (1 £ i £ n) được biết d i = B t, i = wi = a i,"i = 1, 2, ,n
- máy làm việc liên tục cho đến khi mọi công việc được xử lý xong
- tại mỗi thời điểm máy chỉ xử lý được một công việc
- khi đang xử lý công việc i, không được phép ngắt nó để thực hiện một công việc khác
Trang 2020
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Output: Hãy lập lịch để máy xử lý các công việc sao cho lƣợng tiền phạt là ít nhất:
n
i i i
Trang 21lƣợng tiền nhỏ nhất và bài toán phạt đã giải đƣợc
Chú ý: Nếu tất cả n công việc đều quá hạn thì lƣợng tiền phạt lớn nhất là
1
n i i
a
=å
1.3.2 Một số bài toán đã đƣợc chứng minh là NP – khó, NP - đầy đủ
Để chứng minh một bài toán nào đó là NP - đầy đủ (NP-khó) công việc khó khăn nhất là tìm đƣợc một bài toán NP - đầy đủ có thể quy dẫn về nó Do đó ta cần biết thêm về những bài toán đã đƣợc chứng minh là NP - đầy đủ, cho đến nay danh mục các bài toán NPC trong các lĩnh vực rất đa dạng: Logic Bool, đồ thị, số học, lập lịch, trò chơi, otomat…đã lên đến hàng nghìn Sau đây là một số bài toán đã đƣợc chứng minh
Trang 2222
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Xét các biểu thức Bool là hội của các mệnh đề mà mỗi mệnh đề là tuyển của
đúng 3 toán hạng, mỗi toán hạng là một biến Bool(x) hoặc phủ định của nó ( x) Biểu
thức Bool có dạng như vậy được gọi là công thức 3-CNF (dạng chuẩn tắc hội 3 –
conjunctive normal form)
Ví dụ: Biểu thức (x y z)(x y z)(x y z)(x zu)
Là một 3 - CNF chứa 4 biến Bun x, y, z, u
Bài toán 3-SAT: Cho một công thức 3-CNF, hỏi rằng có tồn tại một bộ
giá trị của các biến sao cho biểu thức nhận giá trị TRUE hay không?
b Bài toán về bè lớn nhất của đồ thị (MaxClique):
Cho đồ thị vô hướng G = (V, E) Một đồ thị con đầy đủ của đồ thị G được gọi là
bè (clique) Ta gọi kích thước của bè là số đỉnh của nó Bè của đồ thị G với kích thước
lớn nhất được gọi là bè lớn nhất(MaxClique)
Ví dụ :
Hình 2 :
c Bài toán Hành trình của người du lịch(Traveling Salesman Problem – TSP)
Input: Cho n thành phố T1, T2, …, Tn Biết chi phí từ thành phố Ti đến thành phố
Trang 2323
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Output: Hãy tìm một hành trình ngắn nhất cho người du lịch, xuất phát từ một thành phố đi thăm tất cả các thành phố còn lại, mỗi thành phố đúng một lần rồi quay trở về thành phố ban đầu
1.4 Thuật toán xấp xỉ
1.4.1 Các khái niệm
Người ta cho rằng ngày nay máy tính với tốc độ rất lớn, không cần quan tâm nhiều tới thuật toán nhanh nhưng với sự kiểm chứng sau đây: Bài toán xử lý với n đối tượng, có 3 thuật toán với 3 mức phức tạp khác nhau, sau 1 giờ xử lý sẽ có 3 kết quả khác nhau
Thuật toán Độ phức tạp Xử lý/ 1 giờ
A O(n) 3,6 triệu đối tượng
B O(nlog2n) 0,2 triệu đối tượng
C O(2n) 21 đối tượng Trong khi đó nhiều bài toán có ý nghĩa thực tế lại thuộc lớp các bài toán NPC và rất quan trọng Nếu một bài toán là NPC ta sẽ không tìm một thuật toán thời gian đa thức Vì vậy, có hai cách tiếp cận để có thể khắc phục tính NPC:
- Nếu dữ liệu đầu vào thực tế là nhỏ thì một thuật toán có thời gian thực hiện hàm mũ có thể hoàn toàn thoả mãn
- Tìm các giải pháp gần tối ưu trong thời gian đa thức
Một thuật toán trả về các kết qủa gần tối ưu được gọi là một thuật toán xấp xỉ
Ta có các khái niệm sau đây:
Thuật toán tối ưu nhanh: Là thuật toán tìm nghiệm tối ưu, nhưng nhanh (độ
phức tạp thời gian là đa thức)
Trang 2424
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Thuật toán tối ưu chậm: Là thuật toán tìm nghiệm tối ưu nhưng chậm (độ
phức tạp thời gian là hàm mũ)
Thuật toán xấp xỉ nhanh (Fasf Approximation Algorithms) Là các thuật toán
tìm ra nghiệm gần đúng của bài toán với độ chính xác nào đó nhưng đủ nhanh Thuật toán như vậy còn được gọi là “Thuật toán xấp xỉ đa thức”
1.4.2 Thuật toán - xấp xỉ tuyệt đối
Cho P là bài toán cực đại hóa:
Gọi H là thủ tục Heuristic, thuật toán tìm một nghiệm nào đó cho P
Kí hiệu OPT(I) là nghiệm tối ưu của bài toán P đối với thể hiện I
Kí hiệu H(I) là nghiệm gần đúng của P do thuật toán H tìm ra
Cho >0, thủ tục Heuristic H được gọi là thuật toán - xấp xỉ tuyệt đối khi và chỉ khi OPT(I) H(I) cho mọi thể hiện I của bài toán P (I: instance) với bộ dữ liệu
Ví dụ: Bài toán lưu trữ tối đa số lượng chương trình (maximum program stored)
Input :
- n chương trình với dung lượng nhớ (độ dài) d1,d2,…, dn
- Hai băng nhớ với dung lương (độ dài) mỗi băng là L
Output: Hãy ghi các chương trình lên 2 băng nhớ với số lượng tối đa, mỗi chương trình chỉ được ghi trên một băng nhớ
Bài toán này đã được chứng minh là NP - đầy đủ Vì vậy viêc tìm thuật toán đa thức cho nó là ít hi vọng
Người ta đã dùng giải pháp tìm thuật toán xấp xỉ nhanh cho phép tìm được nghiệm gần đúng của nó nhưng chỉ mất thời gian đa thức
Chú ý: Mục đích muốn chỉ trên 2 băng nhớ có độ dài L mà lưu trữ được tối đa
các chương trình Theo suy nghĩ thông thường thì hãy ưu tiên các chương trình có độ
Trang 2525
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
dài ngắn hơn, vì vậy đầu tiên là sắp xếp các chương trình theo thứ tự tăng dần các độ dài của chúng Tiếp theo lần lượt xếp theo thứ tự này lên từng băng nhớ một Do 2 băng nhớ có độ dài như nhau nên dùng băng nào trước cũng được Theo thuật toán trên thì dùng băng 1 trước Biến “dodai” ghi lại tổng độ dài băng nhớ dùng để lưu các chương trình
Bài toán này còn được gọi là bài toán cắt n đoạn sắt từ 2 thanh sắt có cùng độ dài L sao cho số lượng đoạn sắt cắt ra là nhiều nhất (Chặt sắt - Cutting problem)
Chứng minh |OPT(I) - H(I)|1
- Đặt k = H(I) là nghiệm của thuật toán Heurtstic k là số lượng chương trình được lưu trữ trên 2 băng nhớ theo cách sắp đặt của thuật toán xấp xỉ trên
- Gọi p là số lượng chương trình được ghi trên 1 băng nhớ có độ dài bằng 2 băng
nói trên Như vậy kOPT(I)p và
p i i
i
i d d
1 2
m i
1
(4)
Tương tự trên băng nhớ 2 : d d L d d k L
k m i i k
k m i
1
(5)
Từ (4), (5) ta có : d L
k i
mâu thuẫn với (3) pk1 (đpcm)
Độ phức tạp thời gian của thuật toán:
Trang 2626
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Thời gian xử lý của thuật toán xấp xỉ trên là O(nlog2n) (chủ yếu là phần sắp xếp các chương trình theo thứ tự của độ dài) Trong khi thuật toán chính xác phải cần có thời gian hàm mũ, mà hiệu quả là 2 nghiệm chỉ chênh nhau có 1 Nếu những bài toán được giải tốt như ví dụ trên thì dùng giải pháp - xấp xỉ tuyệt đối Nhưng không phải khi nào cũng thuận lợi như vậy vì các thuật toán - xấp xỉ tuyệt đối tìm được không nhiều
Hiện nay phần lớn các bài toán NP- đầy đủ thì việc tìm thuật toán - xấp xỉ tuyệt đối cho chúng cũng lại là NP - đầy đủ Chẳng hạn như bài toán xếp balô (KNAPSACK), bài toán người bán hàng (Traverling Salesman Problem), bài toán MaxClique…Chính vì lẽ đó người ta dẫn ra khái niệm thấp hơn gọi là Thuật toán - xấp xỉ
1.4.3 Thuật toán - xấp xỉ
Cho P là bài toán cực đại hóa
Gọi H là thủ tục Heuristic, thuật toán xấp xỉ tìm một nghiệm nào đó cho P
Kí hiệu OPT(I) là nghiệm tối ưu của bài toán P đối với thể hiện I (Instance) H(I) là nghiệm gần đúng của P do H tìm ra
Thủ tục Heuristic H được gọi là thuật toán - xấp xỉ khi và chỉ khi:
)(
)()(
I OPT
I H I OPT
cho I
Độ phức tạp thời gian của thuật toán:
Thời gian xử lý thuật toán xấp xỉ trên chỉ là O(nlogn) (chủ yếu là phần sắp xếp
tỉ số pi/ai), trong khi nếu dùng thuật toán chính xác phải cần thời gian hàm mũ
Ngoài bài toán xếp balô (Knapsack) trên, hiện nay người ta đã tìm được thuật toán - xấp xỉ cho nhiều bài toán khác, đặc biệt trong các vấn đề lập lịch
Trang 2727
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Tuy vậy với nhiều bài toán NP - đầy đủ thì việc tìm thuật toán - xấp xỉ cho chúng cũng lại là NP - đầy đủ Chẳng hạn như bài toán Traveling Salesman Problem(TSP), bài toán quy hoạch nguyên (Integer programming)
Kết luận: Nội dung của chương này đã nêu lên một số khái niệm cơ bản về
thuật toán, sự phân lớp của các bài toán, bài toán NP, thuật toán xấp xỉ Các khái niệm này được phân tích rõ, là nền tảng để đánh giá một thuật toán có khả thi hay không, là
cơ sở để phân tích các thuật toán lập lịch
Trang 28kiến thức này đã được tham khảo trong các tài liệu [1], [6], [7], [8]
2.1 Mô hình bài toán lập lịch
Lịch biểu (Schedule) là một loại kế hoạch để thực hiện một công việc nào đó Vì vậy việc lập lịch (Scheduling) thường là công việc phải thưc hiện hàng ngày trong cuộc sống và điều hành các công việc Ví dụ: lập lịch để các ôtô vào nhà máy sửa chữa, lập lịch để sản xuất các bộ phận máy bay, lập lịch để sắp xếp công việc hàng ngày… Tóm lại, lập lịch là rất cần thiết để các công việc khi xử lý không bị chồng chéo, không bỏ sót Không những thế, việc lập lịch phải đáp ứng những yêu cầu cao hơn như: nâng cao hiệu quả công việc, nâng cao năng suất lao động, giảm thời gian chờ đợi, giảm chi phí phải trả…Do đó cần phải tìm ra các thuật toán, đánh giá các thuật toán đó để tìm ra những thuật toán tối ưu hoặc gần tối ưu giải quyết các bài toán lập lịch thỏa mãn yêu cầu trên
Mô hình tổng quát của bài toán lập lịch được mô tả như sau:
Giả sử ta có n công việc J i i( = 1, 2, , )n cần thiết phải thực hiện trên m máy kí hiệu là M j j( = 1, 2, ,m) Cho biết rằng tại một thời điểm, mỗi công việc được xử lý trên nhiều nhất là 1 máy và mỗi máy có thể xử lý nhiều nhất là 1 công việc
Với mỗi công việc J i i( = 1, 2, , )n được đặc trưng bởi các tham số sau đây:
Trang 29d : Hạn định yêu cầu công việc J i phải hoàn thành
wi : Trọng số của công việc J i
i
b : Thời điểm bắt đầu thực sự xử lý công việc J i
i
c : Thời điểm hoàn thành công việc J i
Đối với mỗi dạng bài toán lập lịch cụ thể, người ta thường xây dựng các dạng hàm mục tiêu khác nhau như:
+ Cực tiểu thời gian hoàn thành các công việc
+ Cực tiểu hóa tổng thời gian trễ của các công việc
+ Cực tiểu hóa tổng só tiền phát của các công việc
+ Cực đại hóa số công việc được thực hiện đúng hạn
…
Trong trường hợp tổng quát, bài toán lập lịch là bài toán khó, chưa có lời giải chính xác với thời gian đa thức Cho đến hiện nay, lý thuyết lập lịch mới chỉ nghiên cứu và chỉ ra một số thuật toán hoặc gần đúng đối với một số trường hợp riêng Trong thực tế, các bài toán lập lịch được phân thành 2 loại:
- Bài toán lập lịch dạng tĩnh (Static): Các công việc và máy đã biết trước
- Bài toán lập lịch dạng động (Dynamic): Các công việc và máy chưa biết trước
Sâu đây chúng ta sẽ nghiên cứu một dạng bài toán lập lịch cụ thể:
Bài toán
Có n ô tô sẵn sàng trước nhà máy để vào sửa chữa, nhà máy được biết về mỗi ô
tô qua 2 tham số:
- Hạn định mà nó phải sửa xong
- Thời gian cần thiết để sửa chữa ôtô đó
Trang 3030
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Nhà máy làm việc không ngừng cho đến khi mọi ô tô sửa xong Tại mỗi thời điểm, nhà máy chỉ xử lí được một ô tô, sửa xong ôtô này mới sửa ô tô khác
Hãy sắp xếp các ô tô theo một thứ tự nhất định để theo đó chờ đến lượt sửa chữa, sao cho số lượng ô tô được sửa đúng hạn là nhiều nhất
Biểu diễn bài toán:
Input:
- n ôtô, thời điểm có thể bắt đầu xử lý là như nhau:
r i = 0, " =i 1, 2, ,n
- Hạn định sửa chữa: di (due date)
- Thời gian cần thiết để sửa: ti (time)
- Nhà máy làm việc liên tục
- Mỗi thời điểm chỉ xử lý được một ôtô
- Sửa xong ôtô này mới được sửa ôtô khác: không cho phép ngắt
Output:
Kí hiệu bi : thời điểm bắt đầu thực sự xử lý ôtô thứ i
ci : thời điểm sửa xong ôtô thứ i
cidi : đúng hạn
ci > di : quá hạn
Wi : Tiền phạt Tìm lịch biểu S sao cho số lượng ôtô được sửa đúng hạn là nhiều nhất (lượng tiền phạt nhỏ nhất)
Ví dụ: Cho các tham số dưới dạng bảng sau:
ôtô Hạn định di Thời gian ti
Trang 3131
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
x1 7 3 x2 5 2
x3 8 4 x4 12 4
x5 17 6
x6 9 2 x7 20 3 Nếu sửa chữa theo thứ tự S = (x1, x2, x3, x4, x5, x6, x7 ) thì số lượng ôtô được sửa đúng hạn chỉ có 2 Vì sau khi sửa xong ôtô x1, x2 thì ôtô x3 đã bị quá hạn (do
t1+t2+t3 >d3) tiếp theo 4 ôtô sau cũng bị quá hạn
Nếu sửa chữa theo thứ tự S = (x2, x1, x6, x4, x5, x3, x7 ) thì số lượng ôtô được sửa đúng hạn là 5
Nhận xét
- Bài toán trên thuộc loại lập lịch tối ưu, với chuẩn tối ưu là số lượng ô tô được
sửa đúng hạn là nhiều nhất (hay lượng tiền phạt là ít nhất :
n
i i
w
1
Min)
- Bài toán luôn giải được vì nó thuộc loại bài toán tổ hợp hữu hạn phần tử nên
có thể dùng phương pháp “vét cạn”: lấy tất cả các hoán vị của n ôtô, chọn hoán vị nào
mà theo thứ tự đó, số lượng ôtô được sửa đúng hạn là nhiều nhất
- Bài toán trên có thể có nhiều lịch biểu tối ưu, tức là có nhiều thứ tự của n ôtô thỏa mãn chuẩn tối ưu
Trang 3232
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
- Bài toán trên đã được chứng minh là NPC Nếu dùng phương pháp “vét cạn”
thì sẽ tốn rất nhiều thời gian (hàm mũ) Do đó ta cần tìm cách xây dựng được lịch biểu
tối ưu trong thời gian đa thức
2.2 Các thuật toán lập lịch kinh điển
Lý thuyết lập lịch hiện nay đã, đang, và sẽ giải quyết được các vấn đề:
- Phân loại bài toán lập lịch
- Nghiên cứu cách thức xây dựng lịch biểu tối ưu theo một tiêu chuẩn nào đó và hơn nữa làm sao để tạo ra nó thật nhanh (thuật toán đơn định, đa thức)
- Với những bài toán chưa tìm ra thuật toán nhanh, xét xem nó có thuộc lớp NPC hay không
- Với những bài toán thuộc lớp NPC thì tìm ra thuật toán đa thức để tạo ra lịch biểu gần tối ưu
- Tìm các ứng dụng của bài toán lập lịch trong thực tế: công nghiệp, giao thông vận tải, hệ điều hành máy tính…
a Thuật toán Johnson
Bài toán :
Mỗi một chi tiết D1,D2, Dn cần phải được lần lượt gia công trên 2 máy A, B Thời gian gia công chi tiết Di trên máy A là ai trên máy B là bi (i=1,2 n) Hãy tìm lịch biểu (trình tự gia công) các chi tiết trên hai máy sao cho việc hoàn thành gia công tất cả các chi tiết là sớm nhất
Thuật toán Johnson:
Bước 1: Chia các chi tiết thành 2 nhóm: nhóm N1, gồm các chi tiết Di thoả mãn
ai < bi, tức là min(ai,bi) = ai và nhóm N2 gồm các chi tiết Di thoả mãn ai >bi tức là min(ai,bi)=bi Các chi tiết Di thoả mãn ai =bi xếp vào nhóm nào cũng được
Trang 3333
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Bước 2: Sắp xếp các chi tiết trong N1 theo chiều tăng của các ai và sắp xếp các chi tiết trong N2 theo chiều giảm của các bi nối N2 vào đuôi N1, dãy thu được (đọc từ trái sang phải) sẽ là lịch gia công
b Thuật toán Moore
Bài toán:
Có n ôtô đưa vào xưởng sửa chữa được đánh số thứ tự 1, 2 , n Ôtô phải sửa chữa trong thời gian ti và thời điểm phải bàn giao là di Mỗi thời điểm xưởng chỉ sửa chữa một cái, xưởng sửa chữa không ngừng và thời điểm bắt đầu sửa chữa là 0 Hãy đưa ra một thứ tự sữa chữa sao cho số lượng ôtô đúng hạn là lớn nhất
Sắp xếp theo thứ tự tăng dần của thời điểm bàn giao, duyệt từ đầu cho đến khi gặp ôtô quá hạn đầu tiên (Giả sử là ôtô thứ k) Tìm từ đầu cho đến ôtô thứ k, ôtô nào có
ti lớn nhất (Giả sử đó là ôtô thứ m) Nếu ôtô này đã được chuyển một lần rồi thì dừng chương trình, còn nếu không thì ta chuyển ôtô này xuống cuối Rồi trở lại bước 2
Thuật toán Moore : Tìm lịch biểu trong thời gian đa thức
Bước 1: Sắp xếp các ôtô theo thứ tự không giảm của các di : Thứ tự các ôtô
x1,x2,…xn mà d1d2 dn ta gọi là dãy hiện thời
Bước 2 : Trên dãy hiện thời, tìm ôtô đầu tiên quá hạn, giả sử đó là ôtô thứ q Trong số q ôtô đầu tiên hãy loại ra ôtô nào có thời gian sửa chữa t nhiều nhất (nếu có nhiều ôtô như vậy thì chỉ chọn một)
Bước 3 : lặp lại cho đến khi trong dãy hiện thời không còn ôtô nào quá hạn Bước 4 : Các ôtô bị loại ra trước đó được xếp vào sau dãy hiện thời tại cuối bước 3
Sau bước 4 ta có một thứ tự các ôtô (lịch biểu) cần tìm
Độ phức tạp của thuật toán phụ thuộc bước sắp xếp các công việc
Tóm lại: Các đối tượng được xử lý như “ôtô”, “chương trình”… được quy về
tên chung là “công việc” (job) Các phương tiện xử lý như “nhà máy”, “máy tính”…,
Trang 3434
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
kể cả con người có tên chung là “máy” (machine) Khi đó ta có các quan niệm rộng hơn về bài toán lập lịch
2.3 Một số thuật toán lập lịch cho CPU
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ố đó
Trang 3535
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
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
Trang 3636
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
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
Trang 3737
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
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:
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
Trang 38Khó 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
Trang 3939
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
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
Processes T đến T thực hiện
Trang 4040
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