UNIX操作系统进程

来源:互联网 发布:男士围巾织法 知乎 编辑:程序博客网 时间:2024/06/05 20:49
一、进程的基本概念    1、定义:进程就是一个正在执行的程序。更精确说进程就是一个被加载到内存中,准备运行的程序。    2、进程的分配:        所有进程都是由内核管理的。当一个进程被创建时,内核赋予进程一个标志符,称为PID,或者称为进程ID。内核维护了当前系统所有的进程的列表称为进程表。在进程表中进程由PID为索引。    3、进程执行顺序        进程永远都不会真正的同时进行,执行过程是序列化的。(针对单个处理器)    4、进程的管理(调度器)        调度器维护者所有的进程的列表。调度器每次从进程列表中选择一个进程,并且给与这个进程非常短暂的时间间隔运行的机会,这个给进程得以执行的时间间隔称为**时间片**    5、看起来进程在同时执行的原理(时间片非常小)        首先内核会给每个进程分配相同的初始时间片,然后每一个进程轮番执行相应的时间片时间,一旦分配的时间片用完,调度器将该进程重新放到进程列表中去,由于时间片很小,所以看上去所有的进程看起来都在同时执行。unix通常为10毫秒,linux通常为5-800毫秒    6、处理器时间(CPU时间、进程时间)        包括两部分:用户时间、系统时间        用户时间:程序所花费的时间        系统时间:系统为了维护程序执行所花费的时间(存储进程下一条指定、执行环境等),主要包括内存管理、I/O时间、维护程序执行所需的开销,这部分通常可以忽略。    7、wall time        是指程序开始执行到一直到程序执行完毕所持续的时间。进程运行的时间总量,其值与系统中同时运行的进程数有关  从进程从开始运行到结束,时钟走过的时间,这其中包含了进程在阻塞和等待状态的时间。进程的三种状态为阻塞、就绪、运行。和上述时间的关系是:时钟时间 = 处于阻塞状态时间 + 处于就绪状态时间 +处于运行状态时间;    8、进程和程序的区别        进程:                进程是操作系统环境下用于表示程序在内存环境下的基本执行单元,是操作系统系统分配的基本单元。从用户的角度看,**进程是程序的一个执行过程**,从操作系统的角度看,进程代表的是操作系统分配的内存、CPU时间片等资源的一个基本单位,是为正在执行的程序提供一个运行环境。        程序:            **是一个普通的磁盘文件**,是一个机器代码指令和数据的集合,是一个静态的实体。    可以说,**进程是一个正在运行的程序,进程除了有程序之外,还有包含额外的数据。进程是一个动态的概念,程序是一个静态的概念**    9、进程标志符(PID)        进程标志符用来唯一标志一个进程,是一个无符号整数,从0开始,最大值与系统有关。        特殊PID:            0: 表示空闲进程(交换进程sched/swapper),负责进程的调度,是init进程的父进程,是为一一个运行在内核空间的进程,其他都运行在用户空间            1:表示初始化进程(init)    10、系统调用            系统调用由内核提供,直接执行在内核环境,常见的系统调用有:            fork(): 创建一个进程            exec(): 改变进程正在执行的程序            wait(): 强制暂停一个进程,直到另外一个进程结束            exit():  结束一个进程    11、进程的生命周期        包括进程的产生(fork)、执行、结束;具体:        通过fork向内核发送创建进程请求        创建一个与父进程几乎一弄一样的副本        立即调用exec()函数执行另外一个程序(被调用的程序会替换子进程的进程空间,成为一个除了进程号相同之外的一个全新的进程,之后父子进程就进行各自的事情了,子进程死亡时会释放该进程所有的资源,但是内核还是会保留该进程的一些信息,包括pid,退出状态、运行时间等,直到父进程调用wait/waitpid()调用获取才释放,否则就是一个僵死进程)         当任务完成之后子进程可以自我调用exit()终止自身的运行。或者其他进程使用kill()故意终止它。        12、shell脚本            shell是一个特殊的进程,是内核的一种外壳,可以通过shell间接操作内核。            分为内部命令、外部命令            内部命令直接存在shell中,外部命令存储在另外的磁盘中。unix将绝大多数命令存在磁盘中,也就是外部命令。            **内部命令执行时(比如ls)shell直接解释即可,外部命令调用时,shell进程会通过fork()命令来创建一个子进程,然后子进程执行exec()命令来执行/bin/ls命令文件,此时子进程的进程空间就会被ls取代,该进程将执行ls命令文件内的程序。而shell进程会使用wait()系统调用来等待ls命令执行结束。当ls进程结束,内核会唤醒shell进程,shell进程将会将ls进程从进程表中清除。最后shell从其暂停点继续执行,继续接受用户输入。**    13、进程的状态        六种状态:            运行(O,operation):进程正在处理器上运行            睡眠(S,sleep):进程正在等待某个时间的发生而处于暂停执行的状态。比如等待I/O完成,等待缓存空间            就绪(R,ready):进程已经分配到除了处理之外所有必要的资源,具备了执行的所有条件。可能有多个进程处于就绪状态,排成就绪队列;            终止(W):进程接收到终止信号而停止运行。            僵死(Z):进程已终止,但是仍然存在于进程表中,知道父进程调用wait()系统调用后释放            挂起(T): 挂起状态,由作业控制信号或者因追踪而别挂起    14、孤儿进程和僵死进程            孤儿进程:                父进程意外死亡,那么子进程就成了孤儿进程了,等孤儿进程结束之后无法唤醒父进程替他“收尸”,那孤儿进程就一直留在进程表里面等待系统重启                unix改善了这一机制,我们知道init进程是1,是最古老的进程,该进程可以收养它的子孙,也就是孤儿进程,替原来的父进程处理子进程结束之后的善后工作。            僵死进程:                如果父进程没有死,但是当子进程向父亲发送sigchild信号的时候父进程没有理会,那么这时候子进程就成了僵死进程。                内核会保存僵死进程的一些死亡信息,唯一清除的办法就是杀死父进程,让子进程称为孤儿进程,让init进程处理子进程善后的事情。    15、谁是第一个进程        当然是pid为0的进程啦,该进程称为sched或者swapper,是真正的进程老祖宗,但是它不是由fork创建的。    16、区分子进程和父进程        fork()函数有两个返回值,对于父进程来说,返回的是子进程的pid,但是对于子进程来说返回的永远是0.    17、前台进程和后台进程        前台进程:用户必须等待正在执行的进程结束,才![这里写图片描述](http://img.blog.csdn.net/20170916213541080?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjc1NTIwNzc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)可以获得控制台的操作,比如之前的shell命令        后台进程:后台进程不需要控制台,进程会自己执行,完成任务后自动退出,做法是在命令后面加上 &字符    18、守候进程        是指一类特殊的后台进程,它独立于控制终端,并且周期性地执行任务,或者等待某个时间的发生,大多数后台进程以系统服务的形式存在,例如一个Apache HTTP Server就是一个守候进程。二、监视进程    1、基本的ps命令        查看进程状态        ![这里写图片描述](http://img.blog.csdn.net/20170916213607518?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjc1NTIwNzc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)        -a:列出与任何用户标识和终端相关的进程信息![这里写图片描述](http://img.blog.csdn.net/20170916214318653?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjc1NTIwNzc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)             -A(All) : 列出所有进程,包括守候进程        -e : 与A相同        -f(full) : 列出每个进程的完成信息        ![这里写图片描述](http://img.blog.csdn.net/20170916214158445?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjc1NTIwNzc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)    -l(long) 以长格式显示进程![这里写图片描述](http://img.blog.csdn.net/20170916214436074?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjc1NTIwNzc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)    -p(process) 显示指定进程的进程号    ![这里写图片描述](http://img.blog.csdn.net/20170916214601316?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjc1NTIwNzc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)    -u(user) 显示指定用户的ID进程    -t 只显示与某个终端相连的进程信息    常用的组合    -ef 完整的形式查看所有的进程    -a 列出所有非守护进程信息    -t ?只显示守候进程信息
三、常见进程调度算法 1、进程调度的功能 A)记录系统中所有进程的状态、优先级数、资源的需求情况 B)确定调度算法,决定将cpu分配给哪个进程,分配多少时间 C)分配处理机给进程,进行cpu现场保护和移交 2、调度层次 作业调度: 从外存中选取一个作业,分配内存等资源,使其有竞争处理机的权利 中级调度(内存调度) 使哪些不能运行的进程调至外存,此时称为挂起状态 进程调度 从就绪列表中选取一个进程,分配其处理机 3、常见进程调度算法 A)时间片轮转法(RR)

 时间片轮转法(RR)

