You are on page 1of 11

Name: Nguyễn Trí Tín

ID:21522677
Class: IT007.N23.CNCL.1

OPERATING SYSTEM
LAB X’S REPORT

SUMMARY
Task Status Page
Section 1.5 Ex 1 Hoàn thành 1
Ex 2 Done 3
Ex 3 Undone
Task name 4 Undone
Task name 5 Undone
Task name 6 Done 4
Task name 7 Done 7
… …

Self-scrores:

*Note: Export file to PDF and name the file by following format:
LAB X – <Student ID>.pdf

1
Section 3.4
1. Tạo tiến trình
example_fork.c

Example_execl.c

Example_system.c

2
2. Kết thúc tiến trình

3. Tạo tiểu trình

4. Dừng tiểu trình


Example_thread_selfexit.c

3
Example_thread_mainexit.c

5. Hợp và gỡ tiểu trình

6. Truyền dữ liệu cho tiểu trình

7. Signal (Truyền thông giữa các tiến trình)

4
Section 3.5 Bài tập ôn tập
1. Mối quan hệ cha-con giữa các tiến trình

windowServer
PID = 86

iTunes Terminal Safari Mail


PID = 281 PID = 282 PID = 531 PID = 726

Login
PID = 287

-bash
PID = 293

Firefox-bin Aquanmacs
PID = 461 PID = 751

5
a) Trình bày cách sử dụng lệnh ps để tìm tiến trình cha của một một tiến trình dựa vào PID của
nó.

b) Tìm hiểu và cài đặt lệnh pstree (nếu chưa được cài đặt), sau đó trình bày cách sử dụng lệnh
này để tìm tiến trình cha của một tiến trình dựa vào PID của nó.
In ra tất cả tiến trình hiện có

6
In ra tất cả tiến trình với PID

7
2. Chương trình bên dưới in ra kết quả gì? Giải thích tại sao?

Chương trình bị lỗi biên dịch do thiếu thư viện unistd.h và stdlib.h
Sửa lại:

8
Giải thích:vì tiến trình con không thể trực tiếp thay đổi giá trị của biến cục bộ (local variable)
của tiến trình cha. Khi tiến trình con được tạo ra, một bản sao của các biến cục bộ của tiến trình
cha sẽ được tạo ra và sử dụng trong tiến trình con nên biến num_coconuts trong tiến trình con
không làm thay đổi biến num_coconuts của tiến trình cha. tiến trình con kết thúc mà không in ra
màn hình. tiến trình cha đợi tiến trình con kết thúc rồi in ra màn hình kết quả

3. Trong phần thực hành, các ví dụ chỉ sử dụng thuộc tính mặc định của pthread, hãy
tìm hiểu POSIX thread và trình bày tất cả các hàm được sử dụng để làm thay đổi
thuộc tính của pthread, sau đó viết các chương trình minh họa tác động của các
thuộc tính này và chú thích đầy đủ cách sử dụng hàm này trong chương trình.

• pthread_attr_init(): Hàm này được sử dụng để khởi tạo một đối tượng pthread_attr_t mới
với các giá trị mặc định.
• pthread_attr_destroy(): Hàm này được sử dụng để giải phóng bộ nhớ được cấp phát cho
đối tượng pthread_attr_t.
• pthread_attr_getdetachstate() và pthread_attr_setdetachstate(): Hàm
pthread_attr_getdetachstate() được sử dụng để lấy trạng thái của tiến trình con (detached
hoặc joinable). Hàm pthread_attr_setdetachstate() được sử dụng để thiết lập trạng thái
của tiến trình con.
• pthread_attr_getstack() và pthread_attr_setstack(): Hàm pthread_attr_getstack() được sử
dụng để lấy thông tin về kích thước và địa chỉ của ngăn xếp của tiến trình con. Hàm
pthread_attr_setstack() được sử dụng để thiết lập kích thước và địa chỉ của ngăn xếp cho
tiến trình con.
• pthread_attr_getschedpolicy() và pthread_attr_setschedpolicy(): Hàm
pthread_attr_getschedpolicy() được sử dụng để lấy chính sách lập lịch của tiến trình con.
Hàm pthread_attr_setschedpolicy() được sử dụng để thiết lập chính sách lập lịch cho tiến
trình con.
• pthread_attr_getschedparam() và pthread_attr_setschedparam(): Hàm
pthread_attr_getschedparam() được sử dụng để lấy thông tin về tham số lập lịch của tiến
trình con. Hàm pthread_attr_setschedparam() được sử dụng để thiết lập tham số lập lịch
cho tiến trình con.
• pthread_attr_getinheritsched() và pthread_attr_setinheritsched(): Hàm
pthread_attr_getinheritsched() được sử dụng để lấy giá trị của thuộc tính kế thừa lập lịch
của tiến trình con. Hàm pthread_attr_setinheritsched() được sử dụng để thiết lập giá trị
của thuộc tính kế thừa lập lịch cho tiến trình con.
• pthread_attr_getscope() và pthread_attr_setscope(): Hàm pthread_attr_getscope() được sử
dụng để lấy thông tin về phạm vi của tiến trình con (PTHREAD_SCOPE_SYSTEM hoặc
PTHREAD_SCOPE_PROCESS). Hàm pthread_attr_setscope() được sử dụng để thiết lập
phạm vi của tiến trình con.

9
• pthread_attr_getguardsize() và pthread_attr_setguardsize(): Hàm
pthread_attr_getguardsize() được sử dụng để lấy thông tin về kích thước khu bảo vệ của
tiến trình con. Hàm pthread_attr_setguardsize() được sử dụng để thiết lập kích thước khu
bảo vệ của tiến trình con.
Các hàm trên đều có thể được sử dụng để làm thay đổi thuộc tính của một tiến trình con. Dưới
đây là một số ví dụ minh họa về cách sử dụng các hàm này:
- Các chương trình minh họa tác động của các thuộc tính
Minh họa scope
int pthread_attr_setscope(pthread_attr_t*attr, int scope);
// đặt thuộc tính phạm vi tranh chấp của đối tượng thuộc tính luồng được tham chiếu bởi //attr
đến giá trị được chỉ định trong phạm vi
int pthread_attr_getscope(const pthread_attr_t*attr, int *scope);
// Thành công thì return về 0 còn lại trả về lỗi
Minh họa priority
int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
// thuộc tính luồng được tham chiếu bởi attr đến giá trị policy
int pthread_attr_getschedpolicy(const pthread_attr_t *restrict attr, int *restrict policy);
// Thành công thì return về 0 còn lại trả về lỗi
Minh họa setguardsize
S=pthread_attr_getguardsize(pthread_attr_t *attr, &sp);
// đặt kích thước bảo vệ của đối tượng attr. (Bảo vệ tràn ngăn xếp)
Minh họa destroy
int pthread_attr_destroy (pthread_attr_t * tattr );
// để xóa bộ nhớ đã được cấp phát trong quá trình khởi tạo. Đối tượng thuộc tính trở nên //không
hợp lệ.

10
4. Viết chương trình làm các công việc sau theo thứ tự:

11

You might also like