OSTEP 读书笔记01

OSTEP 1-1 进程的抽象

在古老的时代里,对于CPU,我们需要对其进行各种操作。操作系统需要给你表现出“我们能搞定同时做到多种操作”,抽象出了进程。通过time sharing等操作,进程在一个CPU上让你感觉很多程序能够同时在运行。这种抽象要付出消耗更多时间的代价。

OS需要多种支持:硬件上的支持,与编程者在软件、算法上的支持。我们需要实现上下文跳转(context switch), 分时机制。同时,我们不希望它们有太坏的、异常的表现。

进程的抽象

  1. 机器的状态(类似我能干什么)
  2. 内存: 进程可以处理的内存(称为地址空间)是该进程的一部分。
  3. 寄存器: PC IR stack pointer

进程API

  1. Create
  2. Destroy
  3. Wait: 等待其他进程停止运行
  4. Status: 进程状态

进程的创建

  1. 加载代码和所有static data(比如初始化的变量)进入内存,以executable format写入程序所在的磁盘或者SSD.
  2. 开辟stack空间,比方说为C的变量开辟空间,并且往C的argc, argv写入值
    同时,可能为堆空间写入值
  3. 处理和IO相关的操作,比如 Unix 为stdin, stdout, stderr打开 file descriptors
  4. 等待执行main

进程的状态

  • Running
  • Ready
  • Blocked

汤书似乎有更多的状态?

进程相关的数据结构

进程需要靠这些结构来保持对应的上下文,处理相关的逻辑。

PCB 进程控制块

汤书P40

系统通过PCB感知进程存在,提供进程调度管理控制的必要信息(有警车个标识符,调度信息等)

创建进程要申请PCB — 分配资源 — 初始化PCB等