虚拟化

# 进程

操作系统提供的基本抽象-进程,进程的非正式定义非常简单,进程就是运行中的程序。操作系统为正在运行的程序提供的抽象,就是所谓的进程(process)。程序本身是没有生命周期的,它只是存在磁盘上面的一些指令(也可能是一些静态数据)。是操作系统让这些字节运行起来,让程序发挥作用。

操作系统通过虚拟化(virtualizing)CPU来提供这种假象。通过让一个进程只运行一个时间片,然后切换到其他进程,操作系统提供了存在多个虚拟CPU的假象,这就是时分共享(time sharing)CPU技术,允许用户如愿运行多个并发进程。潜在的开销就是性能损失,因为如果CPU必须共享,每个进程的运行就会慢一点。

要实现CPU的虚拟化,操作系统就需要一些低级机制以及一些高级智能。我们将低级机制称为机制(mechanism),机制是一些低级方法和协议,实现了所需的功能。在这些机制之上,操作系统中有一些智能以策略(policy)的形式存在。策略是在操作系统内做出某种决定的算法。

提示

时分共享机制:是操作系统共享资源所使用的最基本的技术之一。通过允许资源由一个实体使用一小段时间,然后由另一个实体使用一小段时间,如此下去,所谓的资源可以被许多人共享。

进程的机器状态有一个明显的组成部分,就是它的内存。指令存在内存中。正在运行的程序读取和写入的数据也在内存中。因此进程可以访问的内存(address space)是该进程的一部分。

进程的机器状态的另一个部分是寄存器。许多指令明确地读取或更新寄存器,因此显然,它们对于执行该进程很重要。

有一些非常特殊的寄存器构成了该机器状态的一部分。程序计数器(指令指针)告诉我们程序当前正在执行哪个指令。栈指针和相关的帧指针用于管理函数参数栈、局部变量和返回地址。

# 进程API

  • 创建(create)在shell中键入命令或双击图标,会调用操作系统来创建新进程,运行指定的程序。
  • 销毁(destroy)如果程序在运行结束后不能正常退出,那么就需要调用操作系统的销毁接口
  • 等待(wait)
  • 其他控制
  • 状态(statu)通常也有一些接口可以获得有关进程的状态信息。如程序运行了多长时间,或者处于什么状态

创建细节

操作系统运行程序必须做的第一件事是将代码和所有静态数据加载到内存中,加载到进程的地址空间中。程序最初以某种可执行格式驻留在磁盘上。因此,将程序和静态数据加载到内存中的过程。需要操作系统从磁盘读取这些字节,并将它们放在内存中的某处。

在运行任何程序之前,操作系统显然必须做一些工作,才能将重要的程序字节从磁盘读入内存。

操作系统必须为程序的运行时栈分配一些内存。

操作系统也可能为程序的堆分配一些内存。堆用于显式请求动态分配数据,通过相应接口主动释放内存。

操作系统还将做一些其他的I/O相关的任务。

通过将代码和静态数据加载到内存中,通过创建和初始化栈以及执行与I/O设置相关的其他工作,OS现在为程序执行搭好了舞台。然后就是启动程序,在入口处运行。

**从程序到进程**

进程状态

运行(running):在运行状态下,进程正在处理器上运行,这意味着它正在执行指令。

就绪(ready):在就绪状态下,进程已经准备好运行,但由于某种原因,操作系统选择不在此时运行。

阻塞(blocked):在阻塞状态下,一个进程执行了某种操作,直到发生其他事件才会准备运行。

**进程状态**

# 数据结构

人们会将存储关于进程的信息的个体结构称为进程控制块(process control block pcb)

上次更新: 2025/02/15, 13:42:25
最近更新
01
Git问题集合
01-29
02
安装 Nginx 服务器
01-25
03
安装 Docker 容器
01-25
更多文章>
×
×