e Shell sh /bin/shand /sbin/sh Vào khoảng 1972 - 1973, hệ thống được viết lại bằng ngôn ngữ C và thông quaquyết định này, Unix đã trở thành hệ điều hành được sử dụng rộng rãi nhất có thể
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG VIỆT - HÀN
KHOA KHOA HỌC MÁY TÍNH
Giảng viên hướng dẫn : Th.S Phạm Hồ Trọng Nguyên
Đà Nẵng, tháng 11 năm 2022
Trang 2TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ
TRUYỀN THÔNG VIỆT – HÀN KHOA KHOA HỌC MÁY TÍNH
BÁO CÁO LẬP TRÌNH HỆ THỐNG
TÊN ĐỀ TÀI : CPU scheduling algorithms - Write a C program that demonstrate CPU scheduling algorithms
SJF
Trang 3Đà Nẵng, tháng … năm 2022
LỜI CẢM ƠN
Để hoàn thành bài báo Lập trình hệ thống này trước tiên em xin gửi lời cảm
ơn chân thành đến các thầy cô giảng viên trong khoa Khoa học Máy tinh Trường Đạihọc Công Nghệ Thông Tin và Truyền thông Việt - Hàn
Đặc biệt, em xin gửi đến thầy Phạm Hồ Trọng Nguyên, người đã tận tinhhướng dẫn, giúp đỡ trong việc nâng cao kiến thức chuyên môn, phát huy cho chúng
em tinh tự học, tự tim hiểu, từ đó hình thành các phương pháp nghiên cứu, tim tòi,tiếp cận với khoa học công nghệ Đồng thời trau dồi kỹ năng học tập năng động vàsáng tạo
Vì kiến thức còn hạn chế, trong quá trình tim hiểu về đề tài này em không thểtránh những sai sót Em rất mong nhận được những nhận xét, đánh giá, đóng góp ýkiến từ thầy cô để rút ra kinh nghiệm từ bài báo cáo học phần này và chuẩn bị tốtcho những bài báo cáo học phần sau.
Em xin chân thành cảm ơn!
Trang 4NHẬN XÉT(Của giảng viên hướng dẫn)
Trang 52.1.3 Điều phối không độc quyền và điều phối độc quyền 15
Trang 63.1 Lập lịch Non-Preemptive 24
CHƯƠNG 1: TỔNG QUAN VỀ HỆ ĐIỀU HÀNH UNIX
1.1 Hệ Điều hành
UNIX là một hệ điều hành phổ biến, trước đây chúng được sử dụng trong cácminicomputer và các workstation trong các công sở nghiên cứu khoa học Ngày nayUNIX đã trở thành hệ điều hành được dùng cho cả máy tinh cá nhân và phục vụ côngviệc kinh doanh nhờ khả năng mở của nó UNIX giống như các hệ điều hành khác nó
là lớp nằm giữa phần cứng và ứng dụng Nó có chức năng quản lý phần cứng và quản
lý các ứng dụng thực thi Điều khác nhau cơ bản giữa UNIX và bất kỳ hệ điều hànhkhác là sự thực thi bên trong và giao diện Hệ điều hành UNIX thực sự là một hệ điềuhành Nó bao gồm các thành phần trước đây (Phần cơ bản vốn có của hệ điều hànhUnix) và các thành phần mới bổ sung, nó là lớp nằm giữa phần cứng và các ứng dụng.Cấu trúc cơ bản của hệ điều hành Unix như sau:
Hình ảnh:
Trang 7Phần quản lý phần cứng và các ứng dụng thực thi gọi là kernel Trong quản lýcác thiết bị phần cứng UNIX xem mỗi thiết bị này như một file (được gọi là devicefile) Điều này cho phép việc truy nhập các thiết bị giống như việc đọc và ghi trên file.Việc quản lý quyền truy nhập trên các thiết bị thông qua hệ thống kiểm soát bảo mậtquyền hạn Các process đang thực thi được UNIX phân chia tài nguyên bao gồm CPU
và các truy nhập tới phần cứng Khi khởi động máy tinh thì một chương trình unixđược nạp vào trong bộ nhớ chính, và nó hoạt động cho đến khi shutdown hoặc khitắt máy Chương trình này được gọi là kernel, thực hiện chức năng mức thấp và chứcnăng mức hệ thống Kernel chịu trách nhiệm thông dịch và gửi các chỉ thị tới bộ vi xử
lý máy tinh Kernel cũng chịu trách nhiệm về các tiến trình và cung cấp các đầu vào
và ra cho các tiến trình Kernel là trái tim của hệ điều hành UNIX Khi kernel được nạpvào trong bộ nhớ lúc đó nó đã sẵn sàng nhận các yêu cầu từ người sử dụng Đầu tiênngười sử dụng phải login và đưa ra yêu cầu Việc login là để kernel biết ai đã vào hệthống và cách truyền thông với chúng Để làm điều này kernel gọi chạy hai chươngtrình đặc biệt là getty và login Đầu tiên kernel gọi chạy getty Getty hiển thị dấu nhắc
Trang 8và yêu cầu người sử dụng nhập vào Khi nhận được thông tin đầu vào getty gọichương trình login Chương trình login thiết lập định danh cho user và xác địnhquyền của user login Chương trình login kiểm tra mật khẩu trong file mật khẩu Nếumật khẩu không đúng cổng vào sẽ không được thiết lập và bị trả lại điều khiển chogetty Nếu user nhập đúng mật khẩu chương trình login gửi điều khiển tới chươngtrình mà có tên nằm trong password file Thông thường chương trình này là shell.
Hiện nay trên hệ điều hành Unix người ta đang sử dụng chủ yếu ba loại shell sau:
Shell Path Câu lệnh mặc định
(non-root user)
Câu lệnh mặc định (Root user)
Trang 9e Shell
(sh)
/bin/shand /sbin/sh
Vào khoảng 1972 - 1973, hệ thống được viết lại bằng ngôn ngữ C và thông quaquyết định này, Unix đã trở thành hệ điều hành được sử dụng rộng rãi nhất có thểchuyển đổi được và không cần phần cứng ban đầu cho nó Các cải tiến khác cũngđược thêm vào Unix trong một phần của sự thoả thuận giữa AT&T Bell Labs và cộngđồng các trường đại học và học viện Vào năm 1979, phiên bản thứ 7 của Unix đượcphát hành, đó chính là hệ điều hành gốc cho tất cả các hệ thống Unix có hiện nay
Sau thời điểm đó, lịch sử Unix bắt đầu trở nên hơi phức tạp Cộng đồng cáctrường đại học và học viện, đứng đầu là Berkeley, phát triển một nhánh khác gọi làBerkeley Software Distribution (BSD), trong khi AT&T tiếp tục phát triển Unix dướitên gọi là “Hệ thống III” và sau đó là “Hệ thống V” Vào những năm cuối của thập kỷ
1980 cho đến các năm đầu thập kỷ 1990, một “cuộc chiến tranh” giữa hai hệ thốngchính này đã diễn ra hết sức căng thẳng Sau nhiều năm, mỗi hệ thống đi theo nhữngđặc điểm khác nhau Trong thị trường thương mại, “Hệ thống V” đã giành thắng lợi(có hầu hết các giao tiếp theo một chuẩn thông dụng) và nhiều nhà cung cấp phần
Trang 10cứng đã chuyển sang “Hệ thống V” của AT&T Tuy nhiên, “Hệ thống V” cuối cùng đãkết hợp các cải tiến BSD, và kết quả là hệ thống đã trở thành sự pha trộn của 2 nhánhUnix Nhánh BSD không chết, thay vào đó, nó đã được sử dụng rộng rãi trong mụcđích nghiên cứu, cho các phần cứng PC, và cho các server đơn mục đích (vd: nhiềuwebsite sử dụng một nguồn BSD).
Kết quả là có nhiều phiên bản Unix khác nhau, nhưng tất cả đều dựa trênphiên bản thứ bảy ban đầu Hầu hết các phiên bản Unix đều thuộc quyền sở hữu vàđược bảo vệ bởi từng nhà cung cấp phần cứng tương ứng, ví dụ Sun Solaris là mộtphiên bản của “Hệ thống V” Ba phiên bản của BSD của nhánh Unix cuối cùng đã trởthành mã nguồn mở: FreeBSD (tập trung vào sự cài đặt dễ dàng trên phần cứng củadòng máy PC), NetBSD (tập trung vào nhiều kiến trúc CPU khác nhau) và một bảnkhác của NetBSD, OpenBSD (tập trung vào bảo mật)
Năm 2000, Apple đã phát hành Darwin, cũng là một hệ thống Unix, trở thành cốt lõicủa hệ điều hành Mac OS X, sau này được đổi tên thành macOS.[21]
Hệ điều hành Unix được sử dụng rộng rãi trong các servers, workstations, và thiết bị
Trang 11Network Goals UNIX NetWare Windows NT
Interoperability Excellent Good Fair
Accessibility Good Excellent Fair
Third-party utilities available Excellent Good Fair
Directory services Excellent Good Fair
Years of experience >25 >10 <10
Trang 121.4 Lệnh và tiện ích cơ bản
1.4.1 Các lệnh khởi tạo
login Thực hiện login vào một người sử dụng nào đó
su Chuyển sang người sử dụng từ một người sử dụng nào
đó uname Xem một số thông tin về hệ thống
who Hiện lên người đang thâm nhập hệ thống
who am i xem ai đang làm việc tại terminal
exit Thoát khỏi hệ thống
env Xem thông tin tất cả các biển môi trường
man Gọi trình trợ giúp
1.4.2 Các lệnh hiển thị
echo Hiển thị dòng ký tự hay biến lên màn hình
setcolor Đặt màu nền và chữ của màn hình
1.4.3 Định hướng vào ra
cmd>File Chuyển nội dung hiển thị ra file
cmd< file Lấy đầu vào từ file
cmd>>file Nội dung hiển thị được thêm vào file
cmd1 | cmd2 Đầu ra của lệnh cmd1 thành đầu vào của lệnh cmd2
Trang 13mesg Cấm/ cho phép hiển thị thông báo trên màn hình (bởi write hello)
spell Kiểm tra lỗi chính tả
write/ hello Cho phép gửi dòng thông báo đến những người đang sử dụng trong hệ thống
wall Gửi thông báo đến màn hình người sử dụng hệ thống
1.4.5 Các lệnh thao tác với thư mục và file
cp Sao chép một hay nhiều tập tin
find Tìm vị trí của tập tin
mkdir Tạo thư mục
rmdir Xoá thư mục
mv Chuyển/ đổi tên một tập tin
pwd Hiện vị trí thư mục hiện thời
ls Hiện tên file và thuộc tinh của nó
ln Tạo liên kết file (link)
sort Sắp xếp thứ tự tập tin hiển thị
cat Xem nội dung của file
tail Xem nội dung file tại cuối của file
more Hiện nội dung tập tin trình bày dưới dạng nhiều trang
grep Tìm vị trí của chuỗi ký tự
wc Đếm số từ trong tập tin
Trang 14compress Nén file.
uncompress Mở nén
1.4.6 Quản lý tiến trình
kill Hủy bỏ một quá trình đang hoạt động
ps Hiện các tiến trình đang hoạt động và trạng thái của các tiến trình
sleep Ngưng hoạt động của tiến trình trong một khoảng thời gian
1.4.7 Kiểm soát quyền hạn và bảo mật
passwd Thay đổi password hoặc các tham số đối với người sử
dụng chgrp Thay đổi quyền chủ sở hữu file hoặc thư mục
chmod Thay đổi quyền hạn trên file hoặc thư mục
chown Thay đổi người sở hữu tập tin hay thư mục
1.4.8 Các thao tác trên mạng
ping Kiểm tra sự tham gia của các nút trên mạng
netstat Kiểm tra trạng thái của mạng hiện thời
ftp Thực hiện dịch vụ truyền nhận file
telnet Thực hiện kết nối với một hệ thống
Uutry Kết nối UUCP
rcp Sao chép file ở xa
Trang 15- Sự công bằng: các tiến trình chia sẻ CPU một cách công bằng không có
tiến trình nào phải đợi vô hạn để được cấp phát CPU
- Tính hiệu quả: Hệ thống phải tận dụng được CPU 100% thời gian
- Thời gian đáp ứng hợp lý: cực tiểu hóa thời gian hồi đáp cho các tương tác của người sử dụng
- Thời gian lưu lại trong hệ thống: cực tiểu hóa thời gian hoàn tất các tác vụ
xử lý theo lô
- Thông lượng tối đa: cực đại hóa số công việc được xử lý trong một đơn vị thời gian
Tiêu chuẩn tối ưu:
▪Giữ CPU bận nhiều nhất
▪Thông lượng lớn nhất
▪Thời gian hoàn thành nhỏ nhất
▪Thời gian chờ nhỏ nhất
▪Thời gian đáp ứng nhỏ nhất
Trang 162.1.2.Các đặc điểm của tiến trình
Điều phối hoạt động của các tiến trình là một vấn đề rất phức tạp, đòi hỏi hệđiều hành khi giải quyết phải xem xét nhiều yếu tố khác nhau để có thể đạt đượcnhững mục tiêu đề ra Một số đặc tinh của tiến trình cần được quan tâm nhưtiêu chuẩn điều phối:
- Tính hướng xuất/nhập của tiến trình: Khi một tiến trình được nhận CPU, chủ yếu nó chỉ sử dụng CPU đến khi phát sinh một yêu cầu nhập xuất Hoạt động
của
các tiến trình như thế thường bao gồm nhiều lượt sử dụng CPU, mỗi lượt trong mộtthời gian khá ngắn
- Tính hướng xử lý của tiến trình: Khi một tiến trình được nhận CPU, nó có
khuynh hướng sử dụng CPU đến khi hết thời gian dành cho nó? Hoạt động của các tiến trình như thế thường bao gồm một số ít lượt sử dụng CPU, nhưng mỗi lượt trong một thời gian đủ dài
- Tiến trình tương tác hay xử lý theo lô: Người sử dụng theo kiểu tương tác
thường yêu cầu được hồi đáp tức thời đối với các yêu cầu của họ, trong khi các tiến chấp nhận được
- Độ ưu tiên của tiến trình: Các tiến trình có thể được phân cấp theo một số tiêu chuẩn đánh giá nào đó, một cách hợp lý, các tiến trình quan trọng hơn(có độ ưu tiên cao hơn) cần được ưu tiên cao hơn
- Thời gian đã sử dụng CPU của tiến trình: một số quan điểm ưu tiên chọn những tiến trình đã sử dụng CPU nhiều thời gian nhất vì hy vọng chúng sẽ cần ít thời gian nhất để hoàn tất và rời khỏi hệ thống Tuy nhiên cũng có quan điểm cho rằng các tiến trình nhận được CPU trong ít thời gian là những tiến trình đã phải chờ lâu nhất, do vậy ưu tiên chọn chúng
- Thời gian còn lại tiến trình cần để hoàn tất: Có thể giảm thiểu thời gian chờ
trung bình của các tiến trình bằng cách cho các tiến trình cần ít thời gian nhất để hoàn tất được thực hiện trước Tuy nhiên đáng tiếc là rất hiếm khi biết được
Trang 17tiến
Trang 18trình cần bao nhiêu thời gian nữa để kết thúc xử lý.
Trang 192.1.3.Điều phối không độc quyền và điều phối độc quyền
Thuật toán điều phối cần xem xét và quyết định thời điểm chuyển đổi CPU giữa các tiến trình Hệ điều hành các thể thực hiện cơ chế điều phối theo nguyên lý độcquyền hoặc không độc quyền:
Điều phối độc quyền: Nguyên lý điều phối độc quyền cho phép một tiến trình
khi nhận được CPU sẽ có quyền độc chiếm CPU đến khi hoàn tất xử lý hoặc tự
nguyện giải phóng CPU Khi đó quyết định điều phối CPU sẽ xảy ra trong các tinh huống sau:
- Khi tiến trình chuyển từ trạng thái đang xử lý (running) sang trạng thái bị
blocked (ví dụ chờ một thao tác nhập xuất hay chờ một tiến trình con kết
thúc…)
- Khi tiến trình kết thúc
Các giải thuật độc quyền thường đơn giản và dễ cài đặt Tuy nhiên chúng thườngkhông thích hợp với các hệ thống tổng quát nhiều người dùng, vì nếu cho phép mộttiến trình có quyền xử lý bao lâu tùy ý, có nghĩa là tiến trình này có thể giữ CPU mộtthời gian không xác định, có thể ngăn cản những tiến trình còn lại trong hệ thống cómột cơ hội để xử lý
Điều phối không độc quyền: Ngược với nguyên lý độc quyền, điều phối theo
nguyên lý không độc quyền cho phép tạm dừng hoạt động của một tiến trình sẵn sàng xử lý Khi một tiến trình nhận được CPU, nó vẫn được sử dụng CPU đến khi hoàn tất hoặc tự nguyện giải phóng CPU, nhưng khi có một tiến trình khác có độ ưutiên có thể dành quyền sử dụng CPU của tiến trình ban đầu Như vậy là tiến trình
có thể bị tạm dừng hoạt động bất cứ lúc nào mà không được báo trước, để tiến trình khác xử lý Các quyết định điều phối xảy ra khi:
- Khi tiến trình chuyển từ trạng thái đang xử lý(running) sang trạng thái
bị blocked
- Khi tiến trình chuyển từ trạng thái đang xử lý(running) sang trạng thái
ready(vì xảy ra một ngắt)
Trang 20- Khi tiến trình chuyển từ trạng thái chờ (blocked) sang trạng thái ready (ví
dụ một thao tác nhập xuất hoàn tất)
- Khi tiến trình kết thúc
Các thuật toán điều phối theo nguyên tắc không độc quyền ngăn cản được tinh trạngmột tiến trình độc chiếm CPU, nhưng việc tạm dừng một tiến trình có thể dẫn đến các mâu thuẫn trong truy xuất, đòi hỏi phải sử dụng một phương pháp đồng bộ hóa thích hợp để giải quyết
Trong các hệ thống sử dụng nguyên lý điều phối độc quyền có thể xảy ra tinh
trạng các tác vụ cần thời gian xử lý ngắn phải chờ tác vụ xử lý với thời gian rất dàihoàn tất Nguyên lý điều phối độc quyền thường chỉ thích hợp với các hệ xử lý theo lô
Đối với các hệ thống tương tác (time sharing), các hệ thời gian thực (real time),cần phải sử dụng nguyên lý điều phối không độc quyền để các tiến trình quan trọng
có cơ hội hồi đáp kịp thời Tuy nhiên thực hiện hiện điều phối theo nguyên lý không độc quyền đòi hỏi nhưng cơ chế phức tạp trong việc phân định độ ưu tiên, và phát sinh thêm chi phí khi chuyển đổi CPU qua lại giữa các tiến trình
2.1.4 Khái niệm giờ CPU:
- CPU là một loại tài nguyên quan trọng của máy tinh Mọi tiến trình muốn hoạt độngphải có sự phục vụ của CPU Thời gian mà CPU phục vụ cho tiến trình hoạt độngđược gọi là giờ CPU
- Tại mỗi thời điểm chỉ có một tiến trình được phân phối giờ CPU để hoạt động
2.1.5 Khái niệm trạng thái của tiến trình:
Trong chế độ đa chương trình, có ba trạng thái của tiến trình liên quan mật thiết đến giờ CPU bao gồm: Ready, Running và Waiting
- Sẵn sàng (Ready): Là trạng thái mà tiến trình được phân phối đầy đủ mọi tài nguyêncần thiết và đang chờ giờ CPU
- Thực hiện (Running): là trạng thái mà tiến trình được phân phối đầy đủ mọi tài nguyên cần thiết và giờ CPU
Trang 21- Đợi (Waiting): là trạng thái tiến trình không thực hiện được vì thiếu một vài điềukiện nào đó (đợi dữ liệu vào/ ra, đợi tài nguyên bổ sung ) Khi sự kiện mà nó chờđợi xuất hiện, tiến trình sẽ quay lại trạng thái sẵn sàng.
Trang 22- Các tiến trình tuân thủ theo sơ đồ thực hiện sau:
Một tiến trình đang trong trạng thái thực hiện, nó có thể rời khỏi trạng thái bởi một trong ba lý do sau:
- Tiến trình đã hoàn thành công viên, khi đó nó trả lại giờ CPU và chuyển sang chờ xử
2.1.6 Khái niệm lập lịch cho CPU
Để điều khiển tiến trình ở nhiều trạng thái khác nhau, hệ thống thường tổ chức
các từ trạng thái(thực chất là các khối điều khiển tiến trình) để ghi nhận tinh trạng sử dụng tài nguyên và trạng thái tiến trình
Như vậy lập lịch cho CPU có nghĩa là tổ chức một hàng đợi các tiến trình
sẵn sàng để phân phối giờ CPU cho chúng trên độ ưu tiên của các tiến trình; sao