c语言-深入理解计算机系统 8.3题

问题描述

深入理解计算机系统 8.3题

#include

int main()
{
if(fork()==0){
printf("a");
}
else{
printf("b");
waitpid(-1,NULL,0);
}

printf("c");

exit(0);

求问这个程序的可能输出序列?
答案给出了acbc,bcac,abcc,bacc四种答案。
但是我觉得不应该有四种,因为fork以后有两个进程,但是父进程会遇到waitpid,这个必须要等到子进程
终止以后,父进程才会继续下去,所以只有三种情况,一是父进程先开始,遇到waitpid等待,知道子进程结束,那么就是bacc,或者是子进程先开始,那么就有acbc,或者是abcc

解决方案

深入理解计算机系统 第3章54题
《深入理解计算机系统》读书笔记
《深入理解计算机系统》(四)

解决方案二:

waitpid(-1,NULL,0);应该主要是这个函数调用的原因:
第一次参数为-1时,任何子进程退出waitpid()都将返回,不一定是自己的子进程,所以bcac,这种情况是可能存在的

解决方案三:

不好意思,你是对的,我说错了。

参考地址:http://csapp.cs.cmu.edu/2e/errata.html

p. 772, Solution to Practice Problem 8.3. The sequence bcac is not possible. Strike the second to last sentence. The last sentence should be “There are three possible sequences: acbc, abcc, and bacc.” Please see Web Aside ECF:GRAPHS on the Web Aside page for an example of the process graph.

时间: 2024-10-30 01:53:35

c语言-深入理解计算机系统 8.3题的相关文章

汇编 c语言转换-深入理解计算机系统练习题3.22,不明白下面汇编代码的作用?

问题描述 深入理解计算机系统练习题3.22,不明白下面汇编代码的作用? movl 8(%ebp) %edxmovl $0%eaxtestl %edx%edxje .L7.L10:xorl %edx%eaxshrl %edxjne .L10.L7:andl $1%eax 解决方案 不明白其中那一点还是全部都不会i?

深入理解计算机系统-之-数值存储(二)--C程序打印变量的每一字节或者位

大端与小端 前面我们提到了依据CPU端模式的不同,数据的存储顺序也不一样. 采用大小模式对数据进行存放的主要区别在于在存放的字节顺序,BE big-endian 大端模式 ,最直观的字节序 ,地址低位存储值的高位,地址高位存储值的低位 ,不需要考虑对应关系,只需要把内存地址从左到右按照由低到高的顺序写出 ,把值按照通常的高位到低位的顺序写出 ,两者对照,一个字节一个字节的填充进去 LE little-endian 小端模式,最符合人的思维的字节序,地址低位存储值的低位,地址高位存储值的高位 ,怎

深入理解计算机系统习题

问题描述 深入理解计算机系统习题 深入理解计算机系统习题 希望得到详细的讲解及解题过程 非常感谢 解决方案 看教材怎么说的. 思路就是( 左边的尾数+1) * 10^(阶码-偏置)=值. 右边将尾数四舍五入.并且填入(指数+偏置). 比如第一个题: 011 0000指数3,偏置3,尾数0 就是1 x 2^(3-3) = 1 x 1 = 1 因为指数是0,所以第二个+7指数填写7,0111,尾数1,填写0,就是000 第二个题 101 1110指数5,偏置3,尾数14 就是15 x 2^2=60

《深入理解计算机系统》第二版中的关于条件转移的疑问

问题描述 <深入理解计算机系统>第二版中的关于条件转移的疑问 <深入理解计算机系统>第二版3.6.6条件转移指令: 这一部分讲的大概意思是不是这样: if (statement1) { statement2: } else { statement3: } 如果statement1容易计算,那么使用数据的条件转移,将statement2,statement3计算出来,在判断statement1,通过statement1的结果决定执行statement2还是statement3: 如果

深入理解计算机系统-之-内存寻址(五)--页式存储管理

前景回顾 前面我们讲解了操作系统段式存储管理的主要内容. 32位,在保护方式下,其能够访问的线性地址空间可达4GB,而且允许几乎不受存储空间限制的虚拟存储器程序.虚拟存储器地址空间能够可达64TB.它还提供了复杂的存储管理和硬件辅助的保护机构和增加了支持多任务操作系统的特别优化的指令.实际上,64TB的虚拟地址空间是有磁盘等外部存储器的支持下实现的.在编写程序是可以放在磁盘存储器上,但在执行时,必须把程序加载到物理存储器中.而存储器管理就是要将46位虚拟地址变换成32位物理地址. 将程序分成不同

risc-关于《深入理解计算机系统》中 CISC 和 早期的RISC 的区别

问题描述 关于<深入理解计算机系统>中 CISC 和 早期的RISC 的区别 <深入理解计算机系统>(中文第2版)中236页对比 CISC 和 早期的RISC 的区别中有这样一段:CISC:对机器级程序来说实现细节是不可见的.ISA 提供了程序和如何执行程序之间的清晰的抽象.早期的RISC:对机器级程序来说实现细节是可见的.有些 RISC 机器禁止某些特殊的指令序列,而有些跳转要到下一条指令执行完了以后才会生效.编译器必须在这些约束条件下进行性能优化. 解决方案 这个真的很有难度,

谭浩强《c语言程序设计》P82页第一题第一问的答案是不是给出的是错的

问题描述 谭浩强<c语言程序设计>P82页第一题第一问的答案是不是给出的是错的 谭浩强<c语言程序设计>P82页第一题第一问的答案(在<学习辅导>上)是不是给出的是错的 传不了电脑的图片,同步到百度知道了各位去那看下吧.真心绝对谭老已近老头了不该在出书了. 百度知道问题链接:http://zhidao.baidu.com/question/552031159438999972.html?quesup2&oldq=1 解决方案 你错了,那个公式应该是 复利计算的话

linux基础-深入理解计算机系统疑问

问题描述 深入理解计算机系统疑问 为什么说代码段总是从0x08048000开始,这句话说的是所有程序的代码段吗? 解决方案 对于所有进程来说,代码都是从同一固定地址开始,如Linux系统通常从0x08048000开始代码段(如前所述,从地址0到代码段起始地址的部分通常为操作系统保留区).代码及只读数据区是直接按照可执行目标文件的内容初始化的,与目标文件中的代码段(.text).初始化段(.init)及只读数据段(.rodata)相对应. 解决方案二: <深入理解计算机系统>(二)深入理解计算机

《深入理解计算机系统》读书笔记 &amp; 要点总结&lt;下&gt;

§第六章 存储器层次结构 在简单模型中,存储器系统是一个线性的字节数组,而CPU能够在一个常数时间内访问每个存储器位置.实际上,存储器系统(memory system)是一个具有不同容量.成本和访问时间的存储器层次结构.CPU寄存器保存着最常用的数据.靠近CPU的小的.快速的高速缓冲存储器(cache memory)作为一部分存储在相对慢速的主存储器(main memory)中的数据和指令的缓冲区域.主存暂时存放存储在容量较大.慢速磁盘上的数据,而这些磁盘又常常作为存储在通过网络连接的其它机器的