· [Java论坛][安全论坛][数据库论坛][操作系统论坛]
· [访谈] 网银安全系列访谈之:惊心动魄网银故事
· [热点专题] 网银安全系列 3G上网卡巡礼
· [订阅IT技术周刊][IT资源下载专区][病毒求助专区]
· [热点] 跨站脚本十二问 四步防范Conficker
· [热点] Windows 7 RC版公开下载 憾缺中文版

关于Linux操作系统的内核重入的分析

发布时间:2007.01.12 04:49     来源:linuxforum    作者:linuxforum

对于Linux内核重入我做了一下一些分析。

首先要界定一个范围(代码段,函数)然后才可以讨论重入。

比如以函数A,B分别为一个范围。在运行A的时候发生中断,调用B,B运行完了又返回A,这个时候称B进入A。

如果A=B,那么称A重入A,或者可以说有两个A的实例在运行。

重入导致的问题主要就是由于这两个A可以会几乎同时访问一些堆中的变量而出现不一致。解决这个问题的办法有几个:

干脆不允许某个函数(某段代码)重入,也就是如果A运行,当发生中断的时候,调用A,发现已经有A运行了,则返回,不再运行这个新的A.bottom half采用这个办法。

或者对一些临界区上锁。

或者干脆关中断。

内核的重入,首先界定的范围就是整个处于内核级的代码段。

因此,内核的重入可以说是经常发生的,比如中断发生时。

内核的重入有两种情况:

1与进程无关的中断发生时,CPU已经在内核中运行,也就是中断嵌套。一般内核会做一定的保护,比如关中断,锁临界区等。但是这种中断有一个特点,就是先进后出的栈的模式,因此,用一个栈足矣。

2与进程相关的切换。如果总是在内核返回到用户级代码段时才切换,那么这个意义上的重入就不存在,用一个内核栈就可以了。还有一种可能是在内核中就切换,由于进程执行并不是按照先进先出的模式,因此,每个进程都有一个内核栈。

还有一个问题,上面与进程无关的中断一般访问与进程无关的数据,所以需要保护的数据比较少。在这种重入中,几个进程的内核实例会访问与进程相关的共有数据,会导致不一致,而这种临界区会比较多,所以上锁可能会比较麻烦,Linux采用的是一种非透明的切换,即当前进程的内核部分必须主动放弃CPU,才可能切换。这样使内核同步比较简单。所以Linux内核的重入是一定条件下的重入,非抢占式的重入。

(T004)

  


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· Linux操作系统的内核模块全面解析 (01-11) · 让你的Linux内核重编译之路走得更通畅 (01-11)
· 轻松自如的装卸Linux系统内核模块 (01-11) · 硬盘中安装Linux操作系统最简单方法 (01-10)
· Linux中用GDB与QEMU来调试内核分析 (01-10) · Linux操作系统动态函式库探究(一) (01-10)
· 用Linux实现Internet冗余连接(上) (01-10) · Linux操作系统下目录切换技巧总结 (01-10)
· 教你在Linux系统轻松切换X窗口管理器 (01-10) · 在Linux系统下建立强大的FTP搜索引擎 (01-10)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
资讯 通信 IT产品 IT技术 信息化
2009第七届中国电脑商年会直播
·创业投资系列访谈:产业..
·特别策划:视频网站系列..
·专题:网游虚拟货币新规..
专题:6月上市手机新品回顾及7月新机展望
·2009年中国电信业信息化..
·专题:把iPhone 3GS“解..
·WAPI重启国际标准进程 ..
专题:09年中盘点-联想春季打印机新品回顾
·InfoComm 2009 视听与集..
·网游背后的故事 网游服..
·[专题]联想ThinkPad T40..
BizSpark:微软为技术创业企业点燃火花
·社区活动:我的IT求知生..
·访谈:内网安全2009系列..
·安全访谈:网银安全之Sa..