摘要:
思考题 Thinking6.1 示例代码中,父进程操作管道的写端,子进程操作管道的读端。如果现在想让父进程作为“读者”,代码应当如何修改? 除了将case 0:与default:分支的内容交换一下,还要注意父进程开始要先调度子进程完成写,自己才能读。 switch (fork()) { case - 阅读全文
摘要:
思考题 Thinking5.1 查阅资料,了解 Linux/Unix 的 /proc 文件系统是什么?有什么作用?Windows 操作系统又是如何实现这些功能的?proc 文件系统的设计有哪些好处和不足? proc文件系统是伪文件系统,是服务于用户和内核的通信的。proc文件系统是一种无存储的文件系 阅读全文
摘要:
思考题 Thinking4.1 思考并回答下面的问题 : • 内核在保存现场的时候是如何避免破坏通用寄存器的? • 系统陷入内核调用后可以直接从当时的 a0-a3 参数寄存器中得到用户调用msyscall 留下的信息吗? • 我们是怎么做到让 sys 开头的函数“认为”我们提供了和用户调用 msys 阅读全文
摘要:
思考题 Thinking3.1 为什么我们在构造空闲进程链表时必须使用特定的插入的顺序?(顺序或者逆序) 按照头插法,是逆序。保证链表中的顺序和envs数组中的顺序相同。加载空闲进程时会使用LIST_FIRST()函数,会优先加载envs数组前面的块。进程调度时,最近使用过的放回到空闲链表时也是放到 阅读全文
摘要:
思考题 Thinking2.1 请思考cache用虚拟地址来查询的可能性,并且给出这种方式对访存带来的好处和坏处。另外,你能否能根据前一个问题的解答来得出用物理地址来查询的优势? cache使用虚拟地址查询是可能的,但是综合来看不如用物理地址查询。 cache使用虚拟地址查询的优势:节省了TLB未命 阅读全文
摘要:
思考题 Thinking1.1 也许你会发现我们的 readelf 程序是不能解析之前生成的内核文件 (内核文件是可执行文件) 的,而我们刚才介绍的工具 readelf 则可以解析,这是为什么呢?(提示:尝试使用 readelf -h,观察不同) 当我使用./readelf vmlinux命令时弹出 阅读全文