进程
简单的定义,进程就是运行中的程序。
处理器虚拟化就是提供存在多个处理器的错觉,而事实上只有一个处理器。
处理器的时间复用允许用户运行尽可能多的并发进程,代价就是每个进程会变慢。
4.1 进程的抽象
- 地址空间
指令存放在内存中,数据读写也是在内存中。 - 寄存器
很多指令读和更新寄存器。有一些特殊的寄存器,比如PC,栈指针和与之关联的帧指针用来管理函数参数,本地变量,和返回地址。 - I/O
程序会访问持久化存储设备,比如文件。
4.2 进程API
创建,销毁,等待,其他控制(比如挂起进程),状态。
4.3 进程创建:更多细节
- 从磁盘加载代码和静态数据(初始化变量)到内存
- 分配运行的地址空间
- 初始化运行时栈,函数参数,本地变量,和返回地址。填充main函数.
- 堆。动态分配的空间,比如调用malloc。常用于链表,哈希表,树和其他有趣的数据结构。
- 其他的初始化任务,尤其是I/O。在unix系统中,每个进程默认打开三个文件描述符,标准输入,标准输出,标准错误
- 启动程序。找到程序入口点main
4.4 进程状态
- 就绪
- 运行
- 阻塞
- 4.5 数据结构(进程表)
参考xv6系统实现。 - 4.6 小结
- 参考
- 作业