Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 15

1.

Kể tên 1 hệ thống chỉ cho phép một tiến trình thực thi tại một thời điểm
thời gian? 1 hệ thống cho phép nhiều tiến trình thực thi đồng thời?
- Hệ thống chỉ cho phép 1 tiến trình thực thi tại 1 thời điểm là quản lí tiến trình
- Hệ thống cho phép nhiều tiến trình thực thi đồng thời là quản lí bộ nhớ chính
2. Trong Unix, lời gọi hệ thống nào được sử dụng để tạo tiến trình.
- fork( )
3. Một tiến trình sẽ bị kết thúc trong các trường hợp nào?
*Một tiến trình có thể bị kết thúc trong các trường hợp sau:
- Hoàn tất công việc: Tiến trình hoàn tất xử lý khi nó đã thực hiện tất cả các chỉ
thị cuối cùng và yêu cầu hệ điều hành hủy bỏ nó bằng một lời gọi hệ thống.
- Yêu cầu kết thúc từ tiến trình khác: Một tiến trình có thể yêu cầu hệ điều hành
kết thúc xử lý của một tiến trình khác thông qua các cơ chế liên tiến trình.
*Khi một tiến trình kết thúc, hệ điều hành thực hiện các công việc sau:
- Thu hồi tài nguyên: Hệ điều hành thu hồi các tài nguyên hệ thống đã được cấp
phát cho tiến trình, như bộ nhớ, file mở, thiết bị I/O, v.v.
- Xóa khỏi danh sách quản lý: Tiến trình bị kết thúc sẽ được xóa khỏi tất cả các
danh sách quản lý của hệ thống, bao gồm danh sách tiến trình đang chạy, hàng
đợi tiến trình, v.v.
- Hủy bỏ PCB (Process Control Block): PCB của tiến trình bị kết thúc sẽ được
hủy bỏ, giải phóng không gian bộ nhớ và tài nguyên mà nó sử dụng.
Hầu hết các hệ điều hành không cho phép các tiến trình con tiếp tục tồn
tại nếu tiến trình cha đã kết thúc. Trong trường hợp này, hệ điều hành sẽ tự động
tạo ra một chuỗi các thao tác để kết thúc các tiến trình con.
4. Trạng thái Sẵn sàng của tiến trình là gì?
-Là tiến trình chờ được cấp phát CPU để xử lý
5. Các tiến trình liên lạc với nhau để làm gì?
- Chia sẻ thông tin: Nhiều tiến trình có thể quan tâm đến cùng một dữ liệu, do
đó hệ điều hành cần cung cấp một môi trường cho phép truy cập đồng thời đến
các dữ liệu chung.
- Hợp tác hoàn thành tác vụ: Đôi khi để xử lý một tác vụ nhanh chóng, ta chia
tác vụ thành các công việc nhỏ có thể thực hiện song song. Thường thì các công
việc nhỏ này cần hợp tác với nhau để hoàn thành tác vụ ban đầu. Ví dụ, dữ liệu
kết xuất của một tiến trình có thể là dữ liệu nhập cho tiến trình khác. Trong
những trường hợp như vậy, hệ điều hành cần cung cấp cơ chế để các tiến trình
có thể trao đổi thông tin với nhau.
6. Khi mở một tab mới trên trình duyệt chrome, trình duyệt này có tạo ra tiến
trình mới không?
- Khi mở một tab mới trên trình duyệt Chrome, trình duyệt tạo ra một tiến trình
mới cho tab đó. Điều này giúp mỗi tab hoạt động độc lập và không ảnh hưởng
đến các tab khác hoặc trình duyệt chính.
7. Tiến trình và luồng khác nhau gì?
-Một tiến trình là một thể hiện của một chương trình máy tính đang được thực
thi
-Một luồng là một thành phần của một quá trình là đơn vị thực thi nhỏ nhất
8. Tại sao các hệ điều hành hiện đại hỗ trợ môi trường đa nhiệm ?
- Các hệ điều hành hiện đại hỗ trợ môi trường đa nhiệm để tận dụng tài nguyên,
tăng hiệu suất, đảm bảo ổn định và cung cấp trải nghiệm người dùng tốt hơn.
9. Sự khác biệt, mối quan hệ giữa tiến trình và tiểu trình?
Một tiểu trình là một đơn vị xử lý cơ bản trong hệ thống. Mỗi tiểu trình
xử lý tuần tự đoạn code của nó, sở hữu một con trỏ lệnh, tập các thanh ghi và
một vùng nhớ stack riêng. Các tiểu trình chia sẻ CPU với nhau giống như cách
chia sẻ giữa các tiến trình: một tiểu trình thực hiện trong khi các tiểu trình khác
chờ đến lượt. Một tiểu trình cũng có thể tạo ra các tiến trình con và nhận các
trạng thái khác nhau như một tiến trình thực sự. Một tiến trình có thể sở hữu
nhiều tiểu trình.
10. Tìm một số ứng dụng thích hợp với mô hình đa tiến trình:
- Ứng dụng web và một số ứng dụng thích hợp với mô hình đa tiểu trình.

