`
北极的。鱼
  • 浏览: 159089 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

进程的阻塞和挂起的区别

 
阅读更多

转自:http://www.cnblogs.com/jason-liu-blogs/archive/2012/12/19/2825202.html

  • 理解一:挂起是一种主动行为,因此恢复也应该要主动完成,而阻塞则是一种被动行为,是在等待事件或资源时任务的表现,你不知道他什么时候被阻塞(pend),也就不能确切 的知道他什么时候恢复阻塞。而且挂起队列在操作系统里可以看成一个,而阻塞队列则是不同的事件或资源(如信号量)就有自己的队列。
  • 理解二:阻塞(pend)就是任务释放CPU,其他任务可以运行,一般在等待某种资源或信号量的时候出现。挂起(suspend)不释放CPU,如果任务优先级高就永远轮不到其他任务运行,一般挂起用于程序调试中的条件中断,当出现某个条件的情况下挂起,然后进行单步调试。
  • 理解三:pend是task主动去等一个事件,或消息.suspend是直接悬挂task,以后这个task和你没任何关系,任何task间的通信或者同步都和这个suspended task没任何关系了,除非你resume task;
  • 理解四:任务调度是操作系统来实现的,任务调度时,直接忽略挂起状态的任务,但是会顾及处于pend下的任务,当pend下的任务等待的资源就绪后,就可以转为ready了。ready只需要等待CPU时间,当然,任务调度也占用开销,但是不大,可以忽略。可以这样理解,只要是挂起状态,操作系统就不在管理这个任务了。
  • 理解五:挂起是主动的,一般需要用挂起函数进行操作,若没有resume的动作,则此任务一直不会ready。而阻塞是因为资源被其他任务抢占而处于休眠态。两者的表现方式都是从就绪态里“清掉”,即对应标志位清零,只不过实现方式不一样。
操作系统中睡眠、阻塞、挂起的区别形象解释:

     首先这些术语都是对于线程来说的。对线程的控制就好比你控制了一个雇工为你干活。你对雇工的控制是通过编程来实现的。
     挂起线程的意思就是你对主动对雇工说:“你睡觉去吧,用着你的时候我主动去叫你,然后接着干活”。
     使线程睡眠的意思就是你主动对雇工说:“你睡觉去吧,某时某刻过来报到,然后接着干活”。
     线程阻塞的意思就是,你突然发现,你的雇工不知道在什么时候没经过你允许,自己睡觉呢,但是你不能怪雇工,肯定你         这个雇主没注意,本来你让雇工扫地,结果扫帚被偷了或被邻居家借去了,你又没让雇工继续干别的活,他就只好睡觉了。至于扫帚回来后,雇工会不会知道,会不会继续干活,你不用担心,雇工一旦发现扫帚回来了,他就会自己去干活的。因为雇工受过良好的培训。这个培训机构就是操作系统。
以下是百度百科的解释:
挂起进程在操作系统中可以定义为暂时被淘汰出内存的进程,机器的资源是有限的,在资源不足的情况下,操作系统对在内存中的程序进行合理的安排,其中有的进程被暂时调离出内存,当条件允许的时候,会被操作系统再次调回内存,重新进入等待被执行的状态即就绪态,系统在超过一定的时间没有任何动作.
引起挂起状态的原因有如下几方面:
(1)终端用户的请求。当终端用户在自己的程序运行期间发现有可疑问题时,希望暂停使自己的程序静止下来。亦即,使正在执行的进程暂停执行;若此时用户进程正处于就绪状态而未执行,则该进程暂不接受调度,以便用户研究其执行情况或对程序进行修改。我们把这种静止状态成为“挂起状态”。
(2)父进程的请求。有时父进程希望挂起自己的某个子进程,以便考察和修改子进程,或者协调各子进程间的活动。
(3)负荷调节的需要。当实时系统中的工作负荷较重,已可能影响到对实时任务的控制时,可由系统把一些不重要的进程挂起,以保证系统能正常运行。
(4)操作系统的需要。操作系统有时希望挂起某些进程,以便检查运行中的资源使用情况或进行记账。
(5)对换的需要。为了缓和内存紧张的情况,将内存中处于阻塞状态的进程换至外存上。
分享到:
评论

相关推荐

    Linux中进程的阻塞和挂起的区别

    ### Linux中进程的阻塞与挂起的区别 #### 一、引言 在现代操作系统中,尤其是像Linux这样的多任务操作系统,进程管理是一项至关重要的功能。为了高效地管理和利用系统资源,Linux通过多种机制控制进程的状态变化。...

    进程中阻塞和挂起的区别

    挂起是一种主动行为,因此恢复也应该要主动完成,而阻塞则是一种被动行为,是在等待事件或资源时任务的表现,你不知道他什么时候被阻塞(pend),也就不能确切的知道他什么时候恢复阻塞。而且挂起队列在操作系统里可以...

    操作系统 具有挂起状态的进程状态装换

    挂起状态是等待状态的一种,分为外挂起(也称作阻塞)和内挂起(也称作暂停)。外挂起状态通常发生在进程等待外部事件(如I/O操作完成)时,而内挂起状态则多发生在系统需求或者管理员命令下,将正在运行或就绪的...

    进程调度与内存管理:这是我花了很长时间写的一个实验,界面非常美观,完成了进程调度的各个状态包括,就绪,运行,阻塞,挂起,并用画图来表示内存的分配情况,自我感觉还是不错的

    在标题和描述中提到了四种基本的进程状态:就绪、运行、阻塞和挂起。这四个状态构成了进程生命周期的基础: 1. **就绪状态**:进程已准备就绪,等待CPU资源,一旦获得CPU时间片,它就可以开始执行。 2. **运行状态*...

    作业与进程的调度(完成了进程调度的所有任务,显示出了一个作业被调度的所有状态,准备,就绪运行,阻塞挂起,包括进程运行结束后的打印。其中挂起为手动挂起。并用图像表示内存分配)

    在这个实验中,我们特别关注了“挂起”状态,这是进程从内存移出并保存到磁盘的状态,通常是因为资源冲突或系统需求。在这里,挂起是手动进行的,意味着用户或系统管理员可以决定何时暂停进程,以便让其他任务获得...

    linux线程的挂起与恢复

    本文将深入探讨如何在Linux环境下挂起和恢复线程,以及涉及到的相关知识点。 1. **线程挂起** 在提供的代码示例中,线程挂起通过共享变量`wqy_pthread_pause`、互斥锁`wqy_mutex_pause`和条件变量`wqy_cond_pause`...

    操作系统 进程及其资源管理

    挂起进程、唤醒进程等功能。设计函数实现了调度程序,在每个进程操作执 行完毕后,自动调用执行。所展示的程序运行结果图,为模拟单核单 CPU 中, 对进程的调度情况,即每一时刻只有一个进程能够有资格处于运行状态...

    解决SQL数据库程序挂起问题

    挂起通常意味着程序或进程处于非响应状态,可能由于资源耗尽、死锁、错误的查询执行计划、内存不足等多种原因导致。以下是这个问题的相关知识点: 1. **SQL Server挂起的定义**:在SQL Server中,"挂起"意味着一个...

    SQL清除挂起工具

    通过使用专门设计的工具,可以终止这些挂起的进程,释放其占用的系统资源,从而消除对新安装的阻塞。 在SQL Server 2000的安装过程中,可能涉及多个步骤,包括但不限于注册表更新、文件复制、服务配置等。如果在...

    解除SQL挂起

    在SQL Server的安装过程中,有时会遇到软件挂起的情况,这通常是由于系统资源不足、安装过程中出现错误或者与其他进程冲突导致的。"解除SQL挂起"这个工具或方法旨在解决这个问题,使得用户能够顺利完成SQL Server的...

    Linux 下进程的挂起和恢复命令

    本文主要关注的是进程的挂起和恢复,这对于系统管理员和开发者来说是非常实用的技能。挂起和恢复进程可以帮助优化资源使用,尤其是在多任务环境下。 首先,让我们了解挂起进程。在Linux中,按下`Ctrl + Z`快捷键...

    进程运行/就绪/堵塞三个状态的转化以及通信调度算法。

    3. **换出进程**:将一个进程从运行状态或就绪状态转为挂起状态,即不再占用内存空间,但不立即销毁进程。`huanchu()`函数实现了这一操作。 4. **杀死进程**:销毁一个进程并释放其占用的所有资源。`kill()`函数...

    SQL挂起处理工具

    1. **监控和诊断**:使用内置的SQL Server管理工具,如Activity Monitor或动态管理视图(DMVs),可以监控当前的会话和进程,找出资源消耗大的查询或挂起的事务。 2. **查询优化**:分析长时间运行的查询,通过调整...

    挂起恢复中断程序源码

    挂起状态可以分为就绪挂起(进程被移动到就绪队列的末尾)和阻塞挂起(进程进入等待状态)。在挂起过程中,操作系统会保存进程的状态,包括寄存器内容、内存映射等,以便之后恢复时能继续执行。 恢复进程则是将处于...

    c++多线程的创建挂起执行与销毁

    8. 在挂起按钮函数中,编写如下代码: if(SuspendThread(hThread1)==0xFFFFFFFF) { MessageBox("挂起失败!进程可能已经死亡或未创建!"); return; } 9. 在执行按钮函数中,编写如下代码: if(ResumeThread...

    java模拟进程调度算法和进程控制

    虽然没有直接的原生支持来模拟这些操作,但可以使用并发和多线程类库(如`Thread`和`ExecutorService`)来实现类似的机制,例如通过`wait()`和`notify()`方法模拟阻塞和唤醒,通过`Thread.sleep()`模拟挂起,以及...

    SQL挂起清除工具

    当安装进程挂起时,可能是由于多种原因,如系统资源不足、网络连接问题、权限不足或与其他服务冲突等。这时,使用这款工具可以有效地帮助用户清理挂起的安装任务,从而顺利进行后续的安装步骤。 SQL Server挂起的...

    解决sql挂起的修复工具

    1. **诊断分析**:工具能够深入到SQL执行的细节,分析挂起的原因,如查找引起阻塞的进程,检测是否存在死锁,分析长时间运行的查询等。 2. **性能监控**:实时监控SQL Server的性能指标,如CPU使用率、内存使用、...

    C# 如何挂起线程、休眠线程和终止线程(源码例)

    在C#编程中,线程是执行代码的基本单元,它允许程序同时处理...你可以打开这个文件,查看并学习如何在C#中实现线程的挂起、休眠和终止。通过理解这些概念和实践,你可以更好地掌握多线程编程,提升程序的并发性和效率。

    工具清除sql挂起工具

    在SQL Server数据库管理中,有时候会遇到查询或事务被挂起的情况,这可能导致系统性能下降,甚至阻塞其他正常操作。"工具清除sql挂起工具"就是为了帮助管理员解决这类问题而设计的专业工具。这个工具的主要功能是...

Global site tag (gtag.js) - Google Analytics