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