linux设备驱动归纳总结(四):3.抢占和上下文切换
2011-11-02 17:20
239 查看
CU首页 ┊ fh265>>博客 微博 相册 个人中心 好友 消息 [退出] ┊ 随便看看
博文 博主 相册
投票 活动 发博文
公告:缅怀Dennis Ritchie活动开赛啦!
小白的博客——提升自已,分享别人
xiaobai.blog.chinaunix.net
好的女人可以不共享。好的技术绝对要共享!
首页 | 博文目录 | 相册 | 博客圈 | 关于我 | 留言
个人资料
![](http://bbs.chinaunix.net/uc_server/data/avatar/025/01/48/76_avatar_big.jpg)
diytvgy
微博论坛
发纸条打招呼加关注加好友
博客访问:74421
博文数量:42
博客积分:687
博客等级:中校
关注人气: 4
注册时间:2010-12-01 18:55:26
文章分类
全部博文(42)
![](http://blog168.chinaunix.net/image/list3.gif)
linux内核相关知识(1)
![](http://blog168.chinaunix.net/image/list3.gif)
闲话(3)
![](http://blog168.chinaunix.net/image/list41.gif)
linux内核与设备驱动(34)
![](http://blog168.chinaunix.net/image/list3.gif)
ubuntu(2)
未分类博文(2)
订阅我的博客
![](http://blog168.chinaunix.net/image/feedsky.gif)
![](http://blog168.chinaunix.net/image/d2.png)
![](http://blog168.chinaunix.net/image/d3.png)
![](http://blog168.chinaunix.net/image/d4.png)
好友
![](http://bbs.chinaunix.net/uc_server/data/avatar/020/54/36/72_avatar_small.jpg)
tekkama
![](http://bbs.chinaunix.net/uc_server/data/avatar/024/46/24/32_avatar_small.jpg)
小雅贝贝
![](http://bbs.chinaunix.net/uc_server/data/avatar/024/21/97/01_avatar_small.jpg)
luozhiy
![](http://bbs.chinaunix.net/uc_server/data/avatar/025/39/83/94_avatar_small.jpg)
Knivo
![](http://bbs.chinaunix.net/uc_server/data/avatar/025/14/85/47_avatar_small.jpg)
embedtek
![](http://bbs.chinaunix.net/uc_server/data/avatar/010/74/75/83_avatar_small.jpg)
sillybo
![](http://bbs.chinaunix.net/uc_server/data/avatar/020/48/80/75_avatar_small.jpg)
wang2kk
![](http://bbs.chinaunix.net/uc_server/data/avatar/022/36/89/73_avatar_small.jpg)
嵌入小凯
![](http://bbs.chinaunix.net/uc_server/data/avatar/007/94/48/36_avatar_small.jpg)
send_li
![](http://bbs.chinaunix.net/uc_server/data/avatar/024/78/92/55_avatar_small.jpg)
CU官方博
![](http://bbs.chinaunix.net/uc_server/data/avatar/025/81/10/99_avatar_small.jpg)
songtao
![](http://bbs.chinaunix.net/uc_server/data/avatar/025/05/20/30_avatar_small.jpg)
lxhhust
最近来访
![](http://bbs.chinaunix.net/uc_server/images/noavatar_small.gif)
fh265
49分钟前
![](http://bbs.chinaunix.net/uc_server/data/avatar/024/56/78/72_avatar_small.jpg)
shenhai
10月30日
![](http://bbs.chinaunix.net/uc_server/images/noavatar_small.gif)
a275532
10月14日
![](http://bbs.chinaunix.net/uc_server/data/avatar/025/39/83/94_avatar_small.jpg)
Knivo
10月13日
![](http://bbs.chinaunix.net/uc_server/images/noavatar_small.gif)
10月13日
![](http://bbs.chinaunix.net/uc_server/images/noavatar_small.gif)
lxr215
10月10日
![](http://bbs.chinaunix.net/uc_server/data/avatar/024/21/97/01_avatar_small.jpg)
luozhiy
10月9日
![](http://bbs.chinaunix.net/uc_server/images/noavatar_small.gif)
chafe
10月8日
![](http://bbs.chinaunix.net/uc_server/data/avatar/023/14/19/14_avatar_small.jpg)
mournju
10月7日
![](http://bbs.chinaunix.net/uc_server/images/noavatar_small.gif)
zotozo
10月7日
![](http://bbs.chinaunix.net/uc_server/images/noavatar_small.gif)
high_way
10月7日
![](http://bbs.chinaunix.net/uc_server/data/avatar/026/29/61/43_avatar_small.jpg)
wangxin
10月4日
字体大小:大 中 小博文
linux设备驱动归纳总结(四):3.抢占和上下文切换 (2011-01-03 11:41)转载
标签: linux 用户抢占 内核抢占 上下文切换
分类: 4并发与内核同步
linux设备驱动归纳总结(四):3.抢占和上下文切换
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
上一节介绍了进程调度的一些基本概念,并简单介绍了在没有抢占的情况下,CFS调度的是如何分配进程的优先级和时间片。但是,内核并不会只是单一地分配时间片让进程运行。
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
一、什么是上下文切换
上下文切换,是指从一个可执行的进程切换到另外一个可执行的进程。在linux内核中,上下文的切换有两种方式:第一种是进程主动让出CPU,这样的操作成为“让步”。第二种是由内核调度程序决定进程运行时间,在在运行时间结束(如时间片耗尽)或者需要切换高优先级进程时强制挂起进程,这样的操作叫“抢占”。
抢占是我一直误解的概念,我一直以为抢占是一个进程强制切换到另一进程。最近才知道,执行抢占的是内核,并不是进程。
抢占分为两种:用户抢占和内核抢占。下面将一一介绍。
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
二、用户抢占
如果只是靠每个进程主动放弃CPU,这是相当不明智的做法,所以,内核使用need_resched标志(在每个进程对应的thread_info结构体内)来表示进程是否需要被调度。当一个进程的时间片耗尽,或者有更高优先级的进程进入可执行队列,当前运行的进程对应的need_reched标志会被设置。
在内核即将要返回用户空间的时候,如果need_resched标志被设置,内核会在继续执行原来的进程之前调用调度程序,此时就会发生用户抢占。
要注意,用户抢占是发生在即将返回用户空间前,内核调用调度程序,重新选择一个更加合适的进程来运行(如高优先级),当然也可以是原来的程序。
总的来说,在以下情况下会发生用户抢占:
1、从系统调用返回用户空间。
2、从中断处理程序返回用户空间。
类比一下生活,其实这个很容易理解。如有人占用着厕所解大手时,有人进来需要解小手,或者允许他解大手的时间已经用完了,管厕所的人兄就会做个标记。等解大手的人兄冲完厕所了,管厕所的人兄看到自己做的标记,马上把解大手的人兄赶出来,把厕所让给解小手的人兄。
用户抢占并不是2.6内核的新特征,它只是一种进程调度的策略。内核返回用户空间后,每个进程有独立的4G虚拟空间,这时的进程调度并不会出现内核资源的争夺。
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
三、内核抢占
内核抢占是2.6内核的新特征,在之前的内核中,调度程序是不能调度正在运行在内核中的进程,即使时间片已经用完,只有在进程返回用户空间或者阻塞,才能进行进程的调度。
在2.6内核中,内核提供了为高优先级进程抢占正在内核运行的进程的机会。但是,对于多个同时运行的进程,内核空间的资源的共享的。所以,内核在抢占并且调度进程的时候,必须要保证调度是安全的。所谓的安全,就是不会因为新进程的调度导致一些共享资源的错乱,这就是下一节要讨论的内核同步。
内核进程可以调用函数来禁止内核抢占,在禁止这段时间内,抢占是不允许的,这样也是保护内核共享资源的一种方法。
所以,内核抢占发生在以下时候:
1、当终端处理程序将要执行完毕,返回内核空间之前。
2、执行在可以抢占的代码的时候。
3、内核进程让出CPU后,如阻塞。
生活上的例子我就不举了,描述拉到一半的过程实在恶心,有兴趣的自己联想。
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
四、总结
今天介绍了抢占的概念,这些都是我的理解,并不能确保一定正确,同时我把书上这么长的介绍压缩成短短的几句话,必然有很多不足的地方,希望大家能够指正。
在很多的书籍中描述的抢占大多数都是多内核抢占,并不是说用户抢占,用户抢占可以理解为一种进程调度的方式。
而由于内核抢占的出现,内核用共享资源的保护显得尤为重要,这是因为所有的进程都进入内核运行,稍不留神就会把另一个进程的资源更改掉,下节就是要介绍如何实现内核资源的保护。
同时需要强调的是,进程调度的介绍并没有涉及中断,一般的,只要中断产生,内核就会马上相应,不管进程在内核还是用户空间,所以这也是内核资源保护的内容之一。
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
分享到:新浪微博QQ空间开心网豆瓣人人网twitterfb
0
顶
阅读(1328)┊ 评论 (0)┊收藏(0)┊举报┊打印
前一篇:linux设备驱动归纳总结(四):2.进程调度的相关概念
发评论
验证码:
![](http://blog168.chinaunix.net/do.php?ac=seccode&rand=0.37080713850446045)
更换一张
关于我们 | 关于IT168 | 联系方式 | 广告合作 | 法律声明 | 免费注册
Copyright © 2001-2010 ChinaUnix.net All Rights Reserved 北京皓辰网域网络信息技术有限公司. 版权所有
感谢所有关心和支持过ChinaUnix的朋友们
京ICP证041476号 京ICP证060528号
博文 博主 相册
投票 活动 发博文
公告:缅怀Dennis Ritchie活动开赛啦!
小白的博客——提升自已,分享别人
xiaobai.blog.chinaunix.net
好的女人可以不共享。好的技术绝对要共享!
首页 | 博文目录 | 相册 | 博客圈 | 关于我 | 留言
个人资料
![](http://bbs.chinaunix.net/uc_server/data/avatar/025/01/48/76_avatar_big.jpg)
diytvgy
微博论坛
发纸条打招呼加关注加好友
博客访问:74421
博文数量:42
博客积分:687
博客等级:中校
关注人气: 4
注册时间:2010-12-01 18:55:26
文章分类
全部博文(42)
![](http://blog168.chinaunix.net/image/list3.gif)
linux内核相关知识(1)
![](http://blog168.chinaunix.net/image/list3.gif)
闲话(3)
![](http://blog168.chinaunix.net/image/list41.gif)
linux内核与设备驱动(34)
![](http://blog168.chinaunix.net/image/list3.gif)
ubuntu(2)
未分类博文(2)
订阅我的博客
![](http://blog168.chinaunix.net/image/feedsky.gif)
![](http://blog168.chinaunix.net/image/d2.png)
![](http://blog168.chinaunix.net/image/d3.png)
![](http://blog168.chinaunix.net/image/d4.png)
好友
![](http://bbs.chinaunix.net/uc_server/data/avatar/020/54/36/72_avatar_small.jpg)
tekkama
![](http://bbs.chinaunix.net/uc_server/data/avatar/024/46/24/32_avatar_small.jpg)
小雅贝贝
![](http://bbs.chinaunix.net/uc_server/data/avatar/024/21/97/01_avatar_small.jpg)
luozhiy
![](http://bbs.chinaunix.net/uc_server/data/avatar/025/39/83/94_avatar_small.jpg)
Knivo
![](http://bbs.chinaunix.net/uc_server/data/avatar/025/14/85/47_avatar_small.jpg)
embedtek
![](http://bbs.chinaunix.net/uc_server/data/avatar/010/74/75/83_avatar_small.jpg)
sillybo
![](http://bbs.chinaunix.net/uc_server/data/avatar/020/48/80/75_avatar_small.jpg)
wang2kk
![](http://bbs.chinaunix.net/uc_server/data/avatar/022/36/89/73_avatar_small.jpg)
嵌入小凯
![](http://bbs.chinaunix.net/uc_server/data/avatar/007/94/48/36_avatar_small.jpg)
send_li
![](http://bbs.chinaunix.net/uc_server/data/avatar/024/78/92/55_avatar_small.jpg)
CU官方博
![](http://bbs.chinaunix.net/uc_server/data/avatar/025/81/10/99_avatar_small.jpg)
songtao
![](http://bbs.chinaunix.net/uc_server/data/avatar/025/05/20/30_avatar_small.jpg)
lxhhust
最近来访
![](http://bbs.chinaunix.net/uc_server/images/noavatar_small.gif)
fh265
49分钟前
![](http://bbs.chinaunix.net/uc_server/data/avatar/024/56/78/72_avatar_small.jpg)
shenhai
10月30日
![](http://bbs.chinaunix.net/uc_server/images/noavatar_small.gif)
a275532
10月14日
![](http://bbs.chinaunix.net/uc_server/data/avatar/025/39/83/94_avatar_small.jpg)
Knivo
10月13日
![](http://bbs.chinaunix.net/uc_server/images/noavatar_small.gif)
10月13日
![](http://bbs.chinaunix.net/uc_server/images/noavatar_small.gif)
lxr215
10月10日
![](http://bbs.chinaunix.net/uc_server/data/avatar/024/21/97/01_avatar_small.jpg)
luozhiy
10月9日
![](http://bbs.chinaunix.net/uc_server/images/noavatar_small.gif)
chafe
10月8日
![](http://bbs.chinaunix.net/uc_server/data/avatar/023/14/19/14_avatar_small.jpg)
mournju
10月7日
![](http://bbs.chinaunix.net/uc_server/images/noavatar_small.gif)
zotozo
10月7日
![](http://bbs.chinaunix.net/uc_server/images/noavatar_small.gif)
high_way
10月7日
![](http://bbs.chinaunix.net/uc_server/data/avatar/026/29/61/43_avatar_small.jpg)
wangxin
10月4日
字体大小:大 中 小博文
linux设备驱动归纳总结(四):3.抢占和上下文切换 (2011-01-03 11:41)转载
标签: linux 用户抢占 内核抢占 上下文切换
分类: 4并发与内核同步
linux设备驱动归纳总结(四):3.抢占和上下文切换
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
上一节介绍了进程调度的一些基本概念,并简单介绍了在没有抢占的情况下,CFS调度的是如何分配进程的优先级和时间片。但是,内核并不会只是单一地分配时间片让进程运行。
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
一、什么是上下文切换
上下文切换,是指从一个可执行的进程切换到另外一个可执行的进程。在linux内核中,上下文的切换有两种方式:第一种是进程主动让出CPU,这样的操作成为“让步”。第二种是由内核调度程序决定进程运行时间,在在运行时间结束(如时间片耗尽)或者需要切换高优先级进程时强制挂起进程,这样的操作叫“抢占”。
抢占是我一直误解的概念,我一直以为抢占是一个进程强制切换到另一进程。最近才知道,执行抢占的是内核,并不是进程。
抢占分为两种:用户抢占和内核抢占。下面将一一介绍。
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
二、用户抢占
如果只是靠每个进程主动放弃CPU,这是相当不明智的做法,所以,内核使用need_resched标志(在每个进程对应的thread_info结构体内)来表示进程是否需要被调度。当一个进程的时间片耗尽,或者有更高优先级的进程进入可执行队列,当前运行的进程对应的need_reched标志会被设置。
在内核即将要返回用户空间的时候,如果need_resched标志被设置,内核会在继续执行原来的进程之前调用调度程序,此时就会发生用户抢占。
要注意,用户抢占是发生在即将返回用户空间前,内核调用调度程序,重新选择一个更加合适的进程来运行(如高优先级),当然也可以是原来的程序。
总的来说,在以下情况下会发生用户抢占:
1、从系统调用返回用户空间。
2、从中断处理程序返回用户空间。
类比一下生活,其实这个很容易理解。如有人占用着厕所解大手时,有人进来需要解小手,或者允许他解大手的时间已经用完了,管厕所的人兄就会做个标记。等解大手的人兄冲完厕所了,管厕所的人兄看到自己做的标记,马上把解大手的人兄赶出来,把厕所让给解小手的人兄。
用户抢占并不是2.6内核的新特征,它只是一种进程调度的策略。内核返回用户空间后,每个进程有独立的4G虚拟空间,这时的进程调度并不会出现内核资源的争夺。
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
三、内核抢占
内核抢占是2.6内核的新特征,在之前的内核中,调度程序是不能调度正在运行在内核中的进程,即使时间片已经用完,只有在进程返回用户空间或者阻塞,才能进行进程的调度。
在2.6内核中,内核提供了为高优先级进程抢占正在内核运行的进程的机会。但是,对于多个同时运行的进程,内核空间的资源的共享的。所以,内核在抢占并且调度进程的时候,必须要保证调度是安全的。所谓的安全,就是不会因为新进程的调度导致一些共享资源的错乱,这就是下一节要讨论的内核同步。
内核进程可以调用函数来禁止内核抢占,在禁止这段时间内,抢占是不允许的,这样也是保护内核共享资源的一种方法。
所以,内核抢占发生在以下时候:
1、当终端处理程序将要执行完毕,返回内核空间之前。
2、执行在可以抢占的代码的时候。
3、内核进程让出CPU后,如阻塞。
生活上的例子我就不举了,描述拉到一半的过程实在恶心,有兴趣的自己联想。
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
四、总结
今天介绍了抢占的概念,这些都是我的理解,并不能确保一定正确,同时我把书上这么长的介绍压缩成短短的几句话,必然有很多不足的地方,希望大家能够指正。
在很多的书籍中描述的抢占大多数都是多内核抢占,并不是说用户抢占,用户抢占可以理解为一种进程调度的方式。
而由于内核抢占的出现,内核用共享资源的保护显得尤为重要,这是因为所有的进程都进入内核运行,稍不留神就会把另一个进程的资源更改掉,下节就是要介绍如何实现内核资源的保护。
同时需要强调的是,进程调度的介绍并没有涉及中断,一般的,只要中断产生,内核就会马上相应,不管进程在内核还是用户空间,所以这也是内核资源保护的内容之一。
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
分享到:新浪微博QQ空间开心网豆瓣人人网twitterfb
0
顶
阅读(1328)┊ 评论 (0)┊收藏(0)┊举报┊打印
前一篇:linux设备驱动归纳总结(四):2.进程调度的相关概念
发评论
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
更换一张
关于我们 | 关于IT168 | 联系方式 | 广告合作 | 法律声明 | 免费注册
Copyright © 2001-2010 ChinaUnix.net All Rights Reserved 北京皓辰网域网络信息技术有限公司. 版权所有
感谢所有关心和支持过ChinaUnix的朋友们
京ICP证041476号 京ICP证060528号
相关文章推荐
- linux设备驱动归纳总结(四):3.抢占和上下文切换【转】
- 【Linux开发】linux设备驱动归纳总结(四):3.抢占和上下文切换
- 【Linux开发】linux设备驱动归纳总结(三):5.阻塞型IO实现
- 【Linux开发】linux设备驱动归纳总结(十二):简单的数码相框
- linux设备驱动归纳总结(八):2.match.probe.remove
- linux设备驱动归纳总结(四):1.进程管理的相关概念
- linux设备驱动归纳总结(四):5.多处理器下的竞态和并发
- 【Linux开发】linux设备驱动归纳总结(三):6.poll和sellct
- linux设备驱动归纳总结(三):4.ioctl的实现
- linux设备驱动归纳总结(八):2.match.probe.remove
- linux设备驱动归纳总结(三):.阻塞型IO实现
- linux设备驱动归纳总结(三):3面向对象思想和lseek
- linux设备驱动归纳总结(四):2.进程调度的相关概念
- linux设备驱动归纳总结(三):2open.close.read.write
- 【Linux开发】linux设备驱动归纳总结(三):7.异步通知fasync
- linux设备驱动归纳总结(三):5.阻塞型IO实现
- linux设备驱动归纳总结(八):3.设备管理的分层与面向对象思想
- linux设备驱动归纳总结(三):5.阻塞型IO实现
- linux设备驱动归纳总结(八):2.总线、设备和驱动的关系
- 【Linux开发】linux设备驱动归纳总结(四):1.进程管理的相关概念