什么是进程
操作系统为正在运行中的程序提供的抽象就是进程。
而程序本身是没有生命周期的,它只是磁盘上面的一些指令,是操作系统让这些字节运行起来,让程序发挥作用。
进程一般会使用到内存,寄存器(如:程序计数器),存储设备。
如何同时运行多个进程
通过让一个进程只运行一个时间片,然后切换到其他进程来制造操作系统提供了多个CPU的假象(CPU虚拟化)。
这样带来的潜在开销就是性能损失。
想要实现CPU虚拟化需要利用低级机制+高级智能。
-
低级机制:低级方法或协议(上下文切换)
-
高级智能:操作系统内做出决定的算法(调度策略)
进程的创建
- 操作系统运行程序必须做的第一件事是将代码和所有静态数据加载到内存(进程的地址空间)中。程序最初以某种可执行格式驻留在磁盘上。因此,将程序和静态数据加载到内存中的过程,需要操作系统从磁盘读取这些字节,并将它们放在内存中的某处。
-
将代码和静态数据加载到内存后,操作系统在运行此进程之前还需要为程序的运行时栈分配一些内存。操作系统分配这些内存,并提供给进程。
-
操作系统也可能为程序的堆分配一些内存。在C程序中,堆用于显式请求的动态分配数据。程序通过调用
malloc()
来请求这样的空间,并通过调用free()
来明确地释放它。
进程的状态
-
运行(running):在运行状态下,进程正在处理器上运行。这意味着它正在执行指令。
-
就绪(ready):在就绪状态下,进程已准备好运行,但由于某种原因,操作系统选择不在此时运行。
-
阻塞(blocked):在阻塞状态下,一个进程执行了某种操作,直到发生其他事件时才会准备运行。一个常见的例子是,当进程向磁盘发起I/O请求时,它会被阻塞,因此其他进程可以使用处理器。
Q.E.D.