算法描述:用于分时系统中的进程调度。每次调度时,总是选择就绪队列的队首进程,让其在CPU上运行一个系统预先设置好的时间片。一个时间片内没有完成运行的进程,返回到绪队列末尾重新排队,等待下一次调度。

【例】进程A、B、C、D需要运行的时间分别为20ms、10 ms、15 ms、5 ms,均在0时刻到达。到达的先后次序为A、B、C、D。如果时间片分别为1 ms和5ms,计算各个进程的带权周转时间和平均带权周转时间。

 

分析 在掌握了时间片轮转法概念的基础上,我们可以用一个执行时间图来形象地表示作进程的执行情况,帮助我们理解此题。具体如下:


根据执行时间图就可以计算各个进程的带权周转时间和平均带权周转时间了。这里要注意的是,要记住带权周转时间和平均带权周转时间的算术公式:

带权周转时间W,即:

 W = T/R

其中T为周转时间,R为实际运行时间。

平均带权周转时间为:


解:采用时间片轮转法进行调度,算法的性能指标如下:

到达时间

到达时间

运行时间

开始时间

完成时间

周转时间

带权

周转时间

时间片=1

A

0

20

0

50

50

2.5

B

0

10

1

34

34

3.4

C

0

15

2

45

45

3.0

D