11. Lệnh sau tạo ra bao nhiêu tiến trình. Hãy vẽ cây tiến trình tạo ra bởi chương
trình sau
```c
#include <stdio.h>
#include <unistd.h>

int main()
{
fork(); // Tiến trình gốc tạo ra 1 tiến trình con (A)
wait(NULL);

fork(); // Tiến trình gốc tạo ra thêm 1 tiến trình con (B), tiến trình con (A) tạo
ra 1 tiến trình con khác (C)
wait(NULL);

fork(); // Tiến trình gốc tạo ra thêm 1 tiến trình con (D), tiến trình con (B) tạo
ra 1 tiến trình con khác (E), tiến trình con (C) tạo ra 1 tiến trình con khác (F)
wait(NULL);

fork(); // Tiến trình gốc tạo ra thêm 1 tiến trình con (G), tiến trình con (D) tạo
ra 1 tiến trình con khác (H), tiến trình con (E) tạo ra 1 tiến trình con khác (I),
tiến trình con (F) tạo ra 1 tiến trình con khác (J)
wait(NULL);

return 0;
}
```

Cây tiến trình tạo ra bởi chương trình trên có thể được mô tả như sau:

```
G
/
D---H
/
B-----E----I
/
A-------C------F-----J
```

Trong cây tiến trình trên, mỗi chữ cái đại diện cho một tiến trình con được tạo
ra bởi lệnh fork(). Tiến trình gốc tạo ra 4 tiến trình con đầu tiên (A, B, C, D),
tiến trình con (B) tạo ra 2 tiến trình con (E, F), tiến trình con (D) tạo ra 1 tiến
trình con (H), và tiến trình con (F) tạo ra 1 tiến trình con (J). Tổng cộng, chương
trình tạo ra 7 tiến trình con.
12. Cho chương trình sau, xác định giá trị của pid tại các dòng A, B, C, và D.
Giả sủ rằng pid của tiến trình cha la 1500, pid của tiến trình con la 1506
⇒ A=0 ;B=1506; C=1506; D=1500
- Dòng A (trong tiến trình con): `pid = 0`. Đây là giá trị trả về của hàm `fork()`
trong tiến trình con, khi `fork()` trả về 0 cho tiến trình con.
- Dòng B (trong tiến trình con): `pid1 = 1506`. Đây là giá trị của `pid1` được lấy
từ hàm `getpid()` trong tiến trình con.
- Dòng C (trong tiến trình cha): `pid = 1506`. Đây là giá trị của biến `pid` được
gán bằng giá trị trả về của hàm `fork()`, tức là `pid` của tiến trình con.
- Dòng D (trong tiến trình cha): `pid1 = 1500`. Đây là giá trị của `pid1` được lấy
từ hàm `getpid()` trong tiến trình cha.
13.
Tại dòng A, giá trị được in ra sẽ là `20`.
Giải thích:
- Khi `fork()` được gọi, một tiến trình con được tạo ra từ tiến trình gốc. Cả tiến
trình cha và tiến trình con đều có một bản sao của biến `value`.
- Trong tiến trình con, giá trị `value` được tăng lên 15 với phép tính `value +=
15`.
- Trong tiến trình cha, sau khi gọi `fork()`, nó chờ cho tiến trình con kết thúc
bằng hàm `wait(NULL)`. Sau đó, nó in giá trị của biến `value` bằng câu lệnh
`printf("Parent: value = %d", value);`.
- Vì cả tiến trình cha và tiến trình con chia sẻ cùng một biến `value`, nên sau khi
tiến trình con hoàn thành và tăng `value` lên 15, giá trị `value` trong tiến trình
cha cũng thay đổi. Do đó, khi tiến trình cha in giá trị `value`, giá trị mới của
`value` (tức là 20) sẽ được in ra.
14. Viết chương trình “prog” tạo ra các cây tiến trình sau
a) Cây tiến trình A

