kernel mode和user mode

    操作系统身居内核态(kernel mode)综合管理软硬件资源,但是一般而言,用户所编写的程序也会使用到操作系统资源。

  一个简单的想法是,不加任何限制的允许用户态的程序调用资源

   

   上面的好处显而易见,那就是fast(快),该程序可以自由的访问软硬件资源,达到程序所预期的速度。

  这种简单的管理方式带来了两个问题

  第一个问题,OS无法确定程序不会去访问OS不想让他访问的资源

  第二个问题,OS无法实现中断/杀死一个进程,并且让另一个进程访问资源(实现共享性)

  当程序发出一些“敏感指令”时,例如:发出I/O请求,申请更多的内存资源orCPU资源,如果不加以限制,哪么一个简单的程序就有可能“吃掉”所有的计算机资源来使得其崩溃。

  此外,如果不对程序访问权限加以限制,哪么一个程序就可以自由地从磁盘读写数据,这就会导致我们对磁盘的所有保护措施都会失效,因为操作系统这个大门已经“失守”。

  自然而然的想法就是,OS必须拥有对其资源的管理权,即必须把程序的执行加以限制,我们来看intel是如何实现的。

  

 第一个过程,初始化trap table(trap指令表),保存syscal handler的地址

 第一个我们要接触的概念是trap,trap可以翻译为“陷阱”,它所代表的含义是:用户态触发“陷阱”进入到内核态(这里“陷阱”倒是一个好词,特权升级了)

  如何程序在此刻触发trap

  哪么接下来OS就会

  

 首先是创建进程列表(按照各种管理策略,例如先来先服务、短进程优先等等),然后是开辟一块内存来装载程序。启动为argv准备的用户栈,使用kernel stack来装填reg/pc寄存器的内容

  这里出现了一个新的kernel stack 

  在使用trap指令从user mode进入kernel mode以后,在OS完成一系列操作的时候,同时也会生成对应的数据(PC寄存器,reg寄存器),将会以 return-from-trap 的形式返回数据,为了正确的返回这些数据,OS在内核开辟了一个新的stack来保存这些数据。

  如下图所示 

  

  

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值