内核态与用户态

1.定义

内核态和用户态是操作系统的两种运行级别,

  1. 内核态:一个运行在内核模式的进程可以执行指令集中的任何指令,并且可以访问系统中的任何存储位置,换句话说,当一个进程通过系统调用、中断、异常陷入执行异常代码时,我们就称进程处于内核状态。内核态在共有的地址空间执行操作系统所有命令。
  2. 用户态:用户模式中的进程不允许执行特权指令,比如停止处理器、改变模式位、或者发起一个IO操作,运行在用户态的程序不能直接访问操作系统的数据和程序,进程所处的处理机是可抢占的。用户态是任务在自己的虚拟地址空间执行应用程序自有的指令。

区别:

  1. 用户态 只能执行自己的指令和数据,但不能存取内核指令和数据,也就是进程不允许执行特权指令。
  2. 内核态:内核模式的进程可以执行任何指令,读取系统中的任何存储位置。

 

2.用户态切换到内核态的3种方式

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

步骤:准备好系统调用参数->系统调用中断进入内核态->内核态执行->内核态的返回数据复制到用户态->用户态得到调用结果 

(2) 异常:当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常

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

这3种方式是系统在运行时由用户态转到内核态的最主要方式,其中系统调用可以认为是用户进程主动发起的,异常外围设备中断则是被动的。

3.每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈;当进程在内核空间时,cpu堆栈指针寄存器里面的内容是内核栈空间地址,使用内核栈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值