b) Cây tiến trình B

Lệnh nào trong các lệnh sau nên là lệnh đặc quyền?
Đặt giá trị cho timer
Đọc đồng hồ
Xóa bộ nhớ
Đưa ra lệnh tạo bẫy
Tắt các ngắt
Thay đổi các mục trong bảng trạng thái thiết bị
Chuyển từ chế độ người dùng sang chế độ hạt nhân
Truy nhập thiết bị I/O
15.
Giả sử các tiến trình cùng được đưa vào hệ thống tại thời điểm 0

a) Cho biết kết quả điều phối hoạt động của các tiến trình trên theo thuật toán
FIFO; SJF; điều phối theo độ ưu tiên độc quyền (độ ưu tiên 1 > 2 > ...); và RR
(quantum=2).

b) Cho biết thời gian lưu lại trong hệ thống (turnaround time) của từng tiến trình
trong từng thuật toán điều phối ở câu a.

c) Cho biết thời gian chờ trong hệ thống (waiting time) của từng tiến trình trong
từng thuật toán điều phối ở câu a.

d) Thuật toán điều phối nào trong các thuật toán ở câu a cho thời gian chờ trung
bình là cực tiểu ?
16.
Sử dụng nguyên tắc điều phối độc quyền và các thông tin có được tại thời điểm
ra quyết định để trả lời các câu hỏi sau đây :
e) Cho biết thời gian lưu lại trung bình trong hệ thống (turnaround time) của các
tiến trình trong thuật toán điều phối FIFO.
P1 P2 P3
8 12 13

Thời điểm Tiến trình Tiến trình Tiến trình Thời gian Thời gian
trong hệ hoàn thành diều phối chờ lưu
thống tiếp theo
0 {P1} - P1 - -
8 {P2, P3} P1 P2 0 8
12 {P3} P2 P3 8.6 11,6
13 - P3 - 11 12

WT trung bình = ( 0 + 8,6 + 11 ) / 3 = 6,53


TAT trung bình = ( 8 + 11,6 + 12 ) / 3 = 10,53
f) Cho biết thời gian lưu lại trung bình trong hệ thống (turnaround time) của các
tiến trình trong thuật toán điều phối SJF.

