1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo bài tập nhập môn hệ điều hành lab 3 2

16 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Báo cáo bài tập nhập môn hệ điều hành lab 3
Tác giả Nguyễn Ngô Đăng Khoa
Trường học Trường Đại Học Tôn Đức Thắng
Chuyên ngành Công Nghệ Thông Tin
Thể loại lab report
Năm xuất bản 2022
Định dạng
Số trang 16
Dung lượng 1,11 MB

Nội dung

Viết chương trình để truyền đối vào số nguyên dương n vào và...102.. Sử dụng lời gọi system để viết chương trình thực thi các lệnh Linux đã học..113.. Tạo ra cây tiến trình như sau, với

Trang 1

TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG

KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO BÀI TẬP NMHĐH

HK2, 2021-2022 Lab 3 Thành Viên: Nguyễn Ngô Đăng Khoa (521H0084)

Mục lục

A PHẦN THỰC HÀNH 3

Ví Dụ 1: 1.1 Tạo tiến trình 3

Ví Dụ 2: Kết thúc tiến trình 5

B PHẦN BÀI TẬP 10

1 Viết chương trình để truyền đối vào số nguyên dương n vào và 10

2 Sử dụng lời gọi system() để viết chương trình thực thi các lệnh Linux đã học 11

3 Tạo ra cây tiến trình như sau, với mỗi tiến trình con, in ra ID của nó và ID của tiến trình cha 12

4 Viết một chương trình lặp vô tận với lời gọi while(1); và thực thi nó Đưa tiến trình này vào “background” thông qua việc gửi tín hiệu SIGTSTP bằng cách nhấn Ctrl + Z Sử dụng lệnh ps để xác định PID của nó và sử dụng kill để kết thúc nó.14

5 Viết chương trình mà khi chạy nó sinh ra tiến trình con, để tiến trình con trở thành zombie Tiến trình zombie này cần tồn tại trong hệ thống tối thiểu 10 giây (bằng cách dùng lời gọi sleep(10)) Sau đó dùng lệnh ps –l để xem trạng thái các

Trang 2

tiến trình Kết liễu zombie này bằng cách xác định PID của tiến trình cha nó và sử dụng lệnh kill 15 KẾT LUẬN 16

Trang 3

A PHẦN THỰC HÀNH

Ví Dụ 1: 1.1 Tạo tiến trình

A: Code Chương Trình

Chúy ý: code phải được giải thích để thể hiện hiểu rõ chương trình mình biết //P1.c

#include<stdio.h>

#include<unistd.h>

intmain()

{

printf("Current process ID: %d\n", getpid());

printf("Parent process ID: %d\n", getppid());

return ;0

}

B: Kết Quả Demo

1.2 Biên dịch và xem kết quả khi có lệnh fork():

A: Code Chương trình

// P2.c

#include<stdio.h>

#include<sys/types.h>

#include<unistd.h>

intmain()

{ // make two process which run same

// program after this instruction

ộ // Thêm m t vài l nh printf và theo dõi.ệ

fork(); fork();

Trang 4

// thêm m t vài l nh fork vào đây và xem thay đ i.

printf("Hello world! from Process ID: %d\n",

getpid());

return ;0

}

B: Kết Quả Demo

1.3 Biên dịch và xem kết quả,:

A: Code Chương trình

// P3.c

#include<stdio.h>

#include<unistd.h>

intmain()

{

pid_t pid;

pid =fork();

(pid ) if <0 printf("fork error! No child created\n"); elseif(pid ==0)

{

//sleep(2);

printf("Hello from Child!\n");

printf("Child ID is %d!\n", getpid());

}

else

{

printf("Hello from Parent!\n");

printf("Parent ID is %d!\n", getpid());

}

Trang 5

return ;0

}

B: Kết Quả Demo

Ví Dụ 2: Kết thúc tiến trình

2.1 Hãy biên dịch và thực thi các tập tin zombie.c và orphan.c được cung cấp và dùng lời gọi ps rồi tìm chúng trong bảng tiến trình

A: Code Chương trình

// A C program to demonstrate Zombie Process

// Child becomes Zombie as parent is sleeping

// when child process exits

#include<stdlib.h>

#include<sys/types.h>

#include<unistd.h>

intmain()

