LinuxLinux操作系统操作系统第第0505章章进程与任务管理进程与任务管理第第55章章进程与任务管理进程与任务管理程序、进程、作业和任务的概念程序、进程、作业和任务的概念LinuxLinux操作系统的启动过程操作系统的启动过程进程状态及转换进程状态及转换进程调度、信号与软中断进程调度、信号与软中断进程调度命令进程调度命令图形界面下的进程管理图形界面下的进程管理5.15.1程序和进程的概念程序和进程的概念操作系统的重要任务之一是使用户充分、有效地操作系统的重要任务之一是使用户充分、有效地利用系统资源,也就是在系统资源一定或有限的利用系统资源,也就是在系统资源一定或有限的情况下,要同时执行更多程序,高效率地完成更情况下,要同时执行更多程序,高效率地完成更多的任务。多的任务。进程、作业和任务调度是操作系统的重要任务之进程、作业和任务调度是操作系统的重要任务之一。一。本章的主要内容是从系统的外部来观察系统中与本章的主要内容是从系统的外部来观察系统中与进程进程(process)(process)和作业和作业(job)(job)或任务或任务(task)(task)相关的行相关的行为,并实施某些控制让系统工作的更好,或按照为,并实施某些控制让系统工作的更好,或按照用户的意图来完成指定工作。用户的意图来完成指定工作。5.1.15.1.1程序、进程、作业和任务程序、进程、作业和任务程序(程序(programprogram))是一个存储在存储介质上的文是一个存储在存储介质上的文件。件。进程(进程(proccessproccess))是一个程序的执行过程。是一个程序的执行过程。作业作业(job)(job)或任务或任务(task)(task)是用户需要计算机完成某项是用户需要计算机完成某项任务时要求计算机所做工作的集合,一个作业可任务时要求计算机所做工作的集合,一个作业可能需要几个程序联合完成。能需要几个程序联合完成。作业和进程主要的区别与关系如下:作业和进程主要的区别与关系如下:作业是用户向计算机提交的任务实体;作业是用户向计算机提交的任务实体;一个进程是作业或任务的某个执行过程;一个进程是作业或任务的某个执行过程;一个作业可由多个进程组成。一个作业可由多个进程组成。程序与进程程序与进程的区别的区别进程进程不等同于程序,它由程序产生;程序不等同于程序,它由程序产生;程序是一个静态的指令集合,不占用系统的运是一个静态的指令集合,不占用系统的运行资源。行资源。而进程是一个随时都可以发生变化的,动而进程是一个随时都可以发生变化的,动态的、使用系统资源的、正在执行着的程态的、使用系统资源的、正在执行着的程序。序。5.1.25.1.2三类进程三类进程前台进程:前台进程:是指用户直接控制的用于完成某个任务的进程,因此是指用户直接控制的用于完成某个任务的进程,因此也叫终端交互式进程。它从标准输入读数据,向标准也叫终端交互式进程。它从标准输入读数据,向标准输出写数据,将错误信息输出到标准错误。也可以是输出写数据,将错误信息输出到标准错误。也可以是用户直接交互控制的完成某种功能的程序。用户直接交互控制的完成某种功能的程序。后台进程后台进程是指在系统后台运行的、不与用户交互进程。是指在系统后台运行的、不与用户交互进程。前台的进程也可放在后台运行,这时可能要用到输入前台的进程也可放在后台运行,这时可能要用到输入输出的重定向。输出的重定向。守候进程也叫服务器或精灵进程,它是后台进程的一守候进程也叫服务器或精灵进程,它是后台进程的一种。种。批处理进程批处理进程是用户按照某种意图将一批作业和任务通过编程的方是用户按照某种意图将一批作业和任务通过编程的方法提交给系统,让系统在某个合适的时间来调度和执法提交给系统,让系统在某个合适的时间来调度和执行的进程。行的进程。进程的分类进程的分类FedoraFedora系统中的进程可以分为三类:系统中的进程可以分为三类:交互进程:由交互进程:由ShellShell启动,可在前台运行,也启动,可在前台运行,也可在后台运行可在后台运行批处理进程:是一个进程序列批处理进程:是一个进程序列守护进程:随守护进程:随FedoraFedora启动,在后台运行,常启动,在后台运行,常为为LinuxLinux的某项服务,如的某项服务,如httpdhttpd((WebWeb服务)服务)5.1.3Linux5.1.3Linux操作系统的启动操作系统的启动LinuxLinux的启动是通过加电和系统自检后,将主引导的启动是通过加电和系统自检后,将主引导程序程序MBRMBR装入内存并把控制权交给它。装入内存并把控制权交给它。在在MBRMBR的控制下装入的控制下装入LinuxLinux的引导程序的引导程序LBRLBR并把控并把控制权交给它。制权交给它。在在LBRLBR的控制下系统继续引导,的控制下系统继续引导,核心装入内存。核心装入内存。系统开始进一步的初始化过程:首先初始化系统系统开始进一步的初始化过程:首先初始化系统内部数据结构(比如构造空闲缓冲区、初始化区内部数据结构(比如构造空闲缓冲区、初始化区表结构、页表项等),然后将根文件系统安装到表结构、页表项等),然后将根文件系统安装到根根““//””下,并创建系统的下,并创建系统的0#0#进程、设置它的运行环进程、设置它的运行环境。至此内核启动完成。境。至此内核启动完成。接着继续创建接着继续创建1#1#进程,然后由进程,然后由1#1#进程做进一步的进程做进一步的初始化工作。初始化工作。5.1.40#5.1.40#进程与进程与1#1#进程进程在在UNIXUNIX系统中系统中0#0#进程是唯一只在核心态下执行进程是唯一只在核心态下执行的进程。它的功能有三:调度分配处理机;负责的进程。它的功能有三:调度分配处理机;负责进程交换;初始化时创建进程交换;初始化时创建1#1#进程。在进程。在LinuxLinux系统系统中,中,0#0#进程在创建出进程在创建出1#1#进程后,变成了空闲进程进程后,变成了空闲进程((IdlerIdler),),当系统中没有其它进程就绪时运行。当系统中没有其它进程就绪时运行。1#(init)1#(init)进程是系统启动时创建的创建进程的进进程是系统启动时创建的创建进程的进程。它的主要作用是根据程。它的主要作用是根据/etc//etc/inittabinittab的内容创建系的内容创建系统运行所需的进程。系统初始化完成后,统运行所需的进程。系统初始化完成后,1#1#进程进程了变成回收进程,专门领养没有父进程的孤儿进了变成回收进程,专门领养没有父进程的孤儿进程或回收状态为程或回收状态为ZOMBIEZOMBIE的僵尸进程。的僵尸进程。LinuxLinux的进程树的进程树0#0#进程创建了进程创建了1#1#进程,它是进程,它是1#1#进程的父进程的父进程。进程。1#1#进程在系统启动过程中创建了系进程在系统启动过程中创建了系统所需要的其它进程。而子进程又可创建统所需要的其它进程。而子进程又可创建属于自己的子进程。因此除属于自己的子进程。因此除0#0#进程外,进程外,1#1#进程是其它所有进程的祖先进程。进程是其它所有进程的祖先进程。5.1.55.1.5进程及运行模式进程及运行模式在在UNIX/LinuxUNIX/Linux系统中,进程可在用户态和系统中,进程可在用户态和核心态两种执行模式下执行。核心态两种执行模式下执行。当用户进程需要系统核心提供服务而由用当用户进程需要系统核心提供服务而由用户态转向核心态执行时,需要依靠中断或户态转向核心态执行时,需要依靠中断或陷阱机制来实现,这时要切换处理机陷阱机制来实现,这时要切换处理机((CPUCPU))的工作状态。两种状态之间的主要的工作状态。两种状态之间的主要区别是,核心态下的进程具有较高的优先区别是,核心态下的进程具有较高的优先级,能够存取核心和用户数据。而用户态级,能够存取核心和用户数据。而用户态下的进程能存取它自己的指令与数据,但下的进程能存取它自己的指令与数据,但不能存取核心指令和数据。不能存取核心指令和数据。5.1.65.1.6进程状态及转换进程状态及转换在操作系统中,一个在操作系统中,一个CPUCPU上同时只能运行一个进上同时只能运行一个进程,但在多用户、多任务环境下,从宏观上来程,但在多用户、多任务环境下,从宏观上来讲,同时运行着很多进程,因此在这些正在运行讲,同时运行着很多进程,因此在这些正在运行着的进程中,在任一时刻只能有一个进程占有处着的进程中,在任一时刻只能有一个进程占有处理机而真正运行。也就是说众多运行着的进程理机而真正运行。也就是说众多运行着的进程中,它们宏观上是并行的,但微观上是串行的。中,它们宏观上是并行的,但微观上是串行的。因此就存在着有的进程在运行,有的进程在等待因此就存在着有的进程在运行,有的进程在等待问题。问题。事实上进程的状态远不只执行和等待两个,还有事实上进程的状态远不只执行和等待两个,还有用户态执行、核心态执行、等待、睡眠、就绪等用户态执行、核心态执行、等待、睡眠、就绪等状态。状态。UNIXUNIX系统的进程状态及转换系统的进程状态及转换①进程在用户态运行。①进程在用户态运行。②进程在系统态运行。②进程在系统态运行。③③就绪状态。就绪状态。④进程因等待资源而在④进程因等待资源而在内存中睡眠。内存中睡眠。⑤进程在外存中睡眠。⑤进程在外存中睡眠。⑥⑥外存就绪。外存就绪。⑦进程从系统态返回。⑦进程从系统态返回。⑧进程刚被创建时的状⑧进程刚被创建时的状态。态。⑨⑨僵尸状态。僵尸状态。LinuxLinux系统的进程状态及转换系统的进程状态及转换①就绪状态①就绪状态((执行执行))②②浅度睡眠浅度睡眠③深度睡眠③深度睡眠④停止状态④停止状态⑤僵尸状态⑤僵尸状态5.2UNIX5.2UNIX//LinuxLinux进程调度进程调度UNIX/LinuxUNIX/Linux系统是分时系统,系统给每个进程分系统是分时系统,系统给每个进程分一个时间片,每个进程在自己的时间片内执行,一个时间片,每个进程在自己的时间片内执行,当时间片结束时或从系统服务中返回时,动态计当时间片结束时或从系统服务中返回时,动态计算进程的算进程的““优先级优先级””,若有优先级高于当前进程的,若有优先级高于当前进程的内存就绪态进程时,系统设置调度标识,并在以内存就绪态进程时,系统设置调度标识,并在以后某个时刻剥夺当前进程的执行权,而让优先级后某个时刻剥夺当前进程的执行权,而让优先级高的进程执行。高的进程执行。UNIX/LinuxUNIX/Linux的进程调度按时间片计算的进程调度按时间片计算““优先级优先级””,,并按并按““优先级优先级””的高低来调度进程,使优先级高的的高低来调度进程,使优先级高的进程占有处理机而得到执行。进程占有处理机而得到执行。这里所说的这里所说的““优先级优先级””不是一个具体的数字或变不是一个具体的数字或变量,而是一个衡量优先程度的指标。量,而是一个衡量优先程度的指标。5.2.15.2.1调度策略与优先级的计算调度策略与优先级的计算LinuxLinux把所有进程分成两类:实时进程和普把所有进程分成两类:实时进程和普通进程。通进程。对普通进程采用时间片轮转法来调度进程对普通进程采用时间片轮转法来调度进程的执行,所有就绪进程按先后排成队列,的执行,所有就绪进程按先后排成队列,依次轮转,时间片用完而未完成任务者排依次轮转,时间片用完而未完成任务者排在尾部,如此往复;对于实时进程则采用在尾部,如此往复;对于实时进程则采用FIFOFIFO和时间片轮转进行调度。最后经调度和时间片轮转进行调度。最后经调度模块综合计算出各进程的优先级,优先级模块综合计算出各进程的优先级,优先级最高者获得执行权。最高者