g) Thuật toán SJF dự định cải tiến sự thực hiện của hệ thống , nhưng lưu ý
chúng ta phải chọn điều phối P1 tại thời điểm 0 vì không biết rằng sẽ có hai tiến
trình ngắn hơn vào hệ thống sau đó . Thử tính thời gian lưu lại trung bình trong
hệ thống nếu để CPU nhàn rỗi trong 1 đơn vị thời gian đầu tiên và sau đó sử
dụng SJF để điều phối. Lưu ý P1 và P2 sẽ phải chờ trong suốt thời gian nhàn rỗi
này, do vậy thời gian chờ của chúng tăng lên. Thuật toán điều phối này được
biết đến như điều phối dựa trên thông tin về tương lai.
17. Phân biệt sự khác nhau trong cách tiếp cận để ưu tiên cho tiến trình ngắn
trong các thuật toán điều phối sau :
- FIFO: Không ưu tiên cho các tiến trình ngắn.
- RR: Chia thời gian CPU cho các tiến trình theo chu kỳ, không ưu tiên cho các
tiến trình ngắn.
- Điều phối với độ ưu tiên đa cấp: Ưu tiên các tiến trình ở cấp độ ưu tiên cao
hơn, có thể ưu tiên cho các tiến trình ngắn hơn.
18. Giả sử một hệ điều hành áp dụng giải thuật điều phối multilevel feedback
với 5 mức ưu tiên (giảm dần). Thời lượng quantum dành cho hàng đợi cấp 1 là
0,5s. Mỗi hàng đợi cấp thấp hơn sẽ có thời lượng quantum dài gấp đôi hàng đợi
ứng với mức ưu tiên cao hơn nó. Một tiến trình khi vào hệ thống sẽ được đưa
vào hàng đợi mức cao nhất, và chuyển dần xuống các hàng đợi bên dưới sau
mỗi lượt sử dụng CPU. Một tiến trình chỉ có thể bị thu hồi CPU khi đã sử dụng
hết thời lượng quantum dành cho nó. Hệ thống có thể thực hiện các tác vụ xử
lý theo lô hoặc tương tác, và mỗi tác vụ lại có thể hướng xử lý hay hướng nhập
xuất.
a) Hệ thống này hoạt động không hiệu quả vì các tiến trình có thời gian xử lý
ngắn (nhỏ hơn thời lượng quantum) sẽ phải chờ đợi đến khi đến lượt của chúng
trong hàng đợi. Điều này dẫn đến việc lãng phí thời gian CPU và làm giảm hiệu
suất của hệ thống. Hơn nữa, việc chuyển đổi liên tục giữa các hàng đợi cũng tạo
ra overhead cho hệ thống.

b) Để cải thiện hiệu suất của hệ thống và đáp ứng tốt hơn với các bản chất khác
biệt của tác vụ, có thể thực hiện các thay đổi sau:
- Điều chỉnh thời lượng quantum: Thay vì sử dụng thời lượng quantum cố định
cho mỗi hàng đợi, có thể điều chỉnh thời lượng quantum dựa trên tính chất của
tác vụ. Ví dụ, tác vụ tương tác có thể được cung cấp thời lượng quantum nhỏ
hơn để đảm bảo phản hồi nhanh chóng, trong khi tác vụ xử lý theo lô có thể
được cung cấp thời lượng quantum lớn hơn để tận dụng tối đa hiệu suất xử lý
hàng loạt.
19. Phân biệt Concurrency (đồng thời) và parallelism (song song).
Concurrency (đồng thời):
- Concurrency liên quan đến việc có nhiều tác vụ đang được thực thi cùng một
lúc.
- Các tác vụ có thể chạy song song hoặc tuần tự, tuy nhiên, không cần thiết phải
chạy đồng thời cùng một thời điểm.
- Concurrency tập trung vào việc quản lý và sắp xếp các tác vụ để chia sẻ tài
nguyên hiệu quả và tối đa hóa việc sử dụng CPU.
- Các tác vụ có thể được thực thi tại các thời điểm khác nhau và chuyển đổi giữa
chúng để tận dụng thời gian chờ và tăng hiệu suất hệ thống.
- Concurrency thường được sử dụng để xử lý các tác vụ không liên quan nhau,
ví dụ như xử lý đa nhiệm trong hệ điều hành.
Parallelism (song song):
- Parallelism liên quan đến việc chia nhỏ một tác vụ lớn thành các phần nhỏ và
thực thi các phần đó cùng một lúc trên nhiều tài nguyên xử lý độc lập.
- Các phần con của tác vụ được thực thi đồng thời và độc lập với nhau.
- Parallelism tập trung vào việc tận dụng hiệu quả tài nguyên xử lý để tăng tốc
độ thực thi và cải thiện hiệu suất.
- Parallelism thường được sử dụng khi xử lý các tác vụ có khối lượng công việc
lớn và có thể chia nhỏ thành các phần độc lập, ví dụ như tính toán phân tán
trong các hệ thống song song.
20. Xem xét giải thuật Banker với ma trận yêu cầu cấp phát như sau:
1. Tính ma trận Need?
Allocation MAX(Request) Need
A B C A B C A B C
P0 1 1 2 4 3 3 3 2 1
P1 2 1 2 3 2 2 1 1 0
P2 4 0 1 9 0 2 5 0 1
P3 0 2 0 7 5 3 7 3 3
P4 1 1 2 1 1 2 0 0 0

