1 1 Nguyên lý hệđiềuhành NguyễnHải Châu Khoa Công nghệ thông tin Trường Đạihọc Công nghệ 2 Khái niệmtiếntrình 3 Tiếntrìnhlàgì? z Thuật ngữ: Process (tiến trình/quá trình) z Là một chương trình đang được thực hiện z Đượcxemlàđơnvị làm việc trong các HĐH z Có hai loạitiến trình: z Tiếntrìnhcủa HĐH z TiếntrìnhcủaNSD 4 Tiếntrìnhgồmcó… z Đoạnmãlệnh (code, có sách gọilàtext) z Đoạndữ liệu z Đoạnngănxếp và heap (stack/heap) z Các hoạt động hiệntại đượcthể hiện qua con đếmlệnh (IP) và nội dung các thanh ghi (registers) củabộ xử lý z Chú ý: z Tiếntrìnhlàthựcthể chủđộng z Chương trình là thựcthể bịđộng 5 Trạng thái tiếntrình terminated new ready running waiting admitted exit I/O hoặcsự kiện đãhoàntất Bị ngắt (Interrupt) Chờ I/O hoặc sự kiện Lậplịch 6 Khối điềukhiểntiếntrình z Thuậtngữ: Process Control Block (PCB) z Các thông tin: z Trạng thái tiếntrình z Con đếm z Các thanh ghi z Thông tin về lậplịch z Thông tin về bộ nhớ z Thông tin accounting z Thông tin vào/ra Số hiệutiến trình (Process number) Con đếm (program counter) Các thanh ghi (registers) Giớihạnbộ nhớ Danh sách các tệp đang mở … Con trỏ Trạng thái tiếntrình 2 7 Lậplịch tiếntrình 8 Tạisaophảilậplịch? z Số lượng NSD, số lượng tiến trình luôn lớn hơnsố lượng CPU củamáytínhrất nhiều z Tạimộtthời điểm, chỉ có duy nhấtmộttiến trình đượcthựchiệntrênmộtCPU z Vấn đề: z Số lượng yêu cầusử dụng nhiềuhơnsố lượng tài nguyên đangcó(CPU) z Do đócầnlậplịch để phân phốithờigiansử dụng CPU cho các tiếntrìnhcủa NSD và hệ thống 9 Hàng chờ lậplịch z Thuậtngữ: Queue z Các tiếntrìnhchưa được phân phốisử dụng CPU sẽđược đưavàohàng chờ (queue) z Có thể có nhiềuhàngchờ trong hệ thống: Hàng chờ sử dụng CPU, hàng chờ sử dụng máy in, hàng chờ sử dụng ổđĩa CD… z Trong suốtthờigiantồntại, tiến trình phảidi chuyểngiữa các hàng chờ 10 Hàng chờ lậplịch tiếntrình Hàng chờ sẵn sàng thựchiện Hàng chờ vào/ra Yêu cầuvào/ra Hếtthờigian sử dụng CPU Tạomộttiến trình con Chờ ngắt CPU Vào/ra Tiếntrìnhcon thựchiện Ngắtxuấthiện 11 Phân loạicácbộ lậplịch z Bộ lậplịch dài hạn (long-term scheduler) z Thường dùng trong các hệ xử lý theo lô z Đưatiếntrìnhtừ spool vào bộ nhớ trong z Bộ lậplịch ngắnhạn (short-term scheduler) z Còn gọilàbộ lậplịch CPU z Lựachọntiếntrìnhtiếptheođượcsử dụng CPU z Bộ lậplịch trung hạn (medium-term scheduler) z Hay còn gọi là swapping (tráo đổi) z Di chuyểntiếntrìnhđang trong trạng thái chờ giữa bộ nhớ trong và bộ nhớ ngoài 12 Minh họabộ lậplịch trung hạn CPU Hàng chờ vào/ra Hàng chờ sẵn sàng thựchiện Các tiếntrình đang thựchiện dở bị swap out Vào/ra swap out swap in 3 13 Hàng chờ lậplịch tiếntrình Hàng chờ sẵn sàng thựchiện Hàng chờ vào/ra Yêu cầuvào/ra Hếtthờigian sử dụng CPU Tạomộttiến trình con Chờ ngắt CPU Vào/ra Tiến trình con thựchiện Ngắtxuấthiện Các tiếntrìnhđang thực hiệndở bị swap out swap outswap in 14 Chuyểntrạng thái z Thuậtngữ: Context switch z XảyrakhimộttiếntrìnhA bị ngắtrakhỏi CPU, tiếntrìnhB bắt đầu đượcsử dụng CPU z Cách thựchiện: z Nhân HĐH ghi lại toàn bộ trạng thái củaA, lấytừ PCB (khối điềukhiểntiến trình) củaA z ĐưaA vàohàngchờ z Nhân HĐH nạptrạng thái củaB lấytừ PCB củaB z ThựchiệnB 15 Chuyểntrạng thái z Việcchuyểntrạng thái, nói chung, là lãng phí thờigiancủaCPU z Do đóviệc chuyểntrạng thái cần đượcthực hiệncàngnhanhcàngtốt z Thông thường thời gian chuyểntrạng thái mấtkhoảng 1-1000 micro giây 16 Các thao tác với tiếntrình 17 Tạotiếntrình z HĐH cung cấp hàm create-process để tạo mộttiếntrìnhmới z Tiếntrìnhgọi đếnhàmcreate-process là tiến trình cha (parent process) z Tiếntrìnhđượctạorasaukhithựchiệnhàm create-process là tiến trình con (child process) z Sau khi tiến trình con đượctạo, tiến trình cha có thể: z Chờ tiến trình con kết thúc rồitiếptụcthựchiện z Thựchiện “song song” vớitiến trình con 18 Cây tiếntrình z Tiến trình cha có thể có nhiềutiếntrìnhcon z Mỗitiến trình con chỉ có mộttiến trình cha z Các tiếntrìnhcon có thể tạoracáctiếntrình con khác… P 1 P 11 P 12 P 121 P 122 P 111 P 1111 P 1112 4 19 Minh họatiến trình cha và con create-process Gọi exit để kếtthúc Tiếntrình cha gọi Tiếntrìnhcon Có thể gọihoặc không gọi wait để chờ/không chờ tiến trình con kếtthúc 20 Kết thúc tiếntrình z Mộttiếntrìnhkếtthúckhi: z Thựchiệnxongvàgọihàmhệ thống exit (kết thúc bình thường) z Gọi đến hàm abort hoặc kill (kếtthúcbấtthường khi có lỗihoặccósự kiện) z Bị hệ thống hoặctiến trình cha áp dụng hàm abort hoặc kill do: z Sử dụng quá quota tài nguyên z Tiến trình con không còn cầnthiết z Khi tiếntrìnhcha đãkết thúc (trong mộtsố HĐH) 21 Minh họatiếntrìnhtrongUNIX #include <stdio.h> main() { int pid=fork(); /* Tạotiếntrìnhmớibằng hàm fork() */ if (pid<0) { perror(“Cannot create process”); return(-1); } else if (pid==0) { /* Tiến trình con */ execlp(); } else { /* Tiếntrìnhcha */ wait(NULL); /* Nếu không có lệnh này tiến trình cha thựchiện “song song” vớitiến trình con */ printf(“Child completed\n”); return(0); } } 22 Hợptácgiữacáctiếntrình z Các tiếntrìnhcóthể hoạt động độclập hoặc hợptácvớinhau z Các tiếntrìnhcầnhợptáckhi: z Sử dụng chung thông tin z Thựchiệnmộtsố nhiệmvụ chung z Tăng tốc độ tính toán z … z Để hợptáccáctiếntrình, cầncócáccơ chế truyền thông/liên lạcgiữacáctiếntrình (Interprocess communication – IPC) 23 Truyền thông giữacác tiếntrình(IPC) 24 Các hệ thống truyền thông điệp z Cho phép các tiếntrìnhtruyền thông với nhau qua các toán tử send và receive z Các tiếntrìnhcầncótên để tham chiếu z Cầncómộtkếtnối(logic) giữatiếntrìnhP và Q để truyền thông điệp z Mộtsố loạitruyền thông: z Trựctiếphoặcgiántiếp z Đốixứng hoặckhôngđốixứng z Sử dụng vùng đệmtựđộng hoặckhôngtựđộng 5 25 Truyền thông trựctiếp z Hai toán tử z send(P, msg): Gửi msg đếntiếntrìnhP z receive(Q, msg): Nhận msg từ tiếntrìnhQ z Cảitiến: z send(P, msg): Gửi msg đếntiếntrìnhP z receive(id, msg): Nhận msg từ bấtkỳ tiếntrình nào 26 Minh họatruyền thông trựctiếp z Mỗikếtnối đượcthiết lậpchomộtcặptiến trình duy nhất z Mỗitiếntrìnhchỉ cần biếttên/số hiệucủatiến trình kia là truyền thông được z Tồntại duy nhấtmột kếtnốigiữamộtcặp tiếntrình P 1 P 2 P 3 P 6 P 5 P 4 27 Truyền thông gián tiếp z Các thông điệp đượcgửivànhận qua các hộpthư (mailbox) hoặc qua các cổng (port) z Hai toán tử: z send(A, msg): Gửi msg đếnhộpthư A z receive(B, msg): Nhận msg từ hộpthư B z Minh họa: Topo mạng hình sao 28 Minh họatruyềnthônggiántiếp z Hai tiếntrìnhcókếtnối nếusử dụng chung một hộpthư z Mộtkếtnốicóthể sử dụng cho nhiềutiến trình (>=2) z Nhiềukếtnốicóthể tồn tạigiữamộtcặptiến trình (nếusử dụng các hộpthư khác nhau) P 1 P 2 P 3 P 6 P 5 P 4 Hộp thư A Hộp thư B 29 Vấn đề đồng bộ hóa z Thuậtngữ: Synchronization z Liên quan tớiphương thứccàiđặt các toán tử send và receive: z Phương thứccóchờ (blocking) z Phương thức không chờ (non-blocking) 30 Các phương thứcsend/receive Tiếntrìnhnhậntrả lạikếtquả là msg (nếunhận được) hoặcbáolỗi(nếu chưanhận được) Tiếntrìnhtruyền không phảichờ msg đến đích để tiếptụcthựchiện Non-blocking Tiếntrìnhnhận tạmdừng thực hiệnchođếnkhi msg đượcchuyển tới Tiếntrìnhtruyềnthông điệpchờđếnkhimsg đượcnhậnho ặc msg đượcphânphátđến hộpthư Blocking receive(Q, msg)send(P, msg) 6 31 Vấn đề sử dụng vùng đệm z Các thông điệpnằm trong hàng chờ tạmthời z Cỡ củahàngchờ: z Chứa được 0 thông điệp: send blocking z Chứa được n thông điệp: send non-blocking cho đến khi hàng chờ có n thông điệp, sau đó send blocking z Vô hạn: send non-blocking 32 Luồng (thread) z Sinh viên tự tìm hiểu trong giáo trình trang 33 Tóm tắt z Khái niệmtiếntrình z Các trạng thái, chuyểntrạng thái tiếntrình z Khối điềukhiểntiếntrình z Lậplịch tiến trình, các loạibộ lậplịch z Truyền thông giữacáctiếntrình z Gián tiếp, trựctiếp z Blocking và non-blocking (đồng bộ hóa) z Vấn đề sử dụng vùng đệm (buffer) 34 Bài tập z Viếtchương trình C trong Linux/Unix tạora 16 tiếntrìnhcon. Tiến trình cha chờ cho 16 tiến trình con này kếtthúcrồimớikết thúc bằng hàm exit. Sử dụng các hàm fork và wait để thựchiệnyêucầu. z Hãy tìm mộtsố ví dụ thựctế minh họacho các khái niệmlậplịch/hàng chờ trong tình huống có nhiềungườisử dụng và ít tài nguyên. 35 Bài tập z Hãy viếtchương trình minh họachocáccơ chế truyền thông non-blocking, blocking z Hãy viếtchương trình minh họacáccơ chế truyền thông điệpsử dụng buffer có độ dài n trong hai trường hợp: n>0 và n=0 z Chú ý: Để làm hai bài tậptrêncầnsử dụng hai tiến trình; có thể thựchiệnbàitậpvới UNIX/Linux hoặc Windows . 1 1 Nguyên lý hệ iềuhành NguyễnHải Châu Khoa Công nghệ thông tin Trường Đạihọc Công nghệ 2 Khái niệmtiếntrình 3 Tiếntrìnhlàgì? z Thuật ngữ: Process. tiếntrìnhcon có thể tạoracáctiếntrình con khác… P 1 P 11 P 12 P 121 P 122 P 111 P 1111 P 11 12 4 19 Minh họatiến trình cha và con create-process Gọi exit để kếtthúc Tiếntrình cha gọi Tiếntrìnhcon Có. lậplịch z Bộ lậplịch dài hạn (long-term scheduler) z Thường dùng trong các hệ xử lý theo lô z Đưatiếntrìnhtừ spool vào bộ nhớ trong z Bộ lậplịch ngắnhạn (short-term scheduler) z Còn gọilàbộ lậplịch