操作系统核心原理-3.进程管理(上):进程概要

进程管理、内存管理和文件管理是操作系统的三大核心功能,那么什么是进程呢?顾名思义,进程就是进展中的程序,或者说进程是执行中的程序。当一个程序被加载到内存之后就变为了进程。因此,我们可以得到:进程=程序+执行。本篇将会对进程、进程模型、进程状态以及进程的缺陷等进行学习,为后续学习进程调度与进程通信打下坚实基础。

一、进程是什么鬼?

1.1 从工作到进程

  进程在Multics操作系统出现之前被叫做工作(Job),工作是IBM用于多道批处理程序设计中的概念。由于历史原因,Multics操作系统的研发人员不愿意承用IBM发明的术语,于是将工作改为了进程(Process)。

1.2 实现CPU的多道编程

  在计算机发展的初期,单一操作员单一控制终端,CPU使用率很低。为了提高CPU利用率,人们想要将多个程序同时加载到计算里并发执行。于是,这些同时存在于计算机内存中的程序就被称为进程。进程的出现,让每个用户感觉到自己在独占CPU。因此,可以说进程就是为了在CPU上实现多道编程而出现的概念,如下图所示。

  人们发明进程是为了支持多道编程,而进行多道编程的目的则是为了提高计算机CPU的利用率(或者说系统的吞吐量)。例如,如果一个进程有20%的时间使用CPU进行计算,另外80%的时间用来进行I/O,则在单道编程下CPU的利用率只有20%。单如果同时运行两个这样的进程,即使用2道编程,则CPU只在两个进程同时进行I/O时才会处于闲置状态,因此CPU利用率将会提高到:1-0.8*0.8=0.36=>36%。同理,如果同时运行更多的进程,CPU利用率会逐步提高,直到某个临界点为止。(PS:这里的例子忽略了进程切换所需要的系统消耗)

二、进程模型

2.1 三个视角看进程模型

  (1)物理视角:从物理内存的分配来看,每个进程占用一片内存空间,从这点上看,进程其实就是内存的某片空间。由于在任意时刻,一个CPU只能执行一条指令,因此任意时刻在CPU上执行的进程只有一个,而到底执行哪条指令是由物理程序计数器指定。因此,在物理层面,所有进程共用一个程序计数器,只是CPU在不停地做进程切换

  (2)逻辑视角:从逻辑层面来看,每个进程都可以执行,也可以暂时挂起让别的进程执行,之后又可以接着执行。所以,进程需要想办法保持状态才能在下次接着执行时从正确的地点开始。因此,每个进程都有自己的计数器,记录其下一条指令所在的位置。(从逻辑上来说,程序计数器可以有多个)

  (3)时序视角:从时间来看,每个进程都必须往前推进。在运行一定时间后,进程都应该完成了一定的工作量。换句话说,每次进程返回,它都处在上次返回点之后。哲学家有云:“一个人不能两次踏入同一条河流”。

2.2 进程模型如何实现

  (1)物理基础:进程的物理基础是程序,程序又运行在计算机上,因此计算机上要运行程序首先要解决进程的存储:给进程分配内存,使其安身立命。由于多个进程可能同时并存,因此需要考虑如何让多个进程共享同一个物理内存而不发生冲突。OS通过内存管理来解决这个问题。

  (2)进程切换:进程运行实际上是指进程在CPU上执行,那么如何将CPU在多个进程之间进行切换也是一个问题。OS通过进程调度来解决这个问题。所谓进程调度,就是决定在什么时候让什么进程来使用CPU。

三、进程的层次与状态

3.1 进程的层次结构

  一个进程在执行过程中可以通过系统调用创建新的进程,这个新的进程就称为子进程,而创建子进程的进程则被称为父进程

  子进程又可以再创建子进程,于是这样子子孙孙地创建下去就形成了所谓的进程树

3.2 进程的状态转换

  基本的进程状态主要有3种:执行、阻塞和就绪,如下图所示:

  那么,进程被挂起阻塞有哪些原因呢?首先是一个进程在运行过程中执行了某种阻塞操作,例如读写磁盘。(由于阻塞操作需要等待结果后才能继续执行,因此OS将把这个进程挂起,让其他进程运转)其次是一个进程执行的时间太长了,为了公平,OS将其挂起从而让其他进程也有机会执行。

