请你来说一说用户态到内核态的转化原理

参考回答:
1)用户态切换到内核态的3种方式
1、系统调用

这是用户进程主动要求切换到内核态的一种方式,用户进程通过系统调用申请操作系
统提供的服务程序完成工作。而系统调用的机制其核心还是使用了操作系统为用户特
别开放的一个中断来实现,例如Linux的ine 80h中断。

2、异常

当CPU在执行运行在用户态的程序时,发现了某些事件不可知的异常,这是会触发由
当前运行进程切换到处理此。异常的内核相关程序中,也就到了内核态,比如缺页异
常。

3、外围设备的中断

当外围设备完成用户请求的操作之后,会向CPU发出相应的中断信号,这时CPU会暂
停执行下一条将要执行的指令,转而去执行中断信号的处理程序,如果先执行的指令
是用户态下的程序,那么这个转换的过程自然也就发生了有用户态到内核态的切换。
比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。

2)切换操作

从出发方式看,可以在认为存在前述3种不同的类型,但是从最终实际完成由用户态到
内核态的切换操作上来说,涉及的关键步骤是完全一样的,没有任何区别,都相当于执
行了一个中断响应的过程,因为系统调用实际上最终是中断机制实现的,而异常和中断
处理机制基本上是一样的,用户态切换到内核态的步骤主要包括:

1、从当前进程的描述符中提取其内核栈的ss0及esp0信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N1314N

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值