操作系统实验复习题(带答案) 下载本文

{

while(1){} } 5.

/*forktree.c*/ #include /*forktree.c*/ #include #include #include #include main() { int p; p=fork(); printf(\

if (p>0) /*如果是父进程*/ {

fork();

fork(); }

else{ /*如果是子进程*/ fork(); fork(); } sleep(50); }

要求:把程序编译,后台执行,利用ps命令查看进程的ID号,以进程的ID号为进程名称,画出程序的运行过程中产生的进程树。

6.

/*fork2.c */ #include #include #include #include main() { int p,x; x=1; p=fork(); if (p>0)

printf(\ else

printf(\ }

要求:写出程序的运行结果,并简要分析fork()系统调用创建子进程后,父进程和子进程之间的关系。

7. 编写程序代码,要求子进程利用execl()函数调用另一个可执行程序的代码。(要求: 把代码、程序编译和运行结果截图)

8. 分析程序执行流程,运行结果以及kill()和signal()的功能。

/*signal1.c*/ #include #include #include #include int i; void intfun( ) {

i=0; } main( ) {

int k,j,pid; j=1;

while((pid=fork( ))==-1); if (pid>0) {

for(k=1;k<3;k++) {

printf(\sleep(1); }

kill(pid,17); /*发送软中断信号给子进程*/ wait(0); /*等待子进程终止*/ printf(\exit(0); } else {

signal(17,intfun); /*预置软中断信号17*/ i=1;

while(i==1) /*循环显示并等待父进程发软中断信号*/ {

printf(\ sleep(1); }

printf(\exit(0);

} }

9. 编写程序实现父进程和子进程基于无名管道进行通信。用系统调用pipe()建立一无名管道,父进程向管道写入一句话,子进程从无名管道中读出两个来自子进程的信息并显示。

(要求: 把代码、程序编译和运行结果截图)

10. 把下面程序空缺的语句填写完整,通过这个程序分析共享存储区通信机制的优缺点。

#include #include #include #include #include

#define SHMKEY 75 //定义符号变量,每个用户取不同的共享内存关键字值 int shmid,i; int *addr; //定义指向整型 变量的指针变量, main( )

{ while ((i=fork( ))==-1); if (!i) server( );

system(“ipcs -m”); while ((i=fork( ))==-1); if (!i) client( );

wait(0); wait(0);} void server( ) { ( 1 );

( 2 ); do

{ *addr=-1; system(“ipcs -m”); while (*addr==-1);

printf(\ }while (*addr);

( 3 );;

exit(0); }

void client( ) { int i; ( 4 );

( 5); for (i=9;i>=0;i--)