OSTEP 阅读笔记(Ch04.进程)

第 4 章 抽象:进程

  • 进程的非正式定义:进程就是运行中的程序
  • 操作系统通过虚拟化(virtualizing)CPU 来提供有许多 CPU 的假象
    • 让一个进程只运行一个时间片,然后切换到其他进程
    • 性能损失
  • 时分共享(time sharing),空分共享(space sharing)
  • 低级的机制(mechanism)+ 高级的策略(policy)
    • 低级方法或协议,实现了所需的功能
    • 调度策略(scheduling policy)

4.1 抽象:进程

  • 进程的机器状态(machine state):程序在运行时可以读取或更新的内容
    • 内存
    • 寄存器
      • 通用寄存器
      • PC(Program Counter)程序计数器、栈指针(stack pointer)、帧指针(frame pointer)等
    • 打开文件列表
  • 一种好的设计方式:分离策略和机制

4.2 进程 API

  • 进程 API 所应包括的功能
    • 创建(create)
    • 销毁(destroy)
      • 停止失控进程
    • 等待(wait)
    • 其他控制(miscellaneous ccontrol)
      • 暂停进程
    • 状态(status)

4.3 进程创建:更多细节

程序如何转化为进程

  • 将代码和所有静态数据(例如初始化变量)从磁盘加载(load)到内存中
    • 早期:尽快加载
    • 现在:lazy
  • 必须为运行时栈(run-time stack)分配内存
    • C:用栈存放局部变量、函数参数和返回地址
    • 操作系统也可能会用参数初始化栈,main() 函数的参数列表(2)
  • 可能为程序的堆(heap)分配一些内存
    • C:malloc() / free()
  • 执行一些其他初始化任务
    • I/O 相关
      • Unix 默认情况下每个进程都有3 个打开的文件描述符(file descriptor),用于标准输入、输出和错误
  • 启动程序

4.4 进程状态

  • 3 状态
    • 运行(running)
    • 就绪(ready)
    • 阻塞(blocked)

  • 可能还会有其他状态
    • 初始(initial):表示进程在创建时处于的状态
    • 最终(final):已退出但尚未清理的状态

4.5 数据结构

  • 进程列表(process list)
  • 保存机器状态
    • 寄存器、内存(栈、堆)、打开文件列表
  • 保存进程信息
    • 进程状态
    • 进程号、父进程等等