PS:当然,上述阐述的3种典型状态并不是唯一的分类方式,事实上,许多商业OS的进程都不止3个,比如Windows的进程就有7种状态。

四、进程管理概要

4.1 需要的手段

首先看看一个人的出生对一个社会来说意味着什么?在一个人出生后,医院需要为其建立记录,该记录包括诸如姓名、性别、体重、父母信息、何时何地出生等信息,然后会通过该记录来登记户口,办理身份证等等。办完手续之后,这个人就正式存在,称为一个公民。当然,我们得goverment就可以对这个人进行各种管理了,比如你不能乱说话,不能乱游行等等。

  与一个社会管理人的过程类似,OS要管理进程就需要维护进程的一些信息,OS用于维护进程记录的结构就是进程表或进程控制块(Process Control Block,PCB)。那么进程表里有什么记录呢?一般来说,维护的记录应该包含:寄存器、程序计数器、状态字、栈指针、优先级、进程ID、创建时间、所耗CPU时间、当前持有的各种句柄等等。

4.2 创建的过程

  一般来说,OS创建进程的步骤如下图所示:

  在不同的OS中,创建进程的方法也不同,例如Windows中是通过系统调用完成进程创建的,这个系统调用就是CreateProcess。

4.3 处理的问题

  人类社会最大的问题就是资源分配,进程管理的最大问题也是如此。虽然进程没有自我意识,但我们的本性还是追求公平的。除了公平,还需要考虑:效率。于是,公平与效率就成了进程管理中永恒的主题。

4.4 进程的缺陷

  假定有两部都很好地岛国爱情动作片,都只放映一次,以后就再也不放映了。而且,这两部片子还是同时放映(狗血剧情啊!),还在两个不同的小房间放映。而你在同一时间只能做一件事情,所以你不得不放弃另外一部。进程亦是如此,这也是进程的缺点,如果想要同时做两件或多件事情,进程就不够用了。并且,如果进程在执行的过程中发生阻塞,例如等待输入,整个进程就将被挂起(暂停),而无法继续执行。这样,即使进程里面有部分工作不依赖于输入数据,也无法推进。

  因此,为了解决上述两个问题,人们发明了线程。

  

  欲知后事如何,还听下回分解。

参考资料

邹恒明,《操作系统之哲学原理》,机械工业出版社

作者:周旭龙

出处:http://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

时间: 2024-07-29 10:21:06

操作系统核心原理-3.进程管理(上):进程概要的相关文章

操作系统核心原理-6.外存管理(上)磁盘基础

计算机是处理数据的机器,而数据就需要有地方存放.在计算机中,可供数据存放的地方并不太多,除了内存之外,最主要的存储数据的媒介就是磁盘.对于大多数计算机领域的人来说,磁盘通常被看做是一种外部设备.可是,对于现代操作系统来说,磁盘是不可或缺的.虽然早期的操作系统可以基于磁带,但由于操作系统复杂性和性能的不断提升,用磁带作为操作系统的载体已经不合时宜,取而代之的是磁盘.由于操作系统需要存放在磁盘上,且操作系统内的文件系统也是基于磁盘,所以,从某种程度来说,磁盘是操作系统不可分割的一部分,理解磁盘将对理

操作系统核心原理-6.外存管理(下)文件系统

一.为何需要文件系统? 磁盘具有大容量.低成本以及持久化的特点,即使发生断电,磁盘上的数据也不会丢失.但是,对于一般用户而言,使用磁盘是非常苦难的,因为他们不知道如何驱动一个磁盘,以及计算数据在磁盘上的存放位置.从上一篇<磁盘基础>可以知道,了解磁盘的各项技术细节将使用户不堪重负. 操作系统是一个魔术师,其提供给用户的就是各种幻想:抽象.进程抽象的是CPU,虚拟内存抽象的是内存,对于磁盘来说,操作系统提供给用户的帮助就是在磁盘外面包裹一层容易使用的抽象,用户直接与这层抽象打交道,而无需了解磁盘

操作系统核心原理-5.内存管理(下):分页内存管理

