操作系统--阻塞,睡眠,挂起

线程阻塞状态

线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。


所谓阻塞状态是正在运行的线程没有运行结束,暂时让出CPU,这时其他处于就绪状态的线程就可以获得CPU时间,进入运行状态。

线程运行过程中,可能由于各种原因进入阻塞状态:

  1. 线程调用一个在I/O上被阻塞的操作,即该操作在输入输出操作完成之前不会返回到它的调用者;
  2. 线程试图得到一个锁,而该锁正被其他线程持有;
  3. 线程通过调用sleep方法进入睡眠状态;
  4. 线程在等待某个触发条件;
  5. ......

以上原因可以划分成三大类:线程阻塞、线程睡眠、线程挂起。

线程阻塞、线程睡眠、线程挂起的形象比喻


操作系统中阻塞、睡眠、挂起的区别形象解释。首先这些术语都是对于线程来说的,对线程的控制就好比你控制了一个雇工为你干活。

线程阻塞:本来你让雇工扫地,结果扫帚被偷了或被邻居家借去了,你又没让雇工继续干别的活,他就只好睡觉了。雇工一旦发现扫帚回来了,他就会自己去干活的。

线程睡眠:你主动对雇工说:“你睡觉去吧,某时某刻过来报到,然后接着干活”。

挂起线程:你对主动对雇工说:“你睡觉去吧,用着你的时候我主动去叫你,然后接着干活”。

线程阻塞


线程在运行过程中必然要获取访问系统资源,暂且不说CPU,线程运行肯定要和磁盘进行交互,继而发生IO操作,IO操作势必要引起等待,在资源未读取完成,线程必然要等待,那么在等待IO完成这个部分就是阻塞状态。所以从这里来看,阻塞是一种被动的方式,由于获取资源获取不到而引起的等待。

本人将线程阻塞细分成两类:

  • 等待阻塞:等待IO等硬件资源
  • 同步阻塞:等待信号量等内核资源,延伸的还有互斥锁、条件变量等线程同步对象(线程Join操作原理估计也是同步阻塞)。

线程睡眠


当一个线程获取资源失败(但没有触发线程阻塞)暂时无法继续运行时,可以有两种处理方式:

  • 放弃CPU,自己睡眠,触发调度;
  • 占有CPU,忙等待,使用完自己的时间。

从这里看,睡眠是一种主动的方式,且仅仅作为一种处理手段。睡眠不仅仅用于使线程进入阻塞状态,更多的,我们可以在适当的时候设置让线程睡眠一定的时间。

线程挂起


线程挂起是操作系统调度线程的手段之一,操作系统在调度时暂停当前线程的执行,将其切换至阻塞状态,将CPU资源调度给其他的线程;在需要的时候,操作系统可以恢复某线程的执行权限,将其切换至就绪状态。

因此常见的线程挂起是一种被动的方式,场景如下:

  1. 分时操作系统当前进程时间片用完时,被动切换至阻塞状态
  2. 抢占式操作系统当前进程被高优先级进程抢占后,被动切换至阻塞状态

某些情况下线程挂起是主动触发的,比如调试程序时,线程执行到某个断点,会主动挂起线程(trap陷入)。

进程挂起


线程挂起主要考虑CPU资源的调度,而进程挂起主要考虑是内存资源的分配。

挂起进程在操作系统中可以定义为暂时被淘汰出内存的进程,机器的资源是有限的,在资源不足的情况下,操作系统对在内存中的程序进行合理的安排,其中有的进程被暂时调离出内存,当条件允许的时候,会被操作系统再次调回内存,重新进入等待被执行的状态即就绪态。

操作系统为什么要引入挂起状态?挂起状态涉及到中级调度,因为当内存中的某个程序需要大的内存空间来执行,但这时内存有没有空余空间了,那么操作系统就回根据调度算法把一些进程放到外存中去,以腾出空间给正在执行的程序的数据和程序,所以引如了挂起状态。引起挂起状态的原因有如下几方面:

(1)终端用户的请求。当终端用户在自己的程序运行期间发现有可疑问题时,希望暂停使自己的程序静止下来。亦即,使正在执行的进程暂停执行;若此时用户进程正处于就绪状态而未执行,则该进程暂不接受调度,以便用户研究其执行情况或对程序进行修改。我们把这种静止状态成为“挂起状态”。

(2)父进程的请求。有时父进程希望挂起自己的某个子进程,以便考察和修改子进程,或者协调各子进程间的活动。

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

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

(5)对换的需要。为了缓和内存紧张的情况,将内存中处于阻塞状态的进程换至外存上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,006评论 0 23
  • 进程和线程 进程线程的区别1、进程是什么?是具有一定独立功能的程序、它是系统进行资源分配和调度的一个独立单位,重点...
    HeartGo阅读 1,158评论 0 4
  • 童年的花园隐藏着幸福的秘密 2017-05-25老默 微信公众号:活在当下的小鱼 每天晚上都会做梦,很多...
    深圳老默阅读 588评论 1 3
  • 人际关系中感性和理性哪个更重要? 那次和他们讨论,我之所以站在理性这一边,是因为我想成为理性人。 第一点 其实哪个...
    素年锦时198503阅读 4,139评论 1 3
  • 美容院的管理在于新客户的开发老客户的服务销售服务维护客勤关系了解客户需求(拓客留客服务做活动) 管理美容师的心态技...
    燕南霏阅读 240评论 0 0