0

5

3

20

20

4.0

平均周转时间=37.25      平均带权周转时间=3.225

时间片=5

A

0

20

0

50

50

2.5

B

0

10

5

30

30

3.0

C

0

15

10

45

45

3.0

D

0

5

15

20

20

4.0

平均周转时间=36.25      平均带权周转时间=3.125

 

 


B)FCFS(先到先执行)
很简单,谁先到就先执行谁
问题:
设一个系统中有5个进程,它们的到达时间和服务时间如下,A的到达时间为0,服务时间为3;B的到达时间为2,服务时间为6;C的到达时间为4,服务时间为4;D的到达时间为6,服务时间为5;E的 到达时间为8,服务时间为2,忽略1/0以及其他开销时间,若分别按先来先服务(fFCFS)进行CPU调度,其平均周转时间为?
进程名 到达时间 服务时间 开始执行时间 完成时间 周转时间

A 0 3 0 3 3

B 2 6 3 9 7

C 4 4 9 13 9

D 6 5 13 18 12

E 8 2 18 20 12

周转时间 = 完成时间 - 到达时间

平均周转时间 = 所有进程周转时间 / 进程数 = (3+7+9+12+12)/ 5 = 8.6

C)多级反馈
多级反馈队列调度算法
(1) 设置多个就绪队列,并为各个队列赋予不同的优先级. 第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低.
该算法赋予各个队列中进程执行时间片的大小也各不相同:
在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小.
例如:第二个队列的时间片要比第一个队列的时间片长一倍,……,第i+1个队列的时间片要比第i个队列的时间片长一倍.
(2) 当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度.当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行;如果它在第二队列中运行一个时间片后仍未完成,再依次将它放入第三队列,……,如此下去,当一个长作业(进程)从第一队列依次降到第n队列后,在第n队列中便采取按时间片轮转的方式运行.
(3) 仅当第一队列空闲时,调度程序才调度第二队列中的进程运行; 仅当第1~(i-1) 队列均空时,才会调度第i队列中的进程运行.如果处理机正在第i队列中为某进程服务时,又有新进程进入优先权较高的队列(第1~(i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i队列的末尾,把处理机分配给新到的高优先权进程.?
性能
(1)终端型作业用户
(2) 短批处理作业用户
(3) 长批处理作业用户
满足了多数用户的需求
D)优先权
优先权调度算法
1,优先权调度算法的类型
非抢占式优先权算法
在这种方式下,系统一旦把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直至完成; 或因发生某事件使该进程放弃处理机时,系统方可再将处理机重新分配给另一优先权最高的进程.这种调度算法主要用于批处理系统中;也可用于某些对实时性要求不严的实时系统中.
抢占式优先权调度算法
系统同样把处理机分配给优先权最高的进程,使之执行.但在其执行期间,只要又出现了另一个其优先权更高的进程,进程调度程序就立即停止当前进程(原优先权最高的进程)的执行,重新将处理机分配给新到的优先权最高的进程.
这种抢占式的优先权调度算法,能更好地满足紧迫作业的要求,常用于要求比较严格的实时系统中, 以及对性能要求较高的批处理和分时系统中.
2,优先权的类型
(1) 静态优先权
静态优先权是在创建进程时确定的,且在进程的整个运行期间保持不变.
一般地,优先权是利用某一范围内的一个整数来表示的,例如,0~7或0~255中的某一整数, 又把该整数称为优先数.只是具体用法各异:有的系统用”0”表示最高优先权,当数值愈大时,其优先权愈低;而有的系统恰恰相反.
确定进程优先权的依据有如下三个方面:
1.进程类型.(系统进程/用户进程)
2.进程对资源的需求.(需求量的大小)
3.用户要求.(用户进程紧迫程度)
(2) 动态优先权
动态优先权是指在创建进程时所赋予的优先权,可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能.
例如,我们可以规定,在就绪队列中的进程,随其等待时间的增长,其优先权以速率a提高.若所有的进程都具有相同的优先权初值,则显然是最先进入就绪队列的进程,将因其动态优先权变得最高而优先获得处理机,此即FCFS算法.
优先权的变化规律可描述为:
由于等待时间与服务时间之和,就是系统对该作业的响应时间,故该优先权又相当于响应比RP.据此,又可表示为:
3,高响应比优先调度算法
由上面的式子可以得到以下结论:
(1) 如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而该算法有利于短作业.
(2) 当要求服务的时间相同时,作业的优先权决定于其等待时间,等待时间愈长,其优先权愈高,因而它实现的是先来先服务.
(3) 对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高, 从而也可获得处理机.
该算法照顾了短作业,且不会使长作业长期得不到服务

原创粉丝点击