{

// Fork returns process id

// in parent process

pid_t child_pid =fork();

// Parent process

(child_pid if >0)

sleep( );10

// Child process

else

exit(0);

return ;0

Trang 6

// A C program to demonstrate Orphan Process // Parent process finishes execution while the // child process is running The child process // becomes orphan

#include<stdio.h>

#include<sys/types.h>

#include<unistd.h>

intmain()

{

// Create a child process

pid int =fork();

(pid )if >0

printf("in parent process\n");

// Note that pid is 0 in child process

// and negative if fork() fails

elseif (pid ==0)

{

sleep( );6

printf("in child process\n");

}

return ;0

}

Trang 7

B: Kết Quả Demo

2.2 Sau đây tạo ra một số lượng tiến trình con (được truyền vào qua đối số hàm main), in ra ID của các tiến trình con và lời gọi chờ của tiến trình cha

A: Code Chương trình

#include<sys/types.h>

#include<sys/wait.h>

#include<stdlib.h>

#include<unistd.h>

#include<stdio.h>

Trang 8

intmain( intargc, char *argv[])

{

pnum, count, retval, child_no;int

pnum =atoi(argv[ ]);1

(pnum if <= ) 0

{

printf("So tien trinh con phai lon hon 0");

return - ;1

}

else

{

retval =1;

for(count ; count pnum; count=0 < ++)

{

(retval if !=0) retval =fork();

elsebreak;

}

(retval if ==0)

{

child_no count;=

printf("Tien trinh %d, PID %d\n", child_no,

getpid());

}

else

{

for(count ; count pnum; count=0 < ++) wait(NULL); printf("Tien trinh cha PID %d\n", getpid()); }

}

status ;int =5

wait(&status); ờ ộ// ch m t trong nh ng đ a con.ữ ứ

return ;0

}

Trang 9

B: Kết Quả Demo

2.3 Vòng lặp

A: Code Chương trình

// A C program to demonstrate ignoring // SIGCHLD signal to prevent Zombie processes

#include<stdio.h>

#include<unistd.h>

#include<sys/wait.h>

#include<sys/types.h>

intmain()

{

i;int

pid int =fork();

(pid if == )0

for = (i ; i ; i0 <5 ++)

printf("I am Child\n");

else

{

signal(SIGCHLD,SIG_IGN);

printf("I am Parent\n");

while( );1

}

}

B: Kết Quả Demo

Trang 10

B PHẦN BÀI TẬP

1 Viết chương trình để truyền đối vào số nguyên dương n vào

a Tiến trình cha tiếp tục tính rồi xuất ra tổng S = 1 + 2 + … + n

b Đồng thời tạo một tiến trình con tính tổng các ước số của n và in ra màn hình.

A Code chương trình:

#include<stdio.h>

#include<unistd.h>

#include<sys/types.h>

#include<sys/wait.h>

#include<stdlib.h>

intmain( intargc, char *argv[])

{

pid_t pid =fork();

(pid ) if <0 printf("fork error! No child created\n");

for(int = i 1 1; < argc; i++)

{

k int =atoi(argv[ ]);1

(pid if == )0

{

t ;int =0

for(int = i 1; i <= k; i++)

{

(k i if % == ) t 0 += i;

Trang 11

}

printf("Tong cac uoc so la: %d\n", t);

}

else

{

s ;int =0

wait(NULL);

for(int = i 0; i <= k; i++)

s += i;

printf("Tong cac gia tri tu 1 den %d la: %d\n", k, s);

}

return ;0

}

}

B: Kết Quả Demo

2 Sử dụng lời gọi system() để viết chương trình thực thi các lệnh Linux đã học

A Code chương trình:

#include<stdio.h>

intmain( intargc, char *argv[])

{

re;int

printf("Command ls\n");

re =system(" "ls);

Trang 12

printf("Command pwd\n");

re =system("pwd");

printf("Command ls -a\n");

re =system("ls -a");

(re if !=-1) printf("System call is done!\n");

printf("Call system to execute ps -a\n");

re =system("ps -a");

(re if !=-1) printf("System call ps is done!\n");

return ;0

}

B: Kết Quả Demo

3 Tạo ra cây tiến trình như sau, với mỗi tiến trình con, in ra ID của nó và ID của tiến trình

cha

A Code chương trình:

#include<stdio.h>

#include<unistd.h>

intmain()

{

Trang 13

n1 int =fork();

n2 int =fork();

(n1 if ==0)

{

(n2 if ==0)

{

printf("H ");

printf("my id is %d, my parentid is %d\n",

getpid(), getppid());

}

else

{

printf("C\n");

printf("my id is %d, my parentid is %d\n",

getpid(), getppid());

}

}

elseif(n1 )>0

{

printf("A ");

printf("my id is %d, my parentid is %d\n", getpid(),

getppid());

(n2 if ==0)

{

printf("B\n");

printf("my id is %d, my parentid is %d\n",

getpid(), getppid());

}

}

return ;0

}

Trang 14

B: Kết Quả Demo

4 Viết một chương trình lặp vô tận với lời gọi while(1); và thực thi nó Đưa tiến trình này

vào “background” thông qua việc gửi tín hiệu SIGTSTP bằng cách nhấn Ctrl + Z Sử dụng

lệnh ps để xác định PID của nó và sử dụng kill để kết thúc nó

A Code chương trình:

#include<stdio.h>

#include<unistd.h>

#include<sys/wait.h>

#include<sys/types.h>

intmain()

{

i;int

pid int =fork();

(pid if == )0

for = (i ; i ; i0 <5 ++)

printf("I am Child\n");

else

{

Trang 15

signal SIGCHLD( ,SIG_IGN);

printf("I am Parent\n");

while( );1

}

}

B: Kết Quả Demo

5 Viết chương trình mà khi chạy nó sinh ra tiến trình con, để tiến trình con trở thành zombie

Tiến trình zombie này cần tồn tại trong hệ thống tối thiểu 10 giây (bằng cách dùng lời gọi

sleep(10)) Sau đó dùng lệnh ps –l để xem trạng thái các tiến trình Kết liễu zombie này

bằng cách xác định PID của tiến trình cha nó và sử dụng lệnh kill

A Code chương trình:

#include<stdlib.h>

#include<stdio.h>

#include<sys/types.h>

#include<unistd.h>

intmain()

{

pid_t child_pid =fork();

Trang 16

// Child process

(child_pid if >0)

printf("%d\n",getpid());

// Parent process

elseif(child_pid == ) 0

sleep( );10

return ;0

}

B: Kết Quả Demo

KẾT LUẬN

Sau khi học và hoàn thành phần lab 2 em thu được kết sau:

- Hoàn thành tất cả phần thực hành

- Hoàn thành được 5 bài tập (1, 2, 3, 4, 5) [71%]

Ngày đăng: 08/05/2024, 16:24

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w