在上一篇介绍的几种多道编程的内存管理模式中,以交换内存管理最为灵活和先进.但是这种策略也存在很多重大问题,而其中最重要的两个问题就是空间浪费和程序大小受限.那么有什么办法可以解决交换内存存在的这些问题呢?答案是分页,它是我们解决交换缺陷的“不二法门”. 一.分页内存管理 1.1 解决问题之道 为了解决交换系统存在的缺陷,分页系统横空出世.分页系统的核心在于:将虚拟内存空间和物理内存空间皆划分为大小相同的页面,如4KB.8KB或16KB等,并以页面作为内存空间的最小分配单位,一个程序的一个页面可以

进程管理(九)-进程互斥

进程管理(九)-进程互斥 临界区 什么是临界区 不允许多个并发进程交叉执行的一段程序称为临界部分(critical section )或临界区(critical region) 临界区不可能用增加硬件的方法来解决.因此,临界区也可以被称为访问公用数据的那段程序. 为什么要设置临界区 防止进程并发执行的时候,出现冲突,或者由于两个并发进程处于竞争状态,进而导致两者执行顺序不固定,导致程序执行出错. 例子 设计算进程PA,PB共享内存MS. MS分为系统区.进程工作区和数据区.数据区划分成大小相等的

进程管理(十)-进程通信

进程管理(十)-进程通信 什么是进程通信 通信(communication)意味着在进程间传送数据. 低级通信VS高级通信 控制信息的传送.进程间控制信息的交换称为低级通信. 大批量数据传送.进程间大批量数据的交换称为高级通信. 进程的通信的四种方式 主从式 特点: 1.主进程可自由地使用从进程的资源或数据 2.从进程的动作受主进程的控制 3.主进程和从进程的关系是固定的 例子:主从式通信系统的典型例子是终端控制进程和终端进程 会话式 会话方式中,通信进程双方可分别称为使用进程和服务进程.其中,

进程管理(六)-进程的描述

进程管理(六)-进程的描述 进程控制块:进程的PCB 是系统感知进程的唯一实体 程序段:描述进程所要完成的功能 程序操作的数据集:程序在执行时必不可少的工作区和操作对象 PCB PCB是什么 PCB包含有关进程的描述信息.控制信息以及资源信息,是进程动态特征的集中反映. PCB作用 1.系统根据PCB感知进程的存在和通过PCB中所包含的各项变量的变化,掌握进程所处的状态以达到控制进程活动的目的. 2.一个进程的PCB结构都是全部或部分常驻内存的. PCB的生命周期 在创建一个进程时,首先创建其

linux进程管理(5)---进程消亡

一.目的 本文将讲述进程是如何消亡的.一个进程既有父进程又有子进程,因此进程消亡时,既要通知父进程,也要安排好子进程. 当前进程消亡时主要做了三件大事:释放当前进程占用的资源:为当前进程的子进程重新寻找"养父":通知当前进程的父进程,释放当前进程剩下的资源. 当前进程释放掉大多数进程资源后,只保留内核栈.structtask_struct数据结构:剩下的资源由父进程负责释放. linux调用sys_exit().sys_wait4()实现进程的消亡,代码可以在kernel/exit.c

Linux c进程管理—创建进程 system、execl、execlp、fork

Linux c 进程管理:   1.      创建进程:        system函数:         int system(const char*filename);                                                  建立独立进程,拥有独立的代码空间,内存空间                                                  等待新的进程执行完毕,system才返回.(阻塞)          system:

操作系统核心原理-3.进程管理(中):进程调度

PS:在多进程并发的环境里,虽然从概念上看,有多个进程在同时执行,但在单个CPU下,在任何时刻只能有一个进程处于执行状态,而其他进程则处于非执行状态.那么问题来了,我们是如何确定在任意时刻到底由哪个进程执行,哪些不执行呢?这就涉及到进程管理的一个重要组成部分:进程调度,跟随本篇来一起复习下进程调度吧! 一.进程调度基础 1.1 进程调度定义 进程调度是操作系统进程管理的一个重要组成部分,其任务是选择下一个要运行的进程. 1.2 进程调度目标 首先,一般的程序任务分为三种:CPU计算密集型.IO密