精华内容
下载资源
问答
  • 4.挂起操作、激活操作和进程状态的转换 2.读入数据 前言 作为资源分配和独立运行的基本单位都是进程。操作系统所具有的四大特征也是基于进程而形成的。 一、进程的定义及特征? 1.进程的定义 (1)进程是...

    文章目录

    前言

    一、进程的定义及特征?

    1.进程的定义

     2.进程的特征

    3.进程和程序的区别

    二、进程的基本状态及转换

    1.进程的三种基本状态

    2.三种基本状态的转换

    3.五种基本状态及转换

    4.挂起操作、激活操作和进程状态的转换

    2.读入数据


     

    前言

    作为资源分配和独立运行的基本单位都是进程。操作系统所具有的四大特征也是基于进程而形成的。


    一、进程的定义及特征?

    1.进程的定义

    (1)进程是程序的一次执行。

    (2)进程是一个程序及其数据在处理机上顺序执行时所发生的活动。

    (3)进程是具有独立功能的程序在一个数据集合上运行的过程 ,它是系统进行资源分配和调度的一个独立单位。

    为了是参与并发执行的每个程序都能独立地运行,在操作系统中必须为之配置一个专门的数据结构——“进程控制块(Process Control Block,PCB)”。系统利用PCB来描述进程的基本情况和活动过程,进而控制和管理进程。程序段相关数据段PCB三部分构成了进程实体(又称进程映像)。所谓创建进程,实质上是创建进程实体中的PCB;而撤销进程,实质上是撤销进程的PCB。

     (4)进程是进程实体的运行过程,它是系统进行资源分配和调度的一个独立单位。

     2.进程的特征

    (1)动态性

    (2)并发性

    (3)独立性

    (4)异步性

    3.进程和程序的区别

    可以从以上四个特性进行区分:

    (1)进程由创建而产生,由调度而执行,有撤销而消亡,可见程序实体有一定的生命周期,具有动态性;

    程序是一组有序指令集合,其本身不具有活动的含义,具有静态性。

    (2)进程具有并发性(在一段时间内,进程实体可以并发执行);

    程序(没有建立PCB)不能参与并发执行。

    (3)进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位;

    凡是没有建立PCB的程序都不能作为一个独立的单位参与运行。

     

    二、进程的基本状态及转换

    1.进程的三种基本状态

    • 就绪状态ready:进程已经分配除CPU以外的所有必要资源,只要在获得CPU就可立刻执行。

    • 执行状态running:进程已获得CPU,其程序正在执行的状态。

    • 阻塞状态block:正在执行的进程由于发生某事件(如IO请求、申请缓冲区失败等)暂时无法继续执行的状态。

    2.三种基本状态的转换

    3.五种基本状态及转换

    (1)创建状态:①进程申请一个空白PCB;②向PCB中填写用于控制和管理进程的信息;③为该进程分配运行所需要的的资源;④将该进程转入就绪状态并插入就绪队列中

    (2)终止状态:①等待操作系统进行善后处理(操作系统保留该进程的信息供其他的进程提取);②将该进程的PCB清零,北京将PCB控件返还系统

    4.挂起操作、激活操作和进程状态的转换

    4.1.挂起和阻塞的区别

    1. 对系统资源占用不同:虽然都释放了CPU,但阻塞的进程仍处于内存中,而挂起的进程通过“对换”技术被换出到外存(磁盘)中。

    2. 发生时机不同:阻塞一般在进程等待资源(IO资源、信号量等)时发生;而挂起是由于用户和系统的需要,例如,终端用户需要暂停程序研究其执行情况或对其进行修改、OS为了提高内存利用率需要将暂时不能运行的进程(处于就绪或阻塞队列的进程)调出到磁盘

    3. 恢复时机不同:阻塞要在等待的资源得到满足(例如获得了锁)后,才会进入就绪状态,等待被调度而执行;被挂起的进程由将其挂起的对象(如用户、系统)在时机符合时(调试结束、被调度进程选中需要重新执行)将其主动激活

    4.2.挂起操作的目的

    • 终端用户的需要: 修改、检查进程

    • 父进程的需要:修改、协调子进程

    • 对换的需要:缓和内存

    • 负荷调节的需要:保证实时任务的执行

    4.3状态转换图

    展开全文
  • 具有挂起状态的进程状态图 引入挂起状态的原因:①终端用户的请求;②父进程请求;③负荷调节的需要;④操作系统的需要。                       进程控制块 1. 进程控制块的作用:使...
     
    

    第二章  进程管理

    进程的基本概念

    进程的三种基本状态:就绪(Ready)状态、执行状态、阻塞状态;

     

     

     

     

     

     

     

     


    具有挂起状态的进程状态图

    引入挂起状态的原因:①终端用户的请求;②父进程请求;③负荷调节的需要;④操作系统的需要。

     

     

     

     

     

     

     

     

     

     

     


    进程控制块

    1. 进程控制块的作用:使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。或者说,OS是根据PCB来对并发执行的进程进行控制和管理的。

    2. 进程控制块中的信息:

    1) 进程标识符:进程标识符用于惟一地标识一个进程。一个进程通常有两种标识符:

        ①内部标识符。在所有的操作系统中,都为每一个进程赋予一个惟一的数字标识符,它通常是一个进程的序号。设置内部标识符主要是为了方便系统使用。

        ②外部标识符。它由创建者提供,通常是由字母、数字组成,往往是由用户(进程)在访问该进程时使用。为了描述进程的家族关系, 还应设置父进程标识及子进程标识。此外,还可设置用户标识,以指示拥有该进程的用户。

        2) 处理机状态:处理机状态信息主要是由处理机的各种寄存器中的内容组成的。

            ①通用寄存器,又称为用户可视寄存器,它们是用户程序可以访问的,用于暂存信息;

            ②指令计数器,其中存放了要访问的下一条指令的地址;

            ③程序状态字PSW,其中含有状态信息,如条件码、执行方式、 中断屏蔽标志等;

            ④用户栈指针,指每个用户进程都有一个或若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址。栈指针指向该栈的栈顶。

        3) 进程调度信息:存放一些与进程调度和进程对换有关的信息,包括:

            ①进程状态,指明进程的当前状态,作为进程调度和对换时的依据;

            ②进程优先级,描述进程使用处理机的优先级别的一个整数,优先级高的进程应优先获得处理机;

            ③进程调度所需的其它信息,它们与所采用的进程调度算法有关,比如,进程已等待CPU的时间总和、 进程已执行的时间总和等;

            ④事件,是指进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因。

        4) 进程控制信息:进程控制信息包括:

            ①程序和数据的地址,是指进程的程序和数据所在的内存或外存地(首)址,以便再调度到该进程执行时,能从PCB中找到其程序和数据;

            ②进程同步和通信机制,指实现进程同步和进程通信时必需的机制,如消息队列指针、信号量等,它们可能全部或部分地放在PCB中;

            ③资源清单,是一张列出了除CPU以外的、进程所需的全部资源及已分配到该进程的资源的清单;

            ④链接指针,它给出了本进程(PCB)所在队列中的下一个进程的PCB的首地址。

     

    进程控制

    进程的创建

    引起创建进程的事件:用户登录、作业调度、提供服务、应用请求;

    进程的创建(Creation of Progress):

        (1)申请空白PCB。

       (2)为新进程分配资源。

        (3)初始化进程控制块。

        (4)将新进程插入就绪队列,如果进程就绪队列能够接纳新进程, 便将新进程插入就绪队列。

     

    进程的终止

    引起进程终止(Termination of Process)的事件:正常结束、异常结束、外界干预;

    进程的终止过程:

        (1)根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态。

       (2)若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度。

        (3)若该进程还有子孙进程,还应将其所有子孙进程予以终止,以防他们成为不可控的进程。

        (4)将被终止进程所拥有的全部资源,或者归还给其父进程,或者归还给系统。

        (5)将被终止进程(它的PCB)从所在队列(或链表)中移出,等待其他程序来搜集信息。

    进程的阻塞与唤醒

    引起进程阻塞和唤醒的事件: 请求系统服务、启动某种操作、新数据尚未到达、无新工作可做;

    进程阻塞过程:

        (1)正在执行的进程,当发现上述某事件时,由于无法继续执行,于是进程便通过调用阻塞原语block把自己阻塞。可见,进程的阻塞是进程自身的一种主动行为。

        (2)进入block过程后,由于此时该进程还处于执行状态,所以应先立即停止执行,把进程控制块中的现行状态由“执行”改为阻塞,并将PCB插入阻塞队列。如果系统中设置了因不同事件而阻塞的多个阻塞队列,则应将本进程插入到具有相同事件的阻塞(等待)队列。

        (3)最后,转调度程序进行重新调度,将处理机分配给另一就绪进程,并进行切换,亦即,保留被阻塞进程的处理机状态(在PCB中),再按新进程的PCB中的处理机状态设置CPU的环境。

    进程唤醒过程:当被阻塞进程所期待的事件出现时,如I/O完成或其所期待的数据已经到达,则由有关进程(比如,用完并释放了该I/O设备的进程)调用唤醒原语wakeup( ),将等待该事件的进程唤醒。唤醒原语执行的过程是:首先把被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中

     

    进程的挂起与激活

    进程的挂起:当出现了引起进程挂起的事件时,比如,用户进程请求将自己挂起,或父进程请求将自己的某个子进程挂起,系统将利用挂起原语suspend( )将指定进程或处于阻塞状态的进程挂起。挂起原语的执行过程是:首先检查被挂起进程的状态,若处于活动就绪状态,便将其改为静止就绪;对于活动阻塞状态的进程,则将之改为静止阻塞。为了方便用户或父进程考查该进程的运行情况而把该进程的PCB复制到某指定的内存区域。最后,若被挂起的进程正在执行,则转向调度程序重新调度。

    进程的激活过程:当发生激活进程的事件时,例如,父进程或用户进程请求激活指定进程,若该进程驻留在外存而内存中已有足够的空间时,则可将在外存上处于静止就绪状态的进程换入内存。这时,系统将利用激活原语active( )将指定进程激活。激活原语先将进程从外存调入内存,检查该进程的现行状态,若是静止就绪,便将之改为活动就绪;若为静止阻塞便将之改为活动阻塞。假如采用的是抢占调度策略,则每当有新进程进入就绪队列时,应检查是否要进行重新调度,即由调度程序将被激活进程与当前进程进行优先级的比较,如果被激活进程的优先级更低,就不必重新调度;否则,立即剥夺当前进程的运行,把处理机分配给刚被激活的进程。

     

    进程同步

    进程同步的基本概念

    可把一个访问临界资源的循环进程描述如下:

    repeat

        entry section

        critical section;

        exit section

        remainder section;

    until false;

    同步机制应遵循的规则:空闲让进、忙则等待、有限等待、让权等待。 

     

    信号量机制

    1.整型信号量

    除初始化外,仅能通过两个标准的原子操作(Atomic Operation) wait(S)和signal(S)来访问。这两个操作一直被分别称为P、V操作。 wait和signal操作可描述为:

            wait(S):    while S≤0 do no-op

                        S∶=S-1;

            signal(S): S∶=S+1;

    在整型信号量机制中的wait操作,只要是信号量S≤0, 就会不断地测试。因此,该机制并未遵循“让权等待”的准则, 而是使进程处于“忙等”的状态。

     

    2.记录型信号量

    记录型信号量机制,是一种不存在“忙等”现象的进程同步机制。但在采取了“让权等待”的策略后,又会出现多个进程等待访问同一临界资源的情况。为此,在信号量机制中,除了需要一个用于代表资源数目的整型变量value外,还应增加一个进程链表L,用于链接上述的所有等待进程。记录型信号量是由于它采用了记录型的数据结构而得名的。它所包含的上述两个数据项可描述为:

    type semaphore=record

             value:integer;

             L:list of process;

             end

    相应地,wait(S)和signal(S)操作可描述为:

    procedure wait(S)

         var S: semaphore;

         begin

           S.value∶ =S.value-1;

           if S.value<0 then block(S,L)

         end

    procedure signal(S)

         var S: semaphore;

         begin

          S.value∶ =S.value+1;

          if S.value≤0 then wakeup(S,L);

         end

    S.value的初值表示系统中某类资源的数目, 因而又称为资源信号量,对它的每次wait操作,意味着进程请求一个单位的该类资源,因此描述为S.value∶=S.value-1; 当S.value<0时,表示该类资源已分配完毕,因此进程应调用block原语,进行自我阻塞,放弃处理机,并插入到信号量链表S.L中。可见,该机制遵循了“让权等待”准则。此时S.value的绝对值表示在该信号量链表中已阻塞进程的数目。 对信号量的每次signal操作,表示执行进程释放一个单位资源,故S.value∶=S.value+1操作表示资源数目加1。 若加1后仍是S.value≤0,则表示在该信号量链表中,仍有等待该资源的进程被阻塞,故还应调用wakeup原语,将S.L链表中的第一个等待进程唤醒。如果S.value的初值为1,表示只允许一个进程访问临界资源,此时的信号量转化为互斥信号量。

     

    3.AND型信号量

    将进程在整个运行过程中需要的所有资源,一次性全部地分配给进程,待进程使用完后再一起释放。只要尚有一个资源未能分配给进程,其它所有可能为之分配的资源,也不分配给他。亦即,对若干个临界资源的分配,采取原子操作方式:要么全部分配到进程,要么一个也不分配。由死锁理论可知,这样就可避免上述死锁情况的发生。为此,在wait操作中,增加了一个“AND”条件,故称为AND同步,或称为同时wait操作, 即Swait(Simultaneous wait)定义如下:

    Swait(S1, S2, …, Sn)

        if Si≥1 and … and Sn≥1 then

            for i∶ =1 to n do

            Si∶=Si-1;

            endfor

        else

         place the process in the waiting queue associated with the first Si found   with Si<1, and set the program count of this process to the beginning of Swait operation

        endif

    Ssignal(S1, S2, …, Sn)

          for i∶ =1 to n do

          Si=Si+1;

          Remove all the process waiting in the queue associated with Si into the ready queue.

      endfor;

     

    4.信号量集

    Swait(S1, t1, d1, …, Sn, tn, dn)

        if Si≥t1 and … and Sn≥tn then

          for i∶=1 to n do

            Si∶=Si-di;

        endfor

       else

       Place the executing process in the waiting queue of the first Si with Si<ti and set its program counter to the beginning of the Swait Operation. 

       endif

       signal(S1, d1, …, Sn, dn)

       for i∶=1 to n do

         Si ∶=Si+di;

    Remove all the process waiting in the queue associated with Si into the ready queue

       endfor;

    一般“信号量集”的几种特殊情况:

    (1) Swait(S, d, d)。 此时在信号量集中只有一个信号量S, 但允许它每次申请d个资源,当现有资源数少于d时,不予分配。

    (2) Swait(S, 1, 1)。 此时的信号量集已蜕化为一般的记录型信号量(S>1时)或互斥信号量(S=1时)。(3) Swait(S, 1, 0)。这是一种很特殊且很有用的信号量操作。当S≥1时,允许多个进程进入某特定区;当S变为0后,将阻止任何进程进入特定区。换言之,它相当于一个可控开关。

     

    信号量的应用

    1. 利用信号量实现进程互斥

    利用信号量实现进程互斥的进程可描述如下:

    Var mutex:semaphore∶   =1;

        begin

        parbegin

         process 1: begin

                    repeat

                        wait(mutex);

                        critical section

                        signal(mutex);

                        remainder seetion

                    until false;

                  end

         process 2: begin

                        repeat

                            wait(mutex);

                            critical section

                            signal(mutex);

                             remainder section

                       until false;

                       end

        parend

     

    2. 利用信号量实现前趋关系

     

     

     

     

     

     

     

     


    Var a,b,c,d,e,f,g; semaphore∶=0,0,0,0,0,0,0;

          begin

            parbegin

            begin S1; signal(a); signal(b); end;

            begin wait(a); S2; signal(c); signal(d); end;

            begin wait(b); S3; signal(e); end;

            begin wait(c); S4; signal(f); end;

            begin wait(d); S5; signal(g); end;

            begin wait(e); wait(f); wait(g); S6; end;

            parend

       end

     

    管程机制

    一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据;

    管程由三部分组成:① 局部于管程的共享变量说明;② 对该数据结构进行操作的一组过程;③ 对局部于管程的数据设置初始值的语句。此外,还须为管程赋予一个名字。

     

    进程通信

    进程通信的类型

    1. 共享存储器系统(Shared-Memory System)

    (1)基于共享数据结构的通信方式。

        (2)基于共享存储区的通信方式。

    2. 消息传递系统(Message passing system)

    进程间的数据交换,是以格式化的消息(message)为单位的;在计算机网络中,又把message称为报文。

    3. 管道(Pipe)通信

    “管道”,是指用于连接一个读进程和一个写进程以实现他们之间通信的一个共享文件,又名pipe文件。向管道(共享文件)提供输入的发送进程(即写进程), 以字符流形式将大量的数据送入管道;而接受管道输出的接收进程(即读进程),则从管道中接收(读)数据。

    为了协调双方的通信,管道机制必须提供以下三方面的协调能力:

        ① 互斥,即当一个进程正在对pipe执行读/写操作时,其它(另一)进程必须等待。

        ② 同步,指当写(输入)进程把一定数量(如4 KB)的数据写入pipe,便去睡眠等待, 直到读(输出)进程取走数据后,再把他唤醒。当读进程读一空pipe时,也应睡眠等待,直至写进程将数据写入管道后,才将之唤醒。

        ③ 确定对方是否存在,只有确定了对方已存在时,才能进行通信。

     

    消息传递通信的实现方法

    1. 直接通信方式

    指发送进程利用OS所提供的发送命令,直接把消息发送给目标进程。此时,要求发送进程和接收进程都以显式方式提供对方的标识符。通常,系统提供下述两条通信命令(原语):

             Send(Receiver, message); 发送一个消息给接收进程;

             Receive(Sender, message); 接收Sender发来的消息;

    在某些情况下,接收进程可与多个发送进程通信,因此,它不可能事先指定发送进程。例如,用于提供打印服务的进程,它可以接收来自任何一个进程的“打印请求”消息。对于这样的应用,在接收进程接收消息的原语中的源进程参数,是完成通信后的返回值,接收原语可表示为:

             Receive (id, message); 

     

    2. 间接通信方式

        (1) 信箱的创建和撤消。进程可利用信箱创建原语来建立一个新信箱。创建者进程应给出信箱名字、信箱属性(公用、私用或共享);对于共享信箱, 还应给出共享者的名字。当进程不再需要读信箱时,可用信箱撤消原语将之撤消。

        (2) 消息的发送和接收。当进程之间要利用信箱进行通信时,必须使用共享信箱,并利用系统提供的下述通信原语进行通信。

             Send(mailbox, message); 将一个消息发送到指定信箱;

             Receive(mailbox, message); 从指定信箱中接收一个消息;

    信箱可由操作系统创建,也可由用户进程创建,创建者是信箱的拥有者。

     

    消息缓冲队列通信机制

    1. 消息缓冲队列通信机制中的数据结构

        (1) 消息缓冲区。在消息缓冲队列通信方式中,主要利用的数据结构是消息缓冲区。它可描述如下:

            type message buffer=record

                sender; 发送者进程标识符

                size; 消息长度

               text; 消息正文

                next; 指向下一个消息缓冲区的指针

             end

     

        (2) PCB中有关通信的数据项。在利用消息缓冲队列通信机制时,在设置消息缓冲队列的同时,还应增加用于对消息队列进行操作和实现同步的信号量,并将它们置入进程的PCB中。在PCB中应增加的数据项可描述如下:                    

            type processcontrol block=record

                …

                mq; 消息队列队首指针

                mutex; 消息队列互斥信号量

                sm; 消息队列资源信号量

                …

            end

     

    2. 发送原语

    发送进程在利用发送原语发送消息之前,应先在自己的内存空间,设置一发送区a,见图 2 - 12 所示,把待发送的消息正文、发送进程标识符、消息长度等信息填入其中,然后调用发送原语,把消息发送给目标(接收)进程。发送原语首先根据发送区a中所设置的消息长度a.size来申请一缓冲区i,接着,把发送区a中的信息复制到缓冲区i中。为了能将i挂在接收进程的消息队列mq上,应先获得接收进程的内部标识符j,然后将i挂在j.mq上。由于该队列属于临界资源, 故在执行insert操作的前后,都要执行wait和signal操作。

    procedure send(receiver, a)

         begin

            getbuf(a.size,i);                         根据a.size申请缓冲区;

            i.sender∶   =a.sender;  将发送区a中的信息复制到消息缓冲区之中;

            i.size∶   =a.size;

            i.text∶   =a.text;

            i.next∶   =0;

           getid(PCB set, receiver.j);   获得接收进程内部标识符;

           wait(j.mutex);

           insert(j.mq, i);   将消息缓冲区插入消息队列;

           signal(j.mutex);

           signal(j.sm);

        end

     

    3. 接收原语

    接收原语描述如下:

    procedure receive(b)

       begin

        j∶   =internal name; j为接收进程内部的标识符;

        wait(j.sm);

        wait(j.mutex);

        remove(j.mq, i); 将消息队列中第一个消息移出;

        signal(j.mutex);

        b.sender∶   =i.sender; 将消息缓冲区i中的信息复制到接收区b;

        b.size∶   =i.size;

        b.text∶   =i.text;

      end

     

    线程

    线程的属性

    ①轻型实体。

        ②独立调度和分派的基本单位。

        ③可并发执行。

        ④共享进程资源。

     

    线程的状态

    (1) 状态参数

        ① 寄存器状态,它包括程序计数器PC和堆栈指针中的内容;

        ② 堆栈, 在堆栈中通常保存有局部变量和返回地址;

        ③ 线程运行状态,用于描述线程正处于何种运行状态;

        ④ 优先级,描述线程执行的优先程度;

        ⑤ 线程专有存储器,用于保存线程自己的局部变量拷贝;

        ⑥ 信号屏蔽,即对某些信号加以屏蔽。

    (2) 线程运行状态。

    如同传统的进程一样,在各线程之间也存在着共享资源和相互合作的制约关系,致使线程在运行时也具有间断性。相应地,线程在运行时,也具有下述三种基本状态:

    ① 执行状态,表示线程正获得处理机而运行;

    ② 就绪状态, 指线程已具备了各种执行条件,一旦获得CPU便可执行的状态;

    ③ 阻塞状态,指线程在执行中因某事件而受阻,处于暂停执行时的状态。

     

    线程的创建和终止

    在多线程OS环境下,应用程序在启动时,通常仅有一个线程在执行,该线程被人们称为“初始化线程”。它可根据需要再去创建若干个线程。在创建新线程时,需要利用一个线程创建函数(或系统调用),并提供相应的参数,如指向线程主程序的入口指针、堆栈的大小,以及用于调度的优先级等。在线程创建函数执行完后,将返回一个线程标识符供以后使用。

    终止线程的方式有两种:一种是在线程完成了自己的工作后自愿退出;另一种是线程在运行中出现错误或由于某种原因而被其它线程强行终止。

     

    多线程OS中的进程

    在多线程OS中,进程是作为拥有系统资源的基本单位,通常的进程都包含多个线程并为它们提供资源,但此时的进程就不再作为一个执行的实体。多线程OS中的进程有以下属性:

        (1) 作为系统资源分配的单位。

        (2) 可包括多个线程。

        (3) 进程不是一个可执行的实体。

     

    线程间的同步和通信

    互斥锁(mutex)

    互斥锁是一种比较简单的、用于实现进程间对资源互斥访问的机制。由于操作互斥锁的时间和空间开锁都较低, 因而较适合于高频度使用的关键共享数据和程序段。

    互斥锁可以有两种状态, 即开锁(unlock)和关锁(lock)状态。 相应地,可用两条命令(函数)对互斥锁进行操作。其中的关锁lock操作用于将mutex关上,开锁操作unlock则用于打开mutex。

     

    条件变量

    每一个条件变量通常都与一个互斥锁一起使用,亦即,在创建一个互斥锁时便联系着一个条件变量。单纯的互斥锁用于短期锁定,主要是用来保证对临界区的互斥进入。而条件变量则用于线程的长期等待,直至所等待的资源成为可用的。

    线程首先对mutex执行关锁操作,若成功便进入临界区,然后查找用于描述资源状态的数据结构,以了解资源的情况。只要发现所需资源R正处于忙碌状态,线程便转为等待状态, 并对mutex执行开锁操作后,等待该资源被释放;若资源处于空闲状态,表明线程可以使用该资源,于是将该资源设置为忙碌状态,再对mutex执行开锁操作。

    下面给出了对上述资源的申请(左半部分)和释放(右半部分)操作的描述。

       Lock mutex                      Lock mutex

       check data structures;          mark resource as free;

       while(resource busy);           unlock mutex;

        wait(condition variable);       wakeup(condition variable);

       mark resource as busy;

        unlock mutex;

     

    信号量机制

    (1) 私用信号量(private samephore)。

        当某线程需利用信号量来实现同一进程中各线程之间的同步时,可调用创建信号量的命令来创建一私用信号量,其数据结构是存放在应用程序的地址空间中。私用信号量属于特定的进程所有,OS并不知道私用信号量的存在,因此,一旦发生私用信号量的占用者异常结束或正常结束,但并未释放该信号量所占有空间的情况时,系统将无法使它恢复为0(空), 也不能将它传送给下一个请求它的线程。

    (2) 公用信号量(public semaphort)。

        公用信号量是为实现不同进程间或不同进程中各线程之间的同步而设置的。由于它有着一个公开的名字供所有的进程使用,故而把它称为公用信号量。其数据结构是存放在受保护的系统存储区中,由OS为它分配空间并进行管理,故也称为系统信号量。如果信号量的占有者在结束时未释放该公用信号量,则OS会自动将该信号量空间回收,并通知下一进程。可见,公用信号量是一种比较安全的同步机制。

     

    内核支持线程和用户级线程

    1. 内核支持线程

    是在内核的支持下运行的,即无论是用户进程中的线程,还是系统进程中的线程,他们的创建、撤消和切换等,也是依靠内核实现的。此外,在内核空间还为每一个内核支持线程设置了一个线程控制块,内核是根据该控制块而感知某线程的存在的,并对其加以控制。

    2. 用户级线程

    用户级线程仅存在于用户空间中。对于这种线程的创建、 撤消、线程之间的同步与通信等功能,都无须利用系统调用来实现。对于用户级线程的切换,通常是发生在一个应用进程的诸多线程之间,这时,也同样无须内核的支持。由于切换的规则远比进程调度和切换的规则简单,因而使线程的切换速度特别快。可见,这种线程是与内核无关的。

    展开全文
  • 进程相关

    2019-10-12 23:43:27
    1. 进程的状态 三种基本状态 就绪状态:当进程已获得除cpu以外的其他资源后,只要获得cpu,便可立即执行,此时进程...具有挂起状态的状态转换 处于静止就绪状态的进程不能再被调度执行 2. 进程控制块 2.1 作...

    1. 进程的状态

    1. 三种基本状态
      就绪状态:当进程已获得除cpu以外的其他资源后,只要获得cpu,便可立即执行,此时进程的状态就称为就绪状态
      执行状态:进程已获得cpu,正在执行
      阻塞状态:正在执行的进程由于由于发生某事件而暂时无法继续执行,便放弃处理机而处于暂停状态,这种赞停状态就是阻塞状态
    2. 具有挂起状态的状态转换图

      处于静止就绪状态的进程不能再被调度执行

    2. 进程控制块

    2.1 作用

    记录了操作系统所需的,用于描述进程的当前情况以及控制进程运行的全部信息。OS是根据PCB来对并发执行的进程进行控制和管理的。例:当OS要调度某进程执行时,要从该进程的PCB中查出状态及优先级,在调度到某进程后,根据其PCB中的所保存的处理机状态信息,设置该进程恢复运行的现场,并根据PCB中的程序中的程序和数据的内存地址,找到其程序和数据;进程间同步,通信活访问文件时都要访问PCB…

    2.2 PCB中的信息

    主要包括下面四方面信息:

    1. 进程标识符
      (1) 内部标识符:在所有的OS中,都为每个进程赋予一个唯一的数字标识符,通常是一个进程的序号。设置内部标识符主要是为了方便系统使用。
      (2)外部标识符:由创建者提供,往往是由用户(进程)在访问该进程时使用,还应设置父进程标识子进程标识,还可以设置用户标识。
    2. 处理机状态
      处理及在运行时,许多信息都放在寄存器中,当处理机被中断时,所有这些信息都要保存在PCB中,以便切回来的时候,能继续从断点处执行,这些寄存器包括:
      (1)通用寄存器:用户程序可以访问的,用于暂存信息
      (2)指令计数器:存放要访问的下一条指令的地址
      (3)程序状态字PSW:存放一些状态信息(进位位,溢出位等),执行方式(在内核态还是用户态执行),一些控制信息(如是否允许中断等)
      (4)用户栈指针:指向栈顶
      用户栈:就是应用程序直接使用的栈。它位于应用程序的用户进程空间的最顶端。
      当用户程序逐级调用函数时,用户栈从高地址向低地址方向扩展,每次增加一个栈帧,一个栈帧中存放的是函数的参数、返回地址和局部变量等,所以栈帧的长度是不定的。
      内核栈:主要用于进程陷入内核时使用的栈,主要涉及进程切换时保存用户态进程信息(寄存器值,一部分硬件上下文等),以及进程在内核执行时分配空间使用
    3. 进程调度信息
      (1)进程当前状态
      (2)进程优先级
      (3)进程调度所需要的其他信息:和进程调度算法有关,比如进程已等待cpu的时间总和,已执行的时间总和等
      (4) 事件:由执行状态转为阻塞状态所等待发生的事件,即阻塞原因
    4. 进程控制信息
      (1)程序和数据的地址:程序和数据所在内存或外存的地址,以便再次调度到该进程时能从PCB中找到程序和数据
      (2)进程同步和通信机制
      (3)资源:除cpu以外,进程所需的全部资源及已分配到的资源
      (4) 链接指针:本进程(PCB)所在队列中的下一个进程的PCB的首地址

    2.3 进程控制块的组织方式

    链接方式
    索引方式

    3. 进程控制

    3.1 进程创建

    1. 引起进程创建的事件
      (1)用户登录
      (2)作业调度:当调度到某作业时,将该作业装入内存,为其分配必要的资源,并为它创建进程,插入就绪队列
      (3)提供服务:当运行中的用户程序提出某种请求后,系统将专门创建一个进程来提供用户所需的服务。例用户程序要求文件答应,系统则为他创建一个打印进程
      (4)应用请求:由进程自己创建一个新进程,以便新进程并发完成特定的任务
    2. 创建过程
      一旦操作系统发现了要求创建新进程事件后,调用进程创建原语Creat(),过程如下:
      (1) 申请唯一的数字标识符,并从PCB集合中索取一个空白PCB
      (2)为新进程的程序和数据及用户栈分配必要的内存空间
      (3)初始化PCB:将系统分配的标识符和父进程标识符写进PCB,让PC指向程序入口地址,让栈指针指向栈顶,将进程的状态设为就绪或静止就绪,设置优先级
      (4) 将新进程插入就绪队列

    3.2 进程终止

    1. 引起进程终止的事件
      (1)正常结束
      (2)异常结束:
      保护错:如写了一个不允许写的文件
      非法指令
      特权指令错:如用户进程去执行一条只允许OS执行的命令
      运行超时
      等待超时
      算术运算错
      I/O故障
      (3)外界干预:如操作员,父进程等
    2. 过程
      (1) 根据标识符,从PCB集合中检索出PCB,从中读出进程状态
      (2)若是执行状态,立刻停止执行,置调度标志为真,用于指示该进程被终止后应重新进行调度
      (3)若该进程还有子孙进程,应将所有子孙进程终止,以防他们成为不可控进程
      (4)将进程拥有的全部资源归还给父进程或系统
      (5)将PCB从所在队列中移出,等待其他程序来搜集信息
    展开全文
  • 第二节 进程管理 进程 进程的概念 进程的状态转换 ...挂起状态具有三个属性 进程互斥与同步 进程互斥 进程同步 临界资源 临界区 进程同步机构 协调准则 P 操作和 V 操作 前趋 执行先后顺序制约关系

    版权声明

    主要针对希赛出版的架构师考试教程《系统架构设计师教程(第4版)》,作者“希赛教育软考学院”。完成相关的读书笔记以便后期自查,仅供个人学习使用,不得用于任何商业用途。

    第二节 进程管理

    处理机是计算机系统的核心资源。操作系统的功能之一就是处理机管理。随着计算机的迅速发展,处理机管理显得更为重要,这主要由于计算机的速度越来越快,处理机的充分利用有利于系统效率的大大提高;处理机管理是整个操作系统的重心所在,其管理的好坏直接影响到整个系统的运行效率;而且操作系统中并发活动的管理和控制是在处理机管理下实现的,处理机管理集中了操作系统中最复杂的部分,它设计的好坏关系到整个系统的成败。

    处理机是计算机系统的核心资源。操作系统的功能之一就是处理机管理。随着计算机的迅速发展,处理机管理显得更为重要,这主要由于计算机的速度越来越快,处理机的充分利用有利于系统效率的大大提高;处理机管理是整个操作系统的重心所在,其管理的好坏直接影响到整个系统的运行效率;而且操作系统中并发活动的管理和控制是在处理机管理下实现的,处理机管理集中了操作系统中最复杂的部分,它设计的好坏关系到整个系统的成败。

    进程

    进程是处理机管理中最基本的、最重要的概念。进程是系统并发执行的体现。由于在多道程序系统中,众多的计算机用户都以各种各样的任务,随时随地争夺使用处理机。为了动态地看待操作系统,则以进程作为独立运行的基本单位,以进程作为分配资源的基本单位,从进程的角度来研究操作系统。因此,处理机管理也被称为进程管理。处理机管理的功能就是组织和协调用户对处理机的争夺使用,把处理机分配给进程,对进程进行管理和控制,最大限度也发挥处理机的作用。

    进程的概念

    进程的概念用静态的观点看,操作系统是一组程序和表格的集合。用动态的观点看,操作系统是进程的动态和并发执行的。而进程的概念实际上是程序这一概念发展的产物。

    可以从分析程序的基本特征入手,引出“进程”的概念。

    顺序程序是指程序中若干操作必须按照某种先后次序来执行,并且每次操作前和操作后的数据、状态之间都有一定的关系。在多道程序系统中,程序的运行环境发生了很大的变化。主要体现在:

    ​ (1)资源共享。为了提高资源的利用率,计算机系统中的资源不再由一道程序专用,而是由多道程序共同使用。

    ​ (2)程序的并发执行或并行执行。逻辑上讲允许多道不同用户的程序并行运行;允许一个用户程序内部完成不同操作的程序段之间并行运行;允许操作系统内部不同的程序之间并行运行。

    物理上讲:内存储器中保存多个程序,I/O 设备被多个程序交替地共享使用;

    在多处理机系统的情形下,表现为多个程序在各自的处理机上运行,执行时间是重叠的。单处理机系统时,程序的执行表现为多道程序交替地在处理机上相互空插运行。

    实际上,在多道程序系统中,程序的并行执行和资源共享之间是相辅相成的。一方面,只有允许程序并行执行,才可能存在资源共享的问题;另一方面,只有有效地实现资源共享,才可能使得程序并行执行。

    进程的状态转换

    由进程运行的间断性,决定了进程至少具有以下三种状态:

    (1)就绪状态。当进程已分配了除 CPU 以外的所有必要的资源后,只要能再获得处理机,便能立即执行,把这时的进程状态称为就绪状态。在一个系统中,可以有多个进程同时处于就绪状态,通常把它们排成一个队列,称为就绪队列。

    (2)执行状态指进程已获得处理机,其程序正在执行。在单处理机系统中,只能有一个进程处于执行状态。

    (3)阻塞状态指进程因发生某事件(如请求 I/O、申请缓冲空间等)而暂停执行时的状态,亦即进程的执行受到阻塞,故称这种暂停状态为阻塞状态,有时也称为“等待”状态,或“睡眠”状态。通常将处于阻塞状态的进程排成一个队列,称为阻塞队列。

    进程状态的变化情况如下:

    ​ (1)运行态→等待态:一个进程运行中启动了外围设备,它就变成等待外围设备传输信息的状态;进程在运行中申请资源(主存储空间及外围设备因得不到满足)时,变成等待资源状态,进程在运行中出现了故障(程序出错或主存储器读写错误等),变成等待干预状态。

    ​ (2)等待态→就绪态:外围设备工作结束后等待外围设备传输信息的进程结束等待;等待的资源能得到满足时(另一个进程归还了资源),则等待资源者就结束等待;故障排队后让等待干预的进程结束等待,任何一个结束等待的进程必须先变成就绪状态,待分配到处理器后才能运行。

    ​ (3)运行态→就绪态:进程用完了一个使用处理器的时间后强迫该进程暂时让出处理器,当有更优先权的进程要运行时也迫使正在运行的进程让出处理器。由于自身或外界原因成为等待状态的进程让出处理器时,它的状态就变成就绪状态。

    ​ (4)就绪态→运行态:等待分配处理器的进程,系统按一种选定的策略从处于就绪状态的进程中选择一个进程,让它占用处理器,那个被选中的进程就变成了运行态。

    img

    关于挂起状态

    在不少系统中,进程只有如图 2-2 所示的三种状态。但在另一些系统中,又增加了一些新状态,其中最重要的是挂起状态。引入挂起状态的原因有:

    (1)对换的需要。为了缓和内存紧张的情况,而将内存中处于阻塞状态的进程换至外存上,使进程又处于一种有别于阻塞状态的新状态。因为即使该进程所期待的事件发生,该进程仍不具备执行条件而不能进入就绪队列,称这种状态为挂起状态。

    (2)终端用户的请求。当终端用户在自己的程序运行期间,发现有可疑问题时,往往希望使自己的进程暂停下来。也就是说,使正在执行的进程暂停执行,若是就绪进程,则不接受调度以便研究其执行情况或对程序进行修改。把这种静止状态也称为挂起状态。

    (3)父进程请求。父进程常希望挂起自己的子进程,以便考查和修改子进程,或者协调各子进程间的活动。

    (4)负荷调节的需要。当实时系统中的工作负荷较重,有可能影响到对实时任务的控制时,可由系统把一些不重要的进程挂起,以保证系统正常运行。

    (5)操作系统的需要。操作系统希望挂起某些进程,以便检查运行中资源的使用情况及进行记账。

    挂起状态具有三个属性

    (1)被挂起的进程,原来可能处于就绪状态,此时进程(被挂起)的状态称为挂起就绪;若被挂起的进程原来处于阻塞状态,此时的状态称为挂起阻塞。不论哪种状态,该进程都是不可能被调度而执行的。

    ​ (2)处于挂起阻塞状态的进程,其阻塞条件与挂起条件无关;当进程所期待的事件出现后,进程虽不再被阻塞,但仍不能运行,这时,应将该进程从静止阻塞状态转换为挂起就绪状态。

    ​ (3)进程可以由其自身挂起,也可由用户或操作系统等将之挂起。其目的都在于阻止进程继续运行,被挂起的进程只能用显式方式来激活,以便从挂起状态中解脱出来。

    img

    进程互斥与同步

    进程互斥

    一组并发进程中一个或多个程序段,因共享某一共有资源而导致必须以一个不允许交叉执行的单位执行。也就是说互斥是要保证临界资源在某一时刻只被一个进程访问。

    进程同步

    把异步环境下的一组并发进程因直接制约而互相发送消息而进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程同步。也就是说进程之间是异步执行的,同步即是使各进程按一定的制约顺序和速度执行。

    临界资源

    系统中有些资源可以供多个进程同时使用,有些资源则一次仅允许一个进程使用,将一次仅允许一个进程使用的资源称为临界资源。

    进程在并发执行中可以共享系统中的资源。但是临界资源的访问则必须互斥进行,即各进程对临界资源进行操作的那段程序的执行也必须是互斥的,只有这样才能保证对临界资源的互斥访问。

    临界区

    把一个进程访问临界资源的那段程序代码称为临界区。

    进程间的互斥就可以描述为:禁止两个或两个以上的进程同时进入访问同一临界资源的临界区

    进程同步机构

    协调准则

    (1)空闲让进。无进程处于临界区时,若有进程要求进入临界区则立即允许其进入;

    (2)忙则等待。当已有进程进入其临界区时,其他试图进入各自临界区的进程必须等待,以保证诸进程互斥地进入临界区;

    (3)有限等待。有若干进程要求进入临界区时,应在有限时间内使一进程进入临界区,即它们不应相互等待而谁也不进入临界区;

    (4)让权等待。对于等待进入临界区的进程必须释放其占有的 CPU。信号量可以有效地实现进程的同步和互斥。在操作系统中,信号量是一个整数。当信号量大于等于 0 时,代表可供并发进程使用的资源实体数,当信号量小于零时则表示正在等待使用临界区的进程数。建立一个信号量必须说明所建信号量代表的意义和设置初值,以及建立相应的数据结构,以便指向那些等待使用该临界区的进程。

    P 操作和 V 操作

    P 操作和 V 操作都是不可分割的原子操作,也称为原语。因此,P 原语和 V 原语执行期间不允许中断发生。

    P(sem)操作的过程是将信号量 sem 值减 l,若 sem 的值成负数,则调用 P 操作的进程暂停执行,直到另一个进程对同一信号量做 V 操作。V(sem)操作的过程是将信号量 sem 值加 1,若 sem 的值小于等于 0,从相应队列(与 sem 有关的队列)中选一个进程,唤醒它。

      P(sem){ 
        sem = sem - 1;
        if(sem < 0//进程进入等待状态;
        else //继续进行;
      } 
    
      V(sem){ 
        sem = sem + 1;
        if(sem ≤ 0//唤醒队列中的一个等待进程;
        else //继续进行;
       }

    为了保护共享资源(如公共变量),使它们不被多个进程同时访问,就要阻止这些进程同时执行访问这些资源(临界资源)的代码段(临界区);进程互斥不允许两个以上共享临界资源的并发进程同时进入临界区。利用 P、V 原语和信号量可以方便地解决并发进程对临界区的进程互斥问题。

    要用 P,V 操作实现进程同步,需要引进私用信号量。私用信号量只与制约进程和被制约进程有关,而不是与整组并发进程相关。与此相对,进程互斥使用的信号量为公用信号量。首先为各并发进程设置私用信号量,然后为私用信号量赋初值,最后利用 P,V 原语和私用信号量规定各进程的执行顺序。

    前趋图

    前趋图是一个由结点和有向边构成的有向无循环图。该图通常用于表现事务之间先后顺序的制约关系。图中的每个结点可以表示一个语句、一个程序段或是一个进程,结点间的有向边表示两个结点之间存在的前趋关系。

    例:在计算机中,经常采用流水线方式执行指令,每一条指令都可以分解为取指、分析和执行三步。取指操作为 Ai,分析操作为 Bi 和执行操作为 Ci(i=1,2,3)。如图 2-4 所示为三个任务各程序段并发执行的前驱图。

    img

    图中 A1 没有前趋结点,称为开始结点,它不受任何制约,可以直接执行;而 B1 与 A2 只能在 A1 执行完成之后才能开始,而 B2 必须在 B1 与 A2 完成之后才能开始;C3 没有后继结点,称为终止结点。

    执行先后顺序的制约关系

    直接制约

    直接制约通常是指一个操作中,多个步骤之间的制约关系,也可以说是“同步的进程之间的制约关系”。如图 2-4 所示,A1、B1、C1 是一条指令的取指、分析、执行的三个步骤,所以它们之间的关系是直接制约。

    间接制约

    间接制约通常是指多个操作之间相同步骤的制约关系,也可以说是“互斥的进程之间的制约关系”。如图 2-4 所示,A1、A2、A3 之间就存在间接制约的关系。

    进程调度

    进程调度即处理器调度(又称上下文转换),它的主要功能是确定在什么时候分配处理器,并确定分给哪一个进程,即让正在执行的进程改变状态并转入就绪队列的队尾,再由调度原语将就绪队列的队首进程取出,投入执行。

    引起进程调度的原因

    (1)正在执行的进程执行完毕。

    (2)执行中的进程自己调用阻塞原语将自己阻塞起来进入睡眠状态。

    (3)执行中的进程调用了 P 原语操作,从而因资源不足而阻塞;或调用 V 原语操作激活了等待资源的进程队列。

    (4)在分时系统中,当一进程用完一个时间片。

    (5)就绪队列中某进程的优先级变得高于当前执行进程的优先级,也将引起进程调度。

    进程调度的方式有两类:剥夺方式与非剥夺方式。所谓非剥夺方式是指,一旦某个作业或进程占用了处理器,别的进程就不能把处理器从这个进程手中夺走,直到该进程自己因调用原语操作而进入阻塞状态,或时间片用完而让出处理机;剥夺方式是指,当就绪队列中有进程的优先级高于当前执行进程的优先级时,便立即发生进程调度,转让处理机。

    进程调度的算法

    (1)先来先服务(First Come and First Serverd,FCFS)调度算法,又称先进先出(First In and First Out,FIFO)。就绪队列按先来后到原则排队。

    (2)优先数调度。优先数反映了进程优先级,就绪队列按优先数排队。有两种确定优先级的方法,即静态优先级和动态优先级。静态优先级是指进程的优先级在进程开始执行前确定,执行过程中不变,而动态优先级则可以在进程执行过程中改变。

    (3)轮转法(Round Robin)。就绪队列按 FCFS 方式排队。每个进程执行一次占有处理器时间都不超过规定的时间单位(时间片)若超过,则自行释放自己所占有的 CPU 而排到就绪队列的末尾,等待下一次调度。同时,进程调度程序又去调度当前就绪队列中的第一个进程。

    死锁

    当若干个进程互相竞争对方已占有的资源,无限期地等待,不能向前推进时会造成“死锁”。例如,P1 进程占有资源 R1,P2 进程占有资源 R2,这时,P1 又需要资源 R2,P2 也需要资源 R1,它们在等待对方占有的资源时,又不会释放自己占有的资源,因而使双方都进入了无限等待状态。

    死锁是系统的一种出错状态,它不仅会浪费大量的系统资源,甚至还会导致整个系统的崩溃,所以死锁是应该尽量预防和避免的。

    死锁条件

    产生死锁的主要原因是供共享的系统资源不足,资源分配策略和进程的推进顺序不当。系统资源既可能是可重复使用的永久性资源,也可能是消耗性的临时资源。产生死锁的必要条件是:互斥条件、保持和等待条件、不剥夺条件和环路等待条件。

    解决死锁的策略

    预防和避免策略

    死锁的预防主要是通过打破死锁产生的 4 个必要条件之一来保证不会产生死锁。采用的死锁预防策略通常有资源的静态分配法或有序分配法,它们分别打破了资源动态分配条件和循环等待条件,因此不会发生死锁。但这样做会大大降低系统资源的利用率和进程之间的并行程度。

    死锁避免策略,则是在系统进行资源分配时,先执行一个死锁避免算法(典型的如银行家算法),以保证本次分配不会导致死锁发生。由于资源分配很频繁,因此死锁避免策略要耗费大量的CPU 和时间。

    检测与恢复策略

    在实际的操作系统中往往采用死锁的检测与恢复方法来排除死锁。

    死锁检测与恢复是指系统设有专门的机构,当死锁发生时,该机构能够检测到死锁发生的位置和原因,并能通过外力破坏死锁发生的必要条件,从而使得并发进程从死锁状态中恢复出来。

    一旦在死锁检测时发现了死锁,就要消除死锁,使系统从死锁状态中恢复过来。

    (1)最简单,最常用的方法就是进行系统的重新启动,不过这种方法代价很大,它意味着在这之前所有的进程已经完成的计算工作都将付之东流,包括参与死锁的那些进程,以及未参与死锁的进程。

    (2)撤消进程,剥夺资源。终止参与死锁的进程,收回它们占有的资源,从而解除死锁。这时又分两种情况:一次性撤消参与死锁的全部进程,剥夺全部资源;或者逐步撤消参与死锁的进程,逐步收回死锁进程占有的资源。一般来说,选择逐步撤消的进程时要按照一定的原则进行,目的是撤消那些代价最小的进程,比如按进程的优先级确定进程的代价;考虑进程运行时的代价和与此进程相关的外部作业的代价等因素。

    此外,还有进程回退策略,即让参与死锁的进程回退到没有发生死锁前某一点处,并由此点处继续执行,以求再次执行时不再发生死锁。虽然这是个较理想的办法,但是操作起来系统开销极大,要有堆栈这样的机构记录进程的每一步变化,以便今后的回退,有时这是无法做到的。

    展开全文
  • 关于进程的理解和控制管理1、什么是程序2、什么是进程3、进程的生命周期4、进程的状态5、管理进程1、静态查看2、动态查看3、进程控制1、启动进程2、挂起进程3、终止进程 1、什么是程序 要理解进程,首先要知道什么是...
  • 什么是操作系统 操作系统五大功能 存储器管理。。 操作系统特征 并发性,共享性,异步性,虚拟性 ...分时系统和实时系统特点 ...进程的概念 ...进程的特征 ...挂起状态引入原因 进程结构 PCB,数据,程序
  • 与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...
  • windows 8 任务管理器新功能

    千次阅读 2012-10-31 11:17:56
    新功能 1. 进程标签 在 Win 8 新版任务管理器中可以将具有多标签应用程序展开(看到是当前选择标签,其他标签被忽略掉),...(虽然 Metro 应用程序在内存中,但它们实质上处于挂起睡眠状态) 可以看到所有
  •  0162 信号已挂起。  0164 系统无法创建其他线程。  0167 无法锁定文件范围。  0170 所要求资源正在使用中。  0173 锁定请求对于提供取消区域不重要。  0174 文件系统不支持到锁定类型自动...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    因为Linux与Windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失,使系统处于不稳定的状态,甚至在有系统中会损坏硬件设备(硬盘)。在系统关机前使用 shutdown命令,系统管理员会通知所有...
  • 修复因PCB上重复指示符导致长时间挂起的错误(BC:9203 ; BC:9632)。 27694 添加了在放置后移动Draftsman Callouts和Dimensions起点(目标)点能力(BC:7740)。 27699 修复了重新打开文档时,绘图员图层...
  • java 面试题 总结

    2009-09-16 08:45:34
    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...
  • 本书在向个人电脑用户,系统而详细地讲解了电脑常见故障,...404.自检,预热状态Read/Wait指示灯时好时坏 405.激光打印机卡纸 406.在输出纸部分卡纸 407.打印机不能拾取进纸匣中纸张并且出现卡纸现象 408.从软件...
  • 精通Android 3--详细书签版

    热门讨论 2013-02-08 11:19:58
    5.6 挂起的Intent 111 5.7 资源 112 5.8 小结 113 第6章 构建用户界面和使用控件 114 6.1 Android中UI开发 114 6.1.1 完全利用代码来构建UI 115 6.1.2 完全使用XML构建UI 117 6.1.3 使用XML结合...
  • 5.2.1 用户和Oracle进程之间交互 139 5.2.2 服务器进程 139 5.2.3 后台进程 140 5.3 Oracle内存结构 145 5.3.1 理解主存储器 145 5.3.2 SGA 146 5.3.3 PGA 151 5.4 简单Oracle数据库事务 153 ...
  • 例子都是经过精挑细选具有很强针对性。力求让读者通过亲自动手实验,掌握各类Windows驱动 程序开发技巧,学习尽可能多Windows底层知识。  本书适用于中、高级系统程序员,同时也可用做高校计算机专业...
  • 让默认就可以了,但是超频玩者是肯定不会放过任何可以提高性能东西,所以如果你想在这里让你电脑提升一点性能话,就必须慢慢试验,选择一个适当参数才能让你计算机达到性能和稳定最佳状态!...
  • Linux核心具有 Windows 无法比拟稳定性和高效率,在不使用 X Windows 情况 下,它占用系统资源较少,可以使一台 Intel486摇身一变成为高效工作站。对于想要学习 UNIX用户来说,使他们熟悉 UNIX 操作环境,...
  •  本书是一本关于Oracle 9i & 10g数据库体系结构权威图书,涵盖了所有最重要Oracle体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,以及分区和并行,并利用具体...
  • 4.4.4 保持统计数据挂起与立即公开统计数据 163 4.4.5 SQL Plan Management 166 4.4.6 ADDM增强 171 4.4.7 AWR基线 174 4.4.8 基线模板 175 4.4.9 自适应基线度量阈值 177 4.5 Database Control中与性能有关...
  • 新增了 趣味练习:synchronized + 线程的挂起与唤醒,猜猜看输出什么? https://github.com/Higmin/practice/tree/master/src/main/java/com/practice/lock/Test09_practice.java 详情移步:...
  • C#编程经验技巧宝典

    热门讨论 2008-06-01 08:59:33
    C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 <br>1.1 Visual Studio开发环境安装与配置 2 <br>0001 安装Visual Studio 2005开发环境须知 2 <br>0002 配置合适Visual Studio 2005...
  • 修改高级表格支持库在表格空白处(所有单元格之外)单击鼠标导致当前光标处单元格自动进入编辑状态的BUG。 14. 修改扩展界面支持库一,为“超级列表框”增加“检查框状态被改变”事件。 15. 修改扩展界面支持库一...
  •  本书是一本关于oracle database 9i、10g 和11g 数据库体系结构权威图书,涵盖了所有重要oracle 体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,分区和并行,以及...
  • 我会从下知识点去写这个系列,很多细节点,可能想得不是很完善,大家可以去【公众号】获取或者加我【微信】提意见(别忘记Star哟)。 原创文章每周最少两篇,公众号首发文章,【B站】首发视频,比博客早一到两...
  • 应该说 React 的出现加快了前端发展的进程,拉近了前端与后端开发的距离,之后各个框架便纷纷效仿,逐渐青睐对 Commonjs 规范的支持。业务开发中,将组件化思想彻底贯彻其中,许多人...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

具有挂起状态的进程状态图