网络安全参考 | UNIX参考 | GPS参考 | 无线参考 | 在线手册 | OSBUG.ORG | SUNNY-NETWORK.COM
天线制作 GPS 地标
网站地图 RSS订阅
高级搜索 收藏本站
Home | 业界动态 | Open source | GNU | Linux | BSD | Solaris | AIX | HP-UX | IRIX | Mac OS X | Minix | Tru64 | SCO UNIX | Network | Security | X-Window | Database | 应用服务 | Programming | 经典著作 | 永远的纪念 | 杂项
 当前位置: Home > Linux > 内核 > 文章  
关于Linux操作系统的内核重入的分析
文章来源: linuxforum 文章作者: linuxforum 发布时间: 2007-01-12   字体: [ ]  
 

  对于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内核的重入是一定条件下的重入,非抢占式的重入。

  (参考链接: http://linux.ccidnet.com/art/741/20070111/998955_1.html)

 
推荐文章
·浅谈关于Linux系统内核的源代码
·打造适合自己Slackware机器的内
·自己动手做一个最小的Linux kern
·一个Linux爱好者的2.6.11内核编
·定制Linux系统内核,发挥Linux潜
·如何编译一个操作系统内核-Ubunt
·重新编译Linux操作系统的内核指
·快速编译Linux内核需要的模块方
·编译内核以使其支持PS并口改装手
·编译支持NTFS的Linux系统内核模
·配置、编译Linux系统内核的实用
·Linux操作系统的内核编译详细步
·Linux操作系统的内核编译内幕详
·Linux基础知识:内核编译-内核管
 
 
↑返回顶部   打印本页   关闭窗口↓  

Google
 
Web oldhand.org unixreference.net meshmea.org
相关分类
热点文章
·Linux中的Ramdisk与Init
·Linux 初始 RAM 磁盘(i
·一个Linux爱好者的2.6.1
·自己动手做一个最小的Li
·如何在Linux系统中添加
·如何编译一个操作系统内
·udev轻松上路
·Linux2.6内核驱动移植
相关文章
·Linux操作系统下如何写
·精华:升级Linux操作系
·轻松自如的装卸Linux系
·使用GDB与QEMU调试内核
·教你一招,给Linux内核
·Linux基础知识:内核编
·分析Linux操作系统内核
·Linux操作系统的内核编
更多...
 
 

Copyright(c) 2001-2009 OLDHAND ORGANIZATION, All Rights reserved.
Power by DedeCms 织梦内容管理系统