精华内容
下载资源
问答
  • 进程阻塞是指使一个进程让出处理器,去等待一个事件,如等待资源、等待I/O完成、等待一个事件发等,通常进程自己调用阻塞原语阻塞自己,所以,是进程自主行为,是1个同步事件。当一个等待事件结束会产生一个中断,...

    进程的阻塞是指使一个进程让出处理器,去等待一个事件,如等待资源、等待I/O完成、等待一个事件发等,通常进程自己调用阻塞原语阻塞自己,所以,是进程自主行为,是1个同步事件。当一个等待事件结束会产生一个中断,从而,激活操作系统,在系统的控制之下将被阻塞的进程唤醒,如I/O操作结束、某个资源可用或期待事件出现。进程的阻塞和唤醒显然是由进程切换来完成。

    展开全文
  • 进程的基本状态及转换和阻塞及挂起的理解

    万次阅读 多人点赞 2018-06-24 16:12:26
    阻塞状态:一个进程正在等待某一事件发生(例如请求I/O而等待I/O完成等)而暂时仃止运行,这时即使把处理机分配给进程也无法运行,故称该进程处于阻塞状态。 挂起状态:由于IO的速度慢于CPU的运算速度,经常出现...

    概念描述:

    • 就绪状态 :一个进程获得了除处理机外的一切所需资源,一旦得到处理机即可运行,则称此进程处于就绪状态。
    • 执行状态:当一个进程在处理机上运行时,则称该进程处于运行状态。
    • 阻塞状态:一个进程正在等待某一事件发生(例如请求I/O而等待I/O完成等)而暂时仃止运行,这时即使把处理机分配给进程也无法运行,故称该进程处于阻塞状态。
    • 挂起状态:由于IO的速度慢于CPU的运算速度,经常出现CPU等待I/O的情况。这时OS需要将主存中的进程对换至外存。在进程行为模式中需要增加一个新的挂起(suspend)状态。当内存中所有进程阻塞时,OS可将一进程置为挂起态并交换到外存,再调入另一个进程执行。
    • 新建状态:进程刚创建,但还不能运行,OS还没有把它加到可执行进程组中,通常是还没有加载到主存中的新进程。
    • 退出状态:OS从可执行进程组中释放出的进程,或者是因为它自身停止了,或者是因为某种原因被取消。进程不在适合执行,但与作业相关的表和其它信息临时被OS保留起来,为其他程序提供所需信息。
    • 活跃就绪:指进程在主存并旦可被调度的状态。
    • 静止就绪:指进程被对换到辅存时的就绪状态,是不能被直接调度的状态,只有当主存中没有活跃就绪态进程,或者是挂起态进程具有更高的优先级,系统将把挂起就绪态进程调回主存并转换为活跃就绪。
    • 活跃阻塞:指进程在主存中。一旦等待的事件产生,便进入活跃就绪状态。
    • 静止阻塞:指进程对换到辅存时的阻塞状态。一旦等待的事件产生,便进入静止就绪状态。

    进程转换状态图

    • 三种基本状态转换图:
    就绪 执行 阻塞 进程调度 时间片用完 I/O请求 I/O完成 就绪 执行 阻塞

    这里写图片描述

    • 五种基本状态转换图(单挂起):
    新建 就绪 执行 阻塞 挂起 退出 允许进入 分派 时间片用完(超时) 事件等待(I/O请求) 事件发生(I/O完成) 挂起 激活 释放 新建 就绪 执行 阻塞 挂起 退出

    这里写图片描述

    • 五种基本状态转换图(双挂起):
    新建 活跃就绪 静止就绪 执行 活跃阻塞 静止阻塞 退出 允许进入 允许进入 挂起 激活 分派 时间片用完(超时) 事件等待(I/O请求) 挂起 事件发生(I/O完成) 挂起 激活 事件发生(I/O完成) 释放 新建 活跃就绪 静止就绪 执行 活跃阻塞 静止阻塞 退出

    这里写图片描述

    阻塞及挂起的理解

    1. 挂起是一种主动行为,是把一个进程从内存转到外存,而阻塞则是一种被动行为(并不绝对,看个人理解),是在等待事件或资源时任务的表现。对于挂起,其进程所有资源都转入外存;而阻塞,其进程所有资源依然保存在内存中
    2. 对应挂起的行为是激活,即当没有活动就绪进程时或静止就绪队列里面有进程优先级高于活动就绪里面所有进程,还有就是当一个进程释放足够内存时,系统会把一个高优先级阻塞激活。而阻塞却没有对应的主动行为来解除,需要其他进程或系统唤醒。
    3. 一个比喻:只有一个锅,当食材已经准备充分的菜就可以下锅,这就是执行态;而其他准备好的菜就顺序放在一旁,等待下锅,这就是就绪态;还有的菜准备还不是很充分,例如该切片的菜还没有切片,还有一些佐料还没有从冰箱里拿出,这就是I/O操作等待,类似阻塞态;而还有一种情况就是厨房的面积太小了,桌子上放不下那么多的准备下锅的菜,于是先将那些还没有准备好的菜放入冰箱,如果还是放不了那么多菜,就把那些已经准备好的但没有下锅的菜放入冰箱,以免变质,这就是挂起态;当桌子上有位置了,就把菜从冰箱拿出来,这便是激活操作。做好的菜就可以端出厨房,这便是退出态。(PS:这里我假设冰箱空间很大,也存在那种炒到一半的菜放到一边的情况,即从执行态到就绪态或阻塞态的情况,这种情况可以类似川菜中先将肉处理一下(去腥等等),然后又从锅里捞出来,用豆瓣和其他佐料来进行腌制(这里如果佐料没有在桌子上就类似进入阻塞态,而如果有就相当于进入就绪态,但是锅里已经被占用了,需要等待一会儿)至于优先级的高低,也可类比有些菜是为了其他菜做铺垫(举个例子:在川菜里面,回锅肉和炒白菜,一般家庭会优先做回锅肉,因为当做回锅肉时,会炒出许多猪油,而这些有可以用来炒白菜,这样的炒白菜不仅好吃,而且也节约了许多油。))
    展开全文
  • 进程信号的阻塞

    2018-04-13 20:33:40
    先给出几个与信号有关的...4、被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执⾏行递达的动作。 PS:阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的⼀种处理动作。 ...

    先给出几个与信号有关的概念:
    1、实际执行信号的处理动作称为信号递达(Delivery)。
    2、信号从产生到递达之间的状态,称为信号未决(Pending)。
    3、进程可以选择阻塞 (Block )某个信号。
    4、被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执⾏行递达的动作。
    PS:阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的⼀种处理动作。
    在一个线程的PCB中,信号模块的结构模型为:
    这里写图片描述
    上图中的block表是信号阻塞表,标识相应的信号到来时是否阻塞;pending表为未决表,标识进程是否收到相应的信号;handler表标识相应信号的处理动作(忽略、默认处理或自定义处理)。这里要注意三种表虽然一起为信号服务,但是他们之间并没有必然联系,比如某种信号(如1号信号)可以block为1而pending为0,也可以block为0而pending为1。而当某个信号的标志位为1时,进程收到这个信号后就会在pending表上标识这个信号,同时也会阻塞这个信号(区分阻塞信号与忽略信号)使其一直处于未决状态。在Linux中,同一常规信号递达前无论系统向进程发送多少次都只会记住一次,而实时信号在递达前产生多次会放入一个队列中。
    上图中的block表与pending表实质是两张位图,其数据类型为sigset_t——信号集。阻塞信号集也称为信号屏蔽字(Signal Mask),这里的“屏蔽”是“阻塞”而不是忽略。
    信号集操作函数:

    #include <signal.h>
    int sigemptyset(sigset_t *set);
    int sigfillset(sigset_t *set);
    int sigaddset (sigset_t *set, int signo);
    int sigdelset(sigset_t *set, int signo);
    int sigismember(const sigset_t *set, int signo);
    返回值:成功返回0,出错返回-1

    1、函数sigemptyset初始化set所指向的信号集,使其中所有信号的对应bit清零,表示该信号集不包含任何有效信号。
    2、函数sigfillset初始化set所指向的信号集,使其中所有信号的对应bit置位,表示该信号集的有效信号包括系统支持的所有信号。
    3、函数sigaddset向信号集set中加入signo信号。
    4、函数sigdelset删除信号集set中的signo信号。
    5、函数sigismember是一个布尔函数,用于判断⼀个信号集的有效信号中是否包含某种信号,若包含则返回1,不包含则返回0,出错返回-1。
    PS:在使用sigset_ t类型的变量之前,⼀定要调用sigemptyset或sigfillset做初始化,使信号集处于确定的状态。初始化sigset_t变量之后就可以在调用sigaddset和sigdelset在该信号集中添加或删除某种有效信号。
    用sigprocmask函数可读取或修改进程的信号屏蔽字。

    #include <signal.h>
    int sigprocmask(int how, const sigset_t *set, sigset_t *oset);
    返回值:若成功则为0,若出错则为-1

    如果oset非空,则读取当前进程的信号屏蔽字通过oset传出。如果set非空,则根据how的指示更改进程的信号屏蔽字。如果set与oset都非空,则先将信号屏蔽字备份到oset中,然后根据set与how更改信号屏蔽字。假设信号屏蔽字为mask,则how的可选项有:
    这里写图片描述
    如果调用sigprocmask解除了对当前若干个未决信号的阻塞,则在sigprocmask返回前,⾄至少将其中一个信号递达。

    #include <signal.h>
    int sigpending(sigset_t *set);
    返回值:成功返回0,出错返回-1。
    功能:读取当前进程的未决信号集,通过set参数传出。

    简单使用上述接口:

    #include <stdio.h>
    #include <stdlib.h>
    #include <signal.h>
    int main(void)
    {
        sigset_t set;
        int i = 0;
        sigemptyset(&set);
        sigaddset(&set, 2);
        sigprocmask(SIG_SETMASK, &set, NULL);  //将2号信号添加到当前进程的信号屏蔽字中
        while(1)
        {
            i++;
            printf("run ~~~\n");
            sleep(1);
            if(i == 5)         //在信号屏蔽字解除2号信号
                sigprocmask(SIG_UNBLOCK, &set, NULL);   
        }
    
        return 0;
    }

    运行结果:
    这里写图片描述

    展开全文
  • 阻塞状态和等待状态的区别

    千次阅读 2020-10-27 14:39:05
    在进入synchronized方法之前因为抢不到锁对象而进入阻塞状态,进入阻塞队列。进入到synchronized方法后由于调用了wait()方法而进入等待状态,此时进入等待队列,等待其它线程调用它的notify()方法将他唤醒。 ...

    在进入synchronized方法之前因为抢不到锁对象而进入阻塞状态,进入阻塞队列。进入到synchronized方法后由于调用了wait()方法而进入等待状态,此时进入等待队列,等待其它线程调用它的notify()方法将他唤醒。

    展开全文
  • 线程的几种状态转换

    千次阅读 2020-12-21 11:49:03
    线程一共有以下几种状态:1、新建状态(New):新创建了一个线程对象。2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于“可运行线程池”中,变得可运行,只等待获取CPU...
  • 文章目录进程如何阻塞进程阻塞为什么不消耗CPU?1. 计算机是如何接收数据的2. 计算机如何知道要接受数据?3. 进程阻塞为什么不占用 CPU 资源?3.1 工作队列3.2 等待队列3.3 唤醒进程3.4 内核接收网络数据全过程3.5 ...
  • 什么是进程阻塞

    千次阅读 2018-07-09 17:44:00
    ①什么是进程阻塞 ...②阻塞状态 正在进行的进程由于发生某事件而暂时无法继续执行时,便放弃处理机而处于暂停状态,亦即进程的执行受到阻塞,我们把这种暂停状态叫阻塞进程阻塞,有时也成为等待状...
  • 阻塞的三种状态以及死锁

    千次阅读 2019-08-21 11:36:06
    2、当其他线程抢到了CPU资源之后,发现获取不到对象锁,就会进入阻塞状态,此时进入的是由于获取不到对象锁而阻塞的阻塞队列中。 3、当占有锁的线程释放锁的时候,就会立即唤醒等待锁的其他线程(在因获取不到对象锁...
  • 进程的描述与控制 操 作 系 统 所 具 有 的 四 大 特 征 也 都 是 基 于 进 程 而 形 成 的 , 并 从 进 程 的 角 度 对 操 作 系 统 进 行 研 究 。 (一)、前趋图和程序执行 1.1 前趋图 前趋图(Precedence Graph...
  • 假设初始状态为:有n个进程处于就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。
  • 进程的五种基本状态 1 创建状态: 进程正在被创建 2 就绪状态: 进程被加入到就绪队列中等待CPU...4 等待阻塞状态进程因为某种原因,比如等待I/O,等待设备,暂时不能运行。 5 终止状态: 进程运行完毕 交换
  • 自动恢复,用resume方法恢复和notify或notifyAll()
  • 来源:SegmentFault 思否社区作者:byte进程我们编写的代码只是一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装载到内存中,接着 CPU 会执行程序中的每一条...
  • if(run->needtime) //进程结束 { run->next=finish; finish=run; run->state='F'; run->cputime=run->cputime+run->needtime; run->needtime=0; run=NULL; if(ready!=NULL) first...
  • 操作系统进程状态状态转换详解

    千次阅读 多人点赞 2019-11-01 10:28:55
    进程状态的转换与PCB详解 ​ 返回主目录 ​ 之前的有博文对进程和线程的区别进行了详细的介绍,并且说明了引入进程的目的是为了能够使程序并发的执行,并且可以对并发执行的程序加以描述和控制。这篇博文,我们...
  • 在程序执行阻塞I/O中的read、recv等系统调用时,进程将会一直处于阻塞直到数据到来或者到达设定的超时时间。 进程可以执行sleep系统调用来显式进入阻塞。 处于就绪态的进程无法执行任何造成其阻塞的代码,故无法...
  • 参考回答: 这个需要看服务端的编程模型,如果如上一个问题的回答描述的这样,则处于阻塞状态, 如果使用了epoll,select等这样的io复用情况下,处于运行状态 ...
  • 在一个分时操作系统中,进程出现由运行状态进入就绪状态,由阻塞状态进入就绪状态的原因分别可能是() 正确答案: B 你的答案: B (正确) 等待资源而阻塞,时间片用完 时间片用完,因获得资源被...
  • 假设初始状态为:有n个进程处于就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。
  • 进程调度(执行,阻塞,就绪)

    千次阅读 2018-02-13 10:24:00
    通常,一个进程必须具有以下三种基本状态:就绪状态: 当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态就称为就绪状态;执行状态:当进程已获得处理机,其程序正在处理机上...
  • 文章目录阻塞与唤醒阻塞的原因阻塞原语 block()唤醒原语 ...状态变为阻塞状态,并进入相应的事件的阻塞队列 唤醒原语 wakeup() 当阻塞进程期待的事件发生,有关进程调用唤醒原语,将等待该事件的进程唤醒。状态变为Re
  • 简单来说, 进程等待是进程的一种状态, 是父进程等待子进程退出时的一个过程 为什么要进程等待 简单来讲, 因为要避免产生僵尸进程. 进程在退出的时候, 会关闭所有的文件描述符, 释放在用户空间中分配的内存, 但是 ...
  • 进程简介 并发和并行并发:在一个时间段中多个程序都启动运行在用一个处理机中并行:两个进程分别由不同的CPU管理执行,两个进程不抢占CPU的资源,且可以同时运行,叫做并行区别在于是否同时多进程的优点各个进程有...
  • 进程状态 导言 在上篇说到,进程是程序的一次执行。在这个执行过程中,有时进程正在被CPU处理,有时又需要等待CPU的服务,可见,进程存在多种状态。为了方便对各个进程的管理,操作系统需要将进程合理地划分为几种...
  • (多处理机系统中,则有多个进程处于执行状态) 3. 阻塞状态 正在执行的进程由于发生某时间(如I/O请求、申请缓冲区失败等)暂时无法继续执行的状态,即进程的执行受到阻塞。 二、三种基本状态的转换 三、创建...
  • 进程状态

    2019-10-07 23:00:32
    1.就绪态 : 进程已经获得所需的其他资源,正在申请处理器资源,准备开始执行,这种情况下,称进程处于就绪态 2.阻塞态(休眠态或者等待态) 进程需要等待所需资源而放弃处理器,或者是进程不拥有处理器而且其他...
  • 进程阻塞的原因不包括

    千次阅读 2016-07-13 22:04:59
    进程阻塞的原因不包括________。 正确答案: A 你的答案: C (错误) 时间片切换 等待I/O 进程sleep 等待解锁 添加笔记 收藏 纠错 解析:进程有3个状态:就绪...
  • 进程阻塞解决方案

    千次阅读 2018-05-10 14:36:32
    我的毕设做了个可视化界面,用来展示我的仿真过程,做起来一波三折啊。记录一下用Runtime.getRuntime().exec(s)时出现的问题。2018年5月10日13:44:54一、执行...二、调用Runtime.getRuntime().exec(s)命令程序阻塞 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 136,049
精华内容 54,419
关键字:

以下进程处于阻塞状态的是