2. Kiểm tra xem hệ thống có ở trạng thái an toàn hay không?


Available= Work
A B C
2 1 0
P1 4 2 2
P4 5 3 4
P0 6 4 6
P2 10 4 7
P3 10 6 7
Hệ thống có trạng thái an toàn vì tồn tại thứ tự an toàn là p1,p4,p0,p2,p3
3. Xác định tổng tổng của từng loại tài nguyên?
Tổng số thể hiện từng loại tài nguyên:
Tài nguyên A ( 10 thể hiện)
Tài nguyên B ( 6 thể hiện)
Tài nguyên C ( 7 thể hiện)
Cây tiến trình
VD: 3 fork()
Slide 102 _ chương 2

* Turnaround time: The interval from the time of submission of a process to the
time of completion. = waiting to get into memory + waiting in the ready queue
+ executing on the CPU + doing I/O.

 Khó thực hiện cả 5 tiêu chí đánh gái giải thuất đặt lịch

1, FC,FS = giải thuật độc quyền tức là ko có ưu tiên (non-preemptive)

BT slide 106: (P3 , P4 trc đều đc)

P1 P5 P2 P3 P4
0 11 11 19 19 26 26 30 30 32
Waiting time for: P1 = 0

P5 = 11 – 2 = 9

P2 = 19 – 3 = 16

P3 = 26 – 5 = 21

P4 = 30 – 5 = 25

Avarage waiting time =

2, SJF

a. SJF ko ưu tiên
BT slide 109

P1 P4 P3 P2 P5
0 11 11 13 13 17 17 24 24 32
Waiting time for: P1 = 0
P4 = 11 – 5 = 6
P3 = 13 – 5 = 8
P2 = 17 – 3 = 14
P5 = 24 – 2 = 22
Average waiting time = (0 + 6 + 8 + 14 + 22) / 5 =10

Average turnaround time = Average waiting time + Average bust time = 16,4

b. SRTF - SJF ưu tiên (ko độc quyền)

P1 P5 P4 P3 P5 P2 P1
0 2 2 5 5 7 7 11 11 16 16 23 23 32
Waiting time: P1 = 23 – 2 = 21
P2 = 16 – 3 = 13
P3 = 7 – 5 = 2
P4 = 0
P5 = 11 – 5 = 6

3, Round – Robin (RR)

Time quantum (q) : 10 -> 100 milliseconds => cứ q ms thì ngắt và quay lại hàng
đợi.

Queue:

BT slide 120:

Q=3

Chọn P3, P4 trc đều đúng


P1 P5 P2 P1 P3 P4 P5 P2 P1 P3 P5 P2 P1
0 3 6 9 12 15 17 20 23 26 27 29 30 32

Waiting time:

P1 = 0 + (9 – 3) + (23 – 12) + (30 – 26) – 0 = 21

P2 = 6 + (20 – 9) + (29 – 23) – 3 = 20

P3 = 12 + (26 – 15) – 5 = 18

P4 = 15 – 5 = 10

P5 = 3 + (17 – 6) + (27 – 20) – 2 = 19

The average waiting time: 8.4 milliseconds

The Average turnaround time: 8.4 + 6.4= 14.8 milliseconds.

4, Priority

a. Preemptive (ko độc quyền – ưu tiên)


Cùng độ ưu tiên => đến trc thực hiện trc
Millisecond thứ 9 : P5 thực hiện vì P1 xếp sau trong hàng đợi

b. Non – preemptive (độc quyền – ko ưu tiên)

You might also like