抢占式|深入理解计算机系统:进程

导语:这是篇读书笔记 , 每次重读CSAPP都有新的认知 , 尤其是在进入了后台通道之后才感受到每天和进程打交道的感觉是如此深刻 。
抢占式|深入理解计算机系统:进程文章插图
0x00 What is Process?
抢占式|深入理解计算机系统:进程文章插图
[ system structure ]

  • 进程(Process)
经典定义是一个执行中的程序的实例 , 操作系统对一个正在运行的程序的一种抽象 。 并发运行 , 指的是一个进程的指令和另一个进程的指令交错执行 。 操作系统实现这种交错执行的机制称为上下文切换 。
  • 线程(Thread)
一个进程可以由多个线程的执行单元组成 , 每个线程都运行在进程的上下文中 , 并共享同样的代码和全局数据 。
  • 内核(Kernel)
一个计算机程序 , 用来管理软件发出的数据I/O(输入与输出)要求 , 将这些要求转译为数据处理的指令 , 交由中央处理器(CPU)及计算机中其他电子组件进行处理 , 是现代操作系统中最基本的部分 。
  • 外壳(Shell)
指“为使用者提供使用者界面”的软件 , 通常指的是命令行界面的解析器 。 一般来说 , 这个词是指操作系统中提供存取内核所提供之服务的程式 。 Shell也用于泛指所有为用户提供操作界面的程序 , 也就是程序和用户交互的层面 。 内核不提供交互 。
  • 抢占(Preemption)
分为非抢占式和抢占式 。 根据调度主体分用户抢占与内核抢占 。
非抢占式(Nonpreemptive)——让进程运行直到结束或阻塞的调度方式 。
抢占式(Preemptive)——允许将逻辑上可继续运行的在运行过程暂停的调度方式 。 可防止单一进程长时间独占CPU 。
  • 异常控制流(ECF , Exceptional Control Flow)
ECF发生在硬件层 , 操作系统层 , 应用层 。 控制转移(control transfer)是指程序计数器对应的指令序列的跳转 , 控制转移序列的叫做处理器的控制流(control flow) 。
某些如跳转、调用和返回是为了使得程序对内部状态变化(event)做出反应而设计的机制 , 系统通过使控制流发生突变对发生各种状态变化 。
Exceptions
任何情况下 , 处理器检测到event发生 , 通过异常表(exception table)跳转到专门处理这类事件的操作系统子程序(exception handler) 。
【抢占式|深入理解计算机系统:进程】异步异常由事件产生 , 同步异常是执行一条指令的直接产物 。
类别包含中断(异步) , 陷阱(同步) , 故障(同步) , 终止(同步) 。
  • 中断——异步发生 , 处理器IO设备信号的结果 。
  • 陷阱——有意的异常 。 最重要的用途是在用户程序和内核之间提供一个像过程一样的接口 , 叫做系统调用 。
  • 故障——潜在可恢复的错误造成的结果 。 如果能被修复 , 则重新执行引起故障的指令 , 否则终止 。
  • 终止——不可恢复的致命错误造成的结果 。
有高达256种不同的异常类型 , 如出发错误(0)、一般保护故障(13)、缺页(14)、机器检查(18)、操作系统定义的异常(32-127 , 129-255)、系统调用(0x80) 。
我们常见的段故障(Segmentation fault) , 是一般保护故障(异常13) , 通常是因为一个程序引用了一个未定义的虚拟存储器区域 , 或者因为程序试图写一个只读的文本段 。
抢占式|深入理解计算机系统:进程文章插图
[ Examples of popular system calls ]
Processes
  • 逻辑控制流(Logical Control Flow)
程序计数器PC值的序列叫做逻辑控制流(逻辑流) 。 PC对应于程序的可执行目标文件中的指令 , 或者是包含在运行时动态链接到程序的共享对象中的指令 。
逻辑流看起来就像是在独占处理器地执行程序 , 每个进程执行逻辑流的一部分然后就被抢占 , 实际上处理器通过上下文保护好进程间的信息 , 在不同的进程中切换 。
  • 并发流(Concurrent Flows)
并发流指逻辑流在执行时间上与另一个流重叠 , 多个就叫并发(concurrent) 。
一个进程和其他进程轮流运行叫多任务(multitasking) 。
进程占有CPU执行控制流的每一个时间段叫时间片(time slice) 。