zoukankan      html  css  js  c++  java
  • 操作系统-4-进程管理(一)

    一、进程的基本概念

        1 程序的顺序执行与并发执行

          (1)前驱图

            概念:前驱图是一个有向无循环图,记为DAG,可用于描述进程之间执行的前后关系。无循环关系可实现顺序执行。

               结点:一个程序段、进程或一条语句;
               有向边:两个结点之间的前趋关系;
               重量:结点所含有的程序量或执行时间;
               直接前驱、直接后继、开始结点、终止结点

              

              以上前趋图,存在的前趋关系:P1→P2,P1→P3,P1→P4,P2→P5,P3→P5,P4→P6,P4→P7,P5→P8,P6→P8,P7→P9,P8→P9;
              或表示为:P={P1,P2,P3,P4,P5,P6,P7,P8,P9} →={(P1,P2),(P1,P3),(P1,P4), (P2,P5),(P3,P5),(P4,P6), (P4,P7),(P5,P8),(P6,P8), (P7,P9),(P8,P9)}

              注意:前趋图中必须不存在循环。如下图不是前趋图:

                

          (2)程序的顺序执行

              程序的顺序执行如图:

                

              在计算机系统中只有一个程序在运行,这个程序独占系统中所有资源,其执行不受外界影响。一道程序执行完后另一道才能开始。

              特征:顺序性:一个程序开始执行必须要等到前一个程序已执行完成。
                 封闭性:程序运行时独占计算机资源,资源的状态只能由本程序修改。程序一旦开始执行,其计算结果不受外界因素影响。
                 可再现性:程序的结果与它的执行速度无关(即与时间无关),只要给定相同的输入,一定会得到相同的结果。
              程序顺序执行处理器利用率举例:

                 

          (3)程序的并发执行

              概念:所谓程序的并发执行是指:若干个程序同时在系统中执行,这些程序的执行在时间上是重叠的,一个程序的执行尚未结束,另一个程序的执行已经开始。

                  
              特征:间断性
                 失去程序的封闭性:程序在并发执行时,是多个程序共享系统中的资源,因此这些资源的状态将由多个程序来改变。
                 不可再现性
        2 进程的定义

          定义:进程是可并发执行的程序在一个数据集合上的运行过程。进程是指进程实体的运行过程。

          性质:进程是一个程序与其数据一道通过处理机的执行所发生的活动。进程是指进程实体的运行过程,是系统进行资源分配和调度的独立单位

          进程同程序的比较:程序是指令的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。

                   程序是静态的,进程是动态的;

                   程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的;

                   进程更能真实地描述并发,而程序不能;

                   进程是由程序和数据、进程控制块PCB三部分组成的;

                   进程具有创建其他进程的功能,而程序没有;

                   同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程。也就是说同一程序可以对应多个进程 ;
        3 进程的特征

          结构性:由程序(段)、数据(段)、进程控制块(PCB)三部分组成;
          动态性:进程是程序的执行过程;
          并发性:多个进程可同存于内存中,能在一段时间内同时运行;
          独立性:独立运行的基本单位,独立获得资源和调度的基本单位;
          异步性:各进程按各自独立的不可预知的速度向前推进。
        4 进程的状态及转换

          概念:不同系统设置的进程状态数目不同,进程有三种基本状态,进程在生命消亡前处于且仅处于三种基本状态之一。
          进程的三种基本状态:

            就绪状态(Ready):存在于处理机调度队列中的所有进程,它们已经准备就绪,一旦得到CPU,就立即可以运行。这些进程所处的状态为就绪状态。
                        就绪队列:处于就绪状态的进程按一定的策略排队,同一时刻可有多个就绪队列。

            运行状态(Running):正在运行的进程所处的状态为运行状态。单处理机系统只有一个进程处于该状态,多处理机系统有多个进程处于运行状态
            等待/阻塞/睡眠/封锁状态(Wait/Blocked):若一进程正在等待某一事件发生(如等待输入输出工作完成),

                             这时,即使给它CPU,它也无法运行,称该进程处于等待状态(阻塞、 睡眠、封锁状态)。
                                    阻塞队列:根据阻塞原因可以设置多个队列。

            进程的状态变迁图:

                 

                如果系统中有N个进程,运行的进程最多1个,最少1个;就绪进程最多N-1个最少1个;等待进程最多N-2个,最少0个;

          进程的五状态模型

            

            新建态:对应进程刚被创建的状态。为一个新进程创建必要的管理信息,它并没有被提交执行,而是在等待操作系统完成创建进程的必要操作。

            终止态:等待操作系统进行善后,然后,退出主存。
                进入终止态的进程不再执行,但依然临时保留在系统中等待善后。一旦其他进程完成了对终止态进程的信息抽取之后,系统将删除该进程。
            进程状态转换的具体原因:NULL→新建态:创建一个子进程。
                          新建态→就绪态:系统完成了进程创建操作,且当前系统的性能和内存的容量均允许。
                          运行态→终止态:一个进程到达自然结束点,或出现了无法克服的错误,或被操作系统所终结,或被其他有终止权的进程所终结。
                        终止态→NULL:完成善后操作。
                        就绪态→终止态:某些操作系统允许父进程终结子进程。
                        等待态→终止态:某些操作系统允许父进程终结子进程。

          进程的七状态模型

             

             挂起就绪态(ready suspend):进程具备运行条件但目前在二级存储器中,当它被对换到主存才能被调度执行。
             挂起等待态(blocked suspend):进程正在等待某一个事件且在二级存储器中。

             引入挂起状态的原因:终端用户的请求:挂起某些可疑进程。
                       父进程请求:父进程需挂起某子进程。
                       负荷调节的需要:实时系统中挂起某些不重要的进程。
                       操作系统的需要:OS挂起某些进程,以便检查资源的使用情况等。

             具有挂起状态的状态转换:等待态→挂起等待态:当前不存在就绪进程,至少一个等待态进程将被对换出去成为挂起等待态;
                         挂起等待态→挂起就绪态:引起进程等待的事件发生之后,相应的挂起等待态进程将转换为挂起就绪态。

                         挂起就绪态→就绪态:内存中没有就绪态进程,或挂起就绪态进程具有比就绪态进程更高的优先级,将把挂起就绪态进程转换成就绪态。
                         就绪态→挂起就绪态:系统根据当前资源状况和性能要求,决定把就绪态进程对换出去成为挂起就绪态。

             挂起进程具有如下特征:该进程不能立即被执行。
                        挂起进程可能会等待事件,但所等待事件是独立于挂起条件的,事件结束并不能导致进程具备执行条件。
                        进程进入挂起状态是由于操作系统、父进程或进程本身阻止它的运行。
                        结束进程挂起状态的命令只能通过操作系统或父进程发出。
        5 进程控制块(PCB)

          概念:为了描述一个进程和其它进程以及系统资源的关系,为了刻画一个进程在各个不同时期所处的状态,采用了一个与进程相联系的数据结构,称为进程控制块。
             PCB是OS中最重要的记录型数据结构。
          功能:将一个不能独立运行的程序变成一个可以独立运行的基本单位,一个能与其他进程并发执行的进程。

          特征:OS利用PCB来对并发执行的进程进行控制和管理,PCB是OS感知进程存在的唯一标志。
             进程与PCB是一一对应的。
             PCB随进程创建而建立,随进程结束而回收。
             PCB应常驻内存。

          内容:

             进程描述信息:进程标识符(process ID):唯一,通常是一个整数
                    进程名:通常基于可执行文件名(不唯一)
                    用户标识符(user ID):进程组关系

             进程控制信息:当前状态
                    优先级(priority)
                    代码执行入口地址
                    程序的外存地址
                    运行统计信息(执行时间、页面调度)
                    进程间同步和通信;阻塞原因
                    进程的队列指针
                    进程的消息队列指针

             所拥有的资源和使用情况:虚拟地址空间的现状、打开文件列表
             CPU现场保护信息:寄存器值(通用、程序计数器PC、状态字PSW,地址包括栈指针)、指向赋予该进程的段/页表的指针

          PCB表组织方式:系统把所有PCB组织在一起,并把它们放在内存的固定区域,就构成了PCB表。
                          PCB表的大小决定了系统中最多可同时存在的进程个数,称为系统的并发度。 

                  链接结构:相同状态的进程PCB组成一个链表,不同状态对应多个不同的链表。就绪链表、阻塞链表

                       

                  索引结构:对具有相同状态的进程,分别设置各自的PCB索引表,表明PCB在PCB表中的地址。

                       

    二、进程控制

        1.概念:进程控制指对系统中的所有进程实施管理。
                如:创建一个新进程;
                      终止一个已完成的进程;
                      终止一个因某事件而使其无法运行下去的进程;
                      进程运行中状态的转换
                      …
            进程控制一般由OS的内核来实现。
        2.OS的内核的功能:不同OS的内核包括功能不同,但都包括:支撑功能
                                      中断处理:内核最基本的功能。如:系统调用 进程调度等
                                    时钟管理:
                                    原语操作:实现进程通信和控制。
                                    资源管理功能:进程管理、存储器管理、设备管理
        3.原语

            概念:由多条指令组成,是一种特殊的系统功能调用,它可以完成一个特定的功能。
            特点:执行时不可中断
               不可并发
               在管态下执行,常驻内存

            常用的进程控制原语:创建原语 Create
                      终止原语 Destroy
                      阻塞原语Block、唤醒原语Wakeup
                      挂起原语Suspend、激活原语Active

        4.进程的创建流程:申请空白PCB
                  为新进程分配资源  如内存
                  初始化PCB  
                  将新进程插入就绪队列
        5.进程的终止流程:根据被终止进程的标识符,从PCB集合中检索出该进程的PCB;
                  若被终止进程处于执行状态,应立即终止执行,并置调度标志为真,调度其他进程;
                  结束该进程所有子孙进程的执行,以防止成为不可控进程;
                  将进程所拥有的资源交给父进程或系统进程;
                  释放PCB 。
        6.进程终止的事件:正常结束
                    异常结束:越界错误、保护错、特权指令错、非法指令错、I/0故障、运行超时、等待超时、算术运算错等
                  外界干预: 操作员或OS干预;父进程请求;父进程终止,子孙进程被终止。
        7.进程的阻塞与唤醒:

            阻塞:当一个进程所期待的某一事件尚未出现时,该进程调用阻塞原语将自己阻塞。进程阻塞是进程自身的一种主动行为。

            唤醒:处于阻塞状态的进程是绝不可能叫醒它自己的,必须由它的合作进程用唤醒原语唤醒它。

            进程阻塞或唤醒的原因:请求系统服务:如请求打印机
                       启动某种操作:如I/O操作
                       新数据还未到达:合作进程之间需要数据传递
                       无新工作可做:如发送进程发送完数据后
        8.进程的挂起与激活:

            挂起:当出现了引起进程挂起的事件时,系统利用挂起原语将指定进程或处于阻塞状态的进程挂起。
            激活:当发生激活进程的事件时,系统利用激活原语将指定进程激活。

            进程挂起的事件:用户进程请求将自己挂起;
                    父进程请求挂起某个子进程;
                    系统利用挂起原语将指定进程或阻塞态进程挂起
            进程激活的事件:父进程请求激活某进程;
                    用户进程请求激活某进程;

    三、线程

        定义:是进程中的一个实体,是被系统独立调度的基本单位。

        1 引入线程概述

          引入进程的目的是为了使多个程序更好的并发执行,改善资源利用率、提高系统效率。
          引入线程则是为了减少并发执行时所付出的时空开销,使并发粒度更细、并发性更好。

          

          进程的两个属性:进程是一个资源分配的基本单位。进程是一个可独立调度和分派的基本单位。

          从进程方面解释引入线程:进程作为一个资源拥有者,在创建、撤消、切换中,系统必须为之付出较大时空开销。

                所以系统中进程的数量不宜过多,进程切换的频率不宜过高,但这也就限制了并发程度的进一步提高。
                将进程的上述两个属性分开,线程作为调度的基本单位,不同时作为独立分配资源的单位;
                线程会被频繁调度和切换。进程作为拥有资源的单位,不进行频繁切换。线程因而产生。
          特征:结构性:TCB:标识、现场信息(寄存器、PC、栈指针)、调度信息(状态、优先级)
                       数据块:过程参数、数据、系统与用户堆栈
             并发性:同一进程中的各线程在同一主存空间,可以共享进程中的所有资源(数据、设备、文件),线程间通信方便。
             共享性:同一进程的各线程
             动态性:有生命期,有状态变化,可创建子线程
          性质:在引入线程的OS中,线程是进程中的一个实体,是被系统独立调度和分派的基本单位。
             线程自己基本不拥有系统资源,只拥有少量必不可少的资源:程序计数器PC、一组寄存器、栈。
             线程可与同属一个进程的其它线程共享进程所拥有的全部资源。
             一个线程可以创建和撤消另一个线程;同一进程中的多个线程之间可以并发执行。
             系统调度的基本单位是线程而不是进程,每当创建一个进程时,至少要同时为该进程创建一个线程,否则该进程无法被调度执行。
          单线程进程的内存布局和运行:
              
          管理和执行相分离的进程模型:
               

          引入线程的好处:创建一个新线程花费时间少
                  线程的终止时间比进程短;
                  同进程内的线程切换时间比进程短;
                  因为同一进程内的线程共享内存和文件,因此它们之间相互通信无须调用内核
                  适合多处理机系统

          线程的属性:轻型实体:基本不拥有资源
                独立调度的基本单位
                可以并发执行
                共享进程资源

          线程的状态:线程状态:运行、就绪和阻塞三种状态。线程的状态转换类似于进程。
                挂起状态对线程是没有意义的,如果进程挂起后被对换出主存,则它的所有线程因共享了进程的地址空间,也必须全部对换出去。
                线程的两种阻塞方式:阻塞进程方式:对某些线程实现机制,当线程被阻塞时,所在进程也转换为阻塞态,即使这个进程存在另一个处于就绪态的线程。
                          阻塞线程方式:如果存在另外一个处于就绪态的线程,则调度该线程进入运行状态,否则进程才转换为阻塞态。
          线程的管理:线程包:多线程技术利用线程包(库)提供线程原语集来支持多线程运行
                   线程包(库)可分成两种:用户空间中运行的线程包(库)
                               内核中运行的线程包(库)
                线程包(库)提供一组API,支持应用程序创建、调度、撤销和管理线程的运行。如:创建、撤销、改变优先级等。
                有的操作系统直接支持多线程,而有的操作系统不支持多线程。

        2 线程与进程的比较

          概述:线程具有进程的许多特征,在引入线程的OS中,每一进程都拥有至少一个线程。

          (1)调度:传统OS中,拥有资源、独立调度的基本单位是进程;引入线程的系统中,线程是调度和分派的基本单位,而进程是拥有资源的基本单位。
            在同一个进程内线程切换不会产生进程切换,由一个进程内的线程切换到另一个进程内的线程时,将会引起进程切换。

          (2)并发性:在引入线程的系统中,进程之间可并发,同一进程内的各线程之间也能并发执行。因而系统具有更好的并发性。

          (3)拥有资源:无论是传统OS,还是引入线程的OS,进程都是拥有资源的独立单位,线程一般不拥有系统资源,但它可以访问隶属进程的资源。
            即一个进程的所有资源可供进程内的所有线程共享。

          (4)系统开销:进程创建和撤消的开销远大于线程创建和撤消的开销,进程切换时,当前进程的CPU环境要保存,新进程的CPU环境要设置,

            线程切换时只须保存和设置少量寄存器,并不涉及存储管理方面的操作,因此进程切换的开销远大于线程切换的开销。
                同一进程内的各线程由于它们拥有相同的地址空间,它们之间的同步和通信的实现也比较容易。

          进程与线程的关系:

              

        3 用户级线程和内核级线程

          OS对线程的实现机制:从实现的角度看,线程可分为三种:用户级线程ULT(User Level Thread)如: JAVA,Informix
                                      核心级线程KLT (Kernal Level Thread)如:Win2k/XP、OS/2
                                      混合式线程  如:Solaris
          内核级线程KLT:依赖于内核,即无论是用户进程中的线程,还是系统进程中的线程,它们的创建、撤消、切换都由内核实现。Windows NT和OS/2支持内核线程;
                   性质:所有线程管理由核心完成
                      核心维护进程和线程的上下文
                      线程之间的切换需要核心支持
                      以线程为基础进行调度
                      时间片分配给线程,所以多线程的进程获得更多CPU时间。
                      一个线程发起系统调用而阻塞,不会影响其他线程的运行。
                  优点:对多处理器,核心可同时调度同一进程的多个线程;
                     阻塞是在线程一级完成。即进程中的一个线程被阻塞了,内核能调度同一进程的其它线程占有处理器运行。
                  缺点:应用程序线程在用户态运行,线程管理与调度是在核心态,同一进程内的线程频繁切换时,调用内核,线程切换时要做模式切换,导致速度下降

          用户级线程ULT:这种线程的创建、撤消和切换,都不用系统调用来实现,ULT与内核无关。

                  应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。

                  性质:由应用程序完成所有线程的管理:通过线程库(用户空间):一组管理线程的函数
                                    线程库提供一个线程运行管理系统(运行系统)
                     核心不知道线程的存在
                     线程切换不需要核心态特权
                     调度是应用程序特定的
                     用户线程调度算法可针对应用优化;
                  线程库:线程包(库)提供一组API,支持应用程序创建、调度、撤销和管理线程的运行。
                      作用:创建、撤消线程
                         在线程之间传递消息和数据
                         调度线程执行
                         保护和恢复线程上下文
                      线程库可分成两种:用户空间中运行的线程包(库)
                               内核中运行的线程包(库)。
                      线程库实质上是多线程应用程序的开发和运行支撑环境。每个线程库应提供给用户级的API编程使用。
                      多线程的操作系统和语言都提供了线程库,支持应用程序创建、调度、和管理用户级线程的运行。
                  优点:线程切换是线程库在用户态进行,不调用核心
                     调度是应用程序特定的:可以选择最好的算法
                     ULT可运行在任何操作系统上(只需要线程库),可在一个不支持线程的OS上实现
                  缺点:线程执行系统调用时,不仅该线程被阻塞,且进程内的所有线程会被阻塞(KLT不会)。
                     纯ULT中,多线程应用不能利用多重处理的优点。内核给一个进程仅分配一个CPU(不知道进程中有线程),进程中仅有一个线程能执行。

                     (即同一进程中的两个线程不能同时运行于两个处理器上)
          用户级和核心级线程区别图:

              

     进程同步、管程机制、进程通信等内容请阅读操作系统-5-进程管理(二)

  • 相关阅读:
    数组从文件中读取(接上问题)
    符合json格式要求的字符串转化为json字符串
    json-lib --->入门
    XStream-->别名;元素转属性;去除集合属性(剥皮);忽略不需要元素
    Ajax案例5-->省市联动
    Ajax案例4-->接收后台传递的XML数据
    Ajax案例3-->判断用户名是否被占用
    Ajax案例2-->POST请求
    Ajax案例1-->GET请求
    SecureCRT连接VMWare中的linux系统相关配置
  • 原文地址:https://www.cnblogs.com/qinqin-me/p/12713853.html
Copyright © 2011-2022 走看看