进程

Thursday, September 5, 2019

进程

如何提供有许多CPU 的假象

操作系统通过虚拟化 CPU 来提供这种假象,让一个进程只运行一个时间片,然后切换到其他进程。这就是 time sharing CPU 技术。潜在开销就是性能损失。

要想虚拟化实现的好,操作系统需要一些低级机制(比如上下文切换)和高级智能。

操作系统有一些智能以策略的形式存在,是提供某种决定的算法。

抽象:进程

为了了解进程,我们必须理解它的机器状态:程序在运行时可以读取或更新的内容。这里面有,比如内存(读写数据),寄存器(读取或更新寄存器),存储设备

进程 API

  • 创建(create)
  • 销毁(destroy)
  • 等待(wait)
  • 其他控制(miscellaneous control)例如操作系统提供某种方法暂停进程,然后恢复
  • 状态(status)

进程创建:更多细节

操作系统运行程序必须做的第一件事就是将代码和所有静态数据(例如初始化变量)加载(load)到内存中,加载到进程的地址空间中。

img

在运行之前,还需执行一些操作。必须给程序分配栈空间,比如 C 语言用栈空间存储局部变量,函数参数和返回的地址。也可能会为程序的堆分配一些内存,比如一些语言声明的对象,或者是一些数据结构。还将执行一些初始化任务,比如 Unix 默认每个进程都有3个打开的文件描述符,用于标准的输入输出和错误。

最后就是启动任务,在入口处运行,就是 main()。

进程状态

进程有三种状态

  • 运行
  • 就绪:进程已做好准备,但操作系统不在此时运行。
  • 阻塞:一个进程执行了操作,直到发生其他事件时才会准备运行,比如进程像磁盘发起 I/O 请求时,会被阻塞。

img

xv6的进程数据结构

img

OS

进程

Linux 管理