Linux的内核态与用户态切换

       今天做题目的时候遇到的问题,问的是Linux的内核态与用户态之间的通信方式,我直接懵逼了,虽然接触了Linux有段时间了,但是这么抽象的问题还没研究到。果断百度下,这哥们写的很通俗易懂,稍微懂点操作系统的都能看懂。

       先上该博主的链接:http://blog.chinaunix.net/uid-1829236-id-3182279.html

       我说下我的理解,如有不对的地方请各位批评指正。

       我们的程序运行在CPU上时,是分不同的等级的,如果要高效的运行程序,就必须获得CPU的特权级,显然,笼统的说,内核态就是获得最高特权的程序,用户态就是获得最低特权的程序。那么用户态与内核态最大的差别就是权力不同,用户态的程序不能访问操作系统内核的数据结构。那么问题来了,当我们的程序需要操作系统帮助完成一些工作时,就需要从用户态切到内核态。

      切换方法有三种:系统调用、异常、外设中断。

      第一个是用户态主动调用系统函数,第二、三是被动方式,但三个方法的本质都是通过中断实现切换任务。

      由用户态切换到内核态的步骤大致如下:

                   [1] 从当前进程的描述符中提取其内核栈的ss0esp0信息。

                   [2] 使用ss0esp0指向的内核栈将当前进程的cs,eip,eflags,ss,esp信息保存起来,这个过程也完成了由用户栈到内核栈的切换过程,同时保存了被暂停执行的程序的下一条指令。

                   [3] 将先前由中断向量检索得到的中断处理程序的cs,eip信息装入相应的寄存器,开始执行中断处理程序,这时就转到了内核态的程序执行了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值