《现代操作系统》读书笔记之进程一

时间:2022-08-28 14:25:56

工作几年,越来越感觉到操作系统的重要性,记得在上课时老师说过一句话。工作几年后,必须得返回来看看操作系统,会有与学生时代不一样的理解。看到别人都在写写博客,自己也手痒想尝试下。仅仅代表自己的理解,如有错误之处,敬请指出。

1:进程
在该书中对进程的定义:在进程模型中,计算机上所有可以运行的软件,通常也包括操作系统,被组织成若干顺序进程,简称为进程。一个进程就是一个正在执行程序的实例,包括程序计数器,寄存器和变量的当前值。
进程模型的核心思想就是:一个进程是某种类型的一个活动,它有程序,输入,输出以及状态。单个处理器可以被若干进程共享,它使用某种调度算法决定何时停止一个进程的工作,并转而为另一个进程提供服务。
一个CPU在同一时间只能真正一次运行一个进程,所以在单核时代多进程其实就是每个进程拥有一个虚拟CPU,并不是严格上的多进程,只有拥有两个核或者以上,才能真正实现多进程。
每个进程负责管理自己的资源,比如程序计数器,内存等信息,而实际上在物理上只有一个。

2:创建进程
在我做实际项目中,有些在应用系统中其实只运行一个应用进程(比如华为S系列交换机,其实内在只是启动了一个vos.o,从而避免了复杂的进程交互,较少进程切换,增加实时性),将进程的创建放在系统启动。
该书指出一般进程的创建主要有四种方法:
1:系统初始化
2:执行了正在运行的进程所调用的进程创建系统调用(syscall)
3:用户请求创建一个新进程
4:一个批处理作业的初始化。
其中在系统启动时,创建进程,一般都是称之为守护进行(daemon).
新的进程也可以后创建。一个正在运行的进程实际上会经常发出系统调用,以创建一个或多个新进程进行协助其工作。在所要从事的工作可以容易地划分成若干相关的但没有相互作用的进程,创建新的进程就特别效果。在参加的一个交换机多核项目中,就利用了该书的这种方法,为了提高交换机上处理协议的能力,专门在一个cpu的进行数据的收发,然后交给其他cpu进行业务上的处理。
在有些交互式系统中,输入一个命令或者双击也可以启动一个进程。
最后一种,一般在大型机上用到。
从上面可以看出,新进程一般都是由于一个已存在的进行执行了创建进程的系统调用而创建。在linux系统中一般都是调用fork(后面将会开专题并结合实验来讲)。它会将所有父进程的资源做一个相同的副本,存储映像。文件描述符等完全一样。通常,子进程接着执行execue等,以修改其其存储映像并运行一个新的进程。

3:进程终止
在该书中指出,进程终止主要由以下几种情况:
1:正常退出(自愿的)
2:出错退出(自愿的)
3:严重错误(非自愿的)
4:被其他进程杀死(非自愿的)
正常退出:进程正常完成其工作而终止。
出错退出:比如用户输入命令行时,输入一个错误参数等。
严重错误:程序内存时, 出现非法指令,引用不存在的内存,除数为零时,段错误(page fault)等等。
被其他进程杀死:其让他进程通过调用系统调用,kill掉进程。

4:进程状态
每个进程在任意时刻都有自己的状态。
一般在操作系统中,进程主要有三种状态:就绪,运行,堵塞。
《现代操作系统》读书笔记之进程一

在该书中,状态1, 2, 3 ,4标注的不是很好。我将按照自己的理解,从进程创建开始来讲。
当新的进程被创建完成时,就会处于就绪状态,等待系统调度器 被调到。如果该进程被操作系统调度到将会处于运行状态,即就是图中的3转换过程。
当进程处于运行状态时,如果在进程中调用了堵塞函数,比如一个进程可以执行诸如pause的系统调用来进程堵塞状态, 或者从一个设备文件中读取数据时,没有数据输入,都会进入堵塞状态。就是状态1.
在程序处于运行状态时,操作系统认为一个运行进程占用处理器的实际过长(时间轮转片算法),就会有调度器决定,让出cpu使用权,使其他进程运行。这时进程将会从运行态进入到就绪态。就是状态2. 如果系统时按照优先级抢占式的,该进程将会被一个高优先级的进行抢占,从而进入到就绪态。
处于堵塞态的进行,如果所等待的外部事件发生,比如用户输入数据,该进程将会进入就绪态,即是4,等待调度器对该进程的调度。

下一节将会讲叙fork,以及做些小实验对其进程理解。