加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

内核控制路径(kernel control path).

(2014-10-14 14:57:04)
标签:

it

分类: linux操作系统
一个内核代码指令序列,我们可以成为内核控制路径(kernel control path).


    当有多个进程处于内核态时,则多个内核控制路径需要交错的被CPU运行,具体情况有以下几种:
    (1)进程A进入内核态,执行内核控制路径P1; 进程B进入内核态,执行内核控制路径P2.  P1先被执行,当由于某些原因,P1被阻塞,那么CPU会进行进程切换,切换到进程B,执行P2. 这种情形是两个进程内的不同内核控制路径交错进行。
    (2) 进程A进入内核态,执行内核控制路径P1.CPU执行p1过程中,发生异常。则P1被挂起,CPU执行进程A的内核控制路径P2.当P2执行完后,P1被 激活,CPU继续执行P1.P2和P1都在进程A的上下文环境中。这种情形是同一个进程内的多个内核控制路径交错进行。
    (3)进程A进入内核态,CPU运行A的内核控制路径P1.此时有硬件中断到来,则该P1被挂起,CPU开始执行处理此硬件中断的中断指令,即运行内核控制路径P2.内核处理完硬件中断后,继续执行P1.
    (4)进程A进入内核态,CPU运行A的内核控制路径P2,此时有处于内核态的且高优先级的进程B抢断CPU。则CPU开始运行进程B的内核控制路径。


    处于内核态和用户态的进程都有自己的进程地址空间(process address space).、每个进程都有自己的内存地址空间。处于用户态的进程,其进程地址空间包含代码区,数据区,以及私有栈。
处于内核态的进程,其代码区和数据区都是共享内核的,但是拥有自己的私有栈。也就是不同的内核控制路径,共享内核的代码区和数据区,但还有自己的私有栈。
    进程-->用户态:  代码区、数据区、私有栈。
           -->内核态:  私有栈。 代码区和数据区时内核提供的共享区。
    因此,当内核控制路径交错运行时,只有私有栈是每个路径自己的,其他都是共享内核的。

   不同的进程有自己的进程地址空间,当进程之间需要通信时,可以共享自己的部分进程地址空间,或者使用内存映射技术将共享的内存区域映射到自己的地址空间上。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有