为什么可抢占式内核核需要使用可重入函数

实现协程的另一种思路——关于协程的思考【gad吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:10,272贴子:
实现协程的另一种思路——关于协程的思考收藏
 我们为什么需要多进程/多线程/多协程呢?因为我们希望能在同一时间做多件事情,而cpu的处理速度又足够快,处理一件事绰绰有余,甚至需要cpu停下来等一些事。如《UNIX网络编程》中,前几章描述了使用系统API(不包括select/epoll)单进程单线程能做到的事情是多么有限。因为单进程单线程情况下,只能顺序的执行一条执行流(即使if else等跳转,也是顺序的执行同一个执行流),除了一个例外:信号,信号处理程序是独立于主执行流的,因此信号中要和多线程情况一样小心处理不可重入函数。那么如何实现多条执行流呢?  执行流是有状态的,要想切换它,就要保存它的“状态”,或者叫“上下文”,或者叫“现场”。上下文主要指的是栈和寄存器,而切换时机主要有被动抢占&主动放弃。内核级进程线程当然很容易实现这些,有主动放弃的API,如sleep(),也有被动抢占的时机,如定时tick,又如中断或系统调用造成的陷入内核,在从内核返回用户态时也会顺便检查是否可以抢占进程,因为进入内核时已经做了现场保存,这里即将恢复,如果这个进程不久将被强制切走,不如现在直接去恢复别的进程运行。更详细和权威的内容可以参考《深入理解Linux内核》。操作系统内核之所以能做到这些,依赖于一些条件:操作系统可以提供API、操作系统以下的硬件定时器中断让操作系统可以定时检查一些事。那么要在用户态实现协程,思路无非是主动放弃&被动抢占了。主动放弃可以通过提供yield API实现,而理论上使用内核提供的定时器API可以实现被动抢占。然而被动抢占的复杂度要远远高于主动放弃了,并且在使用上也更复杂。举个例子:STL的map是线程不安全的,单线程多协程下,如果协程只会主动放弃运行,则我们清楚的知道一个协程在操作map的时候不会被中断,它只有显式放弃cpu时才会中断,这时多个协程共用一个map是不用加锁的,而如果协程切换有主动抢占功能,这个主动抢占基本必然依赖于操作系统定时器,这个定时器随时可能到来,完全有可能在map操作一半的时候被中断,这种情况下多协程共享map就要像多线程一样加锁。我想这就是目前的协程实现均未引入抢占式的原因,失远远大于得。
