前言
操作系统的主要目标是执行用户程序,但也需要顾及内核之外的各种系统任务。
系统由一组进程组成: 操作系统进程执行系统代码,用户进程执行用户代码。
问题:为什么需要进程?
早期的计算机系统只允许一次执行一个程序,这种程序对系统有完全的控制,能访问所有的系统资源。
现代计算机系统允许将多个程序调入内存并发执行,这一要求对各种程序提供更严格的控制和更好的划分。
这些需求产生了进程的概念,即执行中的程序,进程是现代分时系统的工作单元。
- 多道程序设计 的目的是:无论何时都有进程在运行,从而使
CPU
利用率达到最大化。 - 分时系统 的目的是:在进程之间快速切换
CPU
以便用户在程序运行时能与其进行交互。
本文将围绕这两个问题和一个案例展开:
进程
程序与进程区别: 进程是活动实体
- 程序只是被动实体,如存储在磁盘上包含一系列指令的文件内容(指:可执行文件)。
- 当一个可执行文件被装入内存时,一个程序才能成为一个要执行的命令和相关资源集合。
所以,进程可看做是正在执行的程序
进程需要一定的资源(如
CPU
、时间、内存、文件和I/O
设备)来完成其任务。 这些资源在创建进程或者执行进程时被分配。
进程的组成有:PCB
、程序段、数据段
PCB
(进程控制块,process control block
): 保存进程运行期间相关的数据,是进程存在的唯一标志。- 程序段: 能被进程调度程序调度到
CPU
运行的程序的代码段。 - 数据段: 存储程序运行期间的相关数据,可以是原始数据也可以是相关结果。
进程在执行时会改变状态,进程的状态有 5 种:
- 创建:进程正在被创建。
- 运行:指令正在被执行。
- 等待:阻塞,进程等待某个事件的发生(如
I/O
完成或收到信号)。 - 就绪:进程等待分配处理器。
- 终止:进程完成执行。
Tips
:将CPU
切换到另一个进程需要保存当前进程的状态并恢复另一个进程的状态,这一任务称为上下文切换(context switch
) 。
在 Linux
中可通过 top
和 ps
工具查看进程状态: