操作系统导论第五章习题

第五章作业1,2,4

第一题

1.调用fork函数,观察子进程和父进程中的变量的值的变化。
使用虚拟机,编写一个程序,调用fork()系统函数,编译之后执行这个文件,检查分析得到的结果。
程序如下:
在这里插入图片描述

执行结果:
在这里插入图片描述

结果分析:
编译之后,直接执行,调用fork()函数时,程序由父进程拷贝了一个子进程,子进程不会从main()入口开始执行,而是直接从fork()系统调用开始,父进程获得的返回值是子进程的pid值,大于0,子进程获得的返回值是0,所以根据rc得到的值可以判断fork()函数的操作。
x变量是全局变量,设置为整数值100,父进程改变x的值为0,子进程不改变,fork()操作之后子进程中x依然为100,父进程为0。
子进程父进程改变x的值:
在这里插入图片描述
在这里插入图片描述

分别在子进程和父进程中改变x变量的值,最后输出的结果也对应改变。

第二题

2.fork()调用创建一个新进程,通过子进程和父进程来访问open()返回的文件描述符。
代码编写:
在这里插入图片描述

执行结果:
在这里插入图片描述

直接编译的话看不到具体的过程,只能看到fork()之前的操作,所以使用cat p2.output指令来观看所有的输出结果。
先调用fork创建一个新的进程,然后是open()打开对应的执行文件,通过父进程和子进程来访问open()返回的文件描述符,根据输出文件的结果,只有子进程可以访问这个过程,父进程不能。同时可以它们两个都可以写入文本。

第四题

4.调用fork()程序,然后调用exec()来运行程序/bin/ls,尝试不同的exec的变体。
代码实现:
在这里插入图片描述

结果分析:
在这里插入图片描述

尝试所有的变体之后,再调用系统文件中的程序,编译运行之后,每一条输出都有两次,它记录的是home下面的所有文件的保存,推测是系统保存文件的日志。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值