登录百度帐号推荐应用RTOS实时操作系统简介 - hahachenchen789的博客 - CSDN博客
RTOS实时操作系统简介
实时系统:
Real-time System 是一种很特殊的系统,一般应用于嵌入式领域,与嵌入式系统有很多交集,但它与嵌入式系统有所区别。
嵌入式系统是将应用程序、操作系统、和计算机硬件在一起的系统,是指以应用为中心,以计算机技术为基础,软硬件可裁剪,其针对的用户应用对功能、可靠性、成本、体积、功耗和使用环境有特殊要求的专用计算机系统。
而实时系统的核心特征是实时性,本质就是任务处理所花费时间的可预测性,任务要在规定时间内完成。包含两个重要特征:逻辑和功能的正确性以及时间的精确性。
依据超过限制时间后系统计算结果的有效性可以将实时系统分为硬实时系统和软实时系统,对于硬实时系统:一旦超过规定的时限,系统 的计算结果将完全失效或者高度失效,系统将遭受毁灭性的灾难(比如,核电站控制、水坝控制),而在软实时系统中,系统的计算结果大打折扣,但不致于像硬实时操作系统一样失效,而是主要体现在系统的性能会下降。
实时操作系统:
在实时系统中的一个关键组成部分是实时操作系统,其在实时系统中起着核心作用,整个实时系统是在实时操作系统的控制下来管理和协调各项工作,根据各个任务的优先级,动态的切换各个任务,保证对实时性的要求。
实时操作系统也分为软实时操作系统和硬实时操作系统,不同的实时操作系统对于时限的要求是不一样的,两者的区别通常与系统的时间精度有关,典型的软实时任务的调度精度大于千分之一秒,而典型的硬实时系统任务为微秒级,出名的硬实时操作系统有rtems,vxworks,qnx等,软实时操作系统则有wince、Linux2.6.x。
在多任务(线程)系统中,决定运行哪个任务,这是操作系统内核的主要职责之一,多数实时内核是基于优先级调度算法,高优先级的可以马上执行任务占有CPU运行,根据何时让高优先级任务掌握CPU的使用权,可把操作系统内核分为两种类型,即不可抢占型操作系统内核和可抢占型操作系统内核。
不可抢占型内核:
要求每个任务自我放弃CPU的使用权,只要任务自身不放弃CPU,它就可以一直运行下去,虽然对于外设的异步事件还是由中断服务来处理,即东段服务可以使一个高优先级的任务由阻塞变为就绪状态,但中断服务以后控制权还是回到原来被中断了的任务,只有等该任务主动放弃CPU的使用权时,高优先级的任务才能获得CPU的使用权。
在不可抢占型内核中,由于每个任务要运行到自身结束才释放CPU的控制权,所以可以在任务中使用不可重入函数,而不必担心其他任务可能也会正在使用该函数,从而造成对共享数据的破坏。缺点是响应时间过于缓慢,因为高优先级的内务要等到当前运行的任务释放CPU后才能运行,导致不可抢占型内核的任务响应时间时不确定的,因为这个缺陷,使得实时操作系统中,这种内核比较少。
可抢占型内核:
绝大多数实时操作系统内核都是可抢占型,在可抢占型内核中,处于最高优先级的任务一旦就绪,内核马上调度此任务,让最高优先级的任务总能得到CPU的控制权,这样使得任务响应时间得到最优化。
使用可抢占型内核时,应用程序不能直接使用不可重入型函数,因为可能会造成数据破坏,如果确定需要调用不可重入型函数,那么在调用函数时必须满足互斥条件。
任务(线程)状态:
任务运行过程中,每个任务都处在以下五种状态之一:
1.创建态(new):一个任务正在被创建,还没被转到就绪状态之前的状态
2.就绪态(ready):该任务获得了除了CPU以外的所有一切资源,但由于还没占有到CPU,因此还暂时不能运行。
3.运行态(running):该任务获得了CPU的使用权,正在运行中
4.阻塞态(Blocked):该任务在等待某一事件发生,而暂停运行
5.退出态(exit/dormant):一个任务正在从系统消失。
可能的状态变化如下:
NULL-new:一个新任务被产生
new-ready:任务创建完毕并初始化后,准备运行,变成就绪状态
ready-running:处于就绪状态被任务调度程序选中后,分配到CPU上运行
running-exit:当任务已经完成或者出错,操作系统将其结束
running-ready:运行时任务,由于分配给他的处理时间片用完或者被高优先级任务抢占而让出CPU
running-blocked:当任务请求某资源且必须等待
blocked-ready:当任务要等待的事件到来时,从阻塞变成就绪状态
任务调度算法:
当多个就绪任务的优先级不同时,选择优先级高的获得CPU控制权,这种调度方法称为优先级调度法,当两个或两个以上的任务有同样的优先级,有两个方法可以采用,一个是FIFO先入先出调度,第二个就是内核允许一个任务运行确定好的一个时间片,然后切换给另一个任务,这种调度方法称为时间片轮转调度法,也称时间片调度,当内核满足以下条件时,就把CPU控制权转给下一个任务就绪的任务:
当前任务的时间片用完了
当前任务在时间片还没结束就完成了
我的热门文章12??????9 ?????? ?????????-??????_??????
上亿文档资料,等你来发现
12??????9 ?????? ?????????-??????_??????
三亿文库包含各类专业文献、中学教育、高等教育、专业论文、幼儿教育、小学教育、外语学习资料、各类资格考试、12??????9 ?????? ?????????-??????_??????等内容。
 机械设计第九版课后习题答案_工学_高等教育_教育专区。机械设计第九版课后重点习题答案 第三章 机械零件的强度 p45 习题答案 3-1 某材料的对称循环弯曲疲劳极限 ...  华东师范大学离散数学章炯民课后习题第9章答案_理学_高等教育_教育专区。P160 2. 任意 100 人中,至少有多少人的生日在同一个月? 解:?100/12?=9 少数学生计算...  9.20你是男生?女生?如何择自己合适的专业?_教育学/心理学_人文社科_专业资料。你是男生 or 女生?如何择自己合适的专业? 是不是还在因为你的性别对专业的选择犹...  昨天上午,全市 9 家 银行 900 家网点现场兑换 2015 年 10 元纪念币。 与以往纪念币 1 元的币值不同, 这是央行首 次发行面额 10 元的贺岁普通币。不少...  (9)) 接触表面情况 (KEYOPT(12)) 命令:KEYOPT)) 同理对于实常数的更改是 GUI:main menu& preprocessor&real constant 时候,点击 edit,选择需要更改 的单元,...  9岁孩子问“家里有多少钱?”,妈妈的回答影响孩子一生_育儿理论经验_幼儿教育_教育专区。辰辰二年级那年,听到班上同学谈论“家里的房子有 150 平方米” ,放学...  计算机组成原理第9章习题参考答案_理学_高等教育_教育专区。计算机组成原理 第9 章部分习题参考答案 第 9 章习题(有关虚拟存储器的题目)参考答案 3. 下述有关...  9.28 怎样让性格越变越好?_教育学/心理学_人文社科_专业资料。转载文章 怎样让性格越变越好? 几年前的一天,布兰登?格林(Brandon Green)坐在沙发上,琢磨着他...推荐这篇日记的豆列
&&&&&&&&&&&&异步可重入函数与线程安全函数等价吗? - 知乎146被浏览6953分享邀请回答261 条评论分享收藏感谢收起192 条评论分享收藏感谢收起查看更多回答1 个回答被折叠()}

我要回帖

更多关于 内核抢占 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信