15.1 fork 的原理与实现
15.1.1 什么是 fork
fork
函数原型是 pid_t fork(void)
,返回值是数字,该数字有可能是子进程的 pid,有可能是 0,也有可能是 -1。
15.1.2 fork 的实现
fork
要分两步,先复制进程资源,再跳进去执行。
进程的资源:
- 进程的 pcb,即 task_struct
- 程序体,即代码段数据段等
- 用户栈
- 内核栈,进入内核态时,需要保存上下文环境
- 虚拟地址池,每个进程拥有独立的内存空间,其虚拟地址是用虚拟地址池来管理的
- 页表,让进程拥有独立的内存空间
15.4 实现一个简单的 shell
15.4.1 shell 雏形
操作系统要想实现和用户的交互,需要感知用户的输入并给予回馈,也就是要为用户提供个交互接口。
shell 的功能大致是获取用户的键入,然后分析输入的字符串,判断是内部命令,还是外部命令,然后执行不同的策略。