【CPU用户状态和内核状态简介】

CPU 的两种工作状态 :
内核态 (管态) 和用户态 ( 目态) 。
内核态 :

  1. 系统中既有操作系统的程序, 也有普通用户程序。 为了安全性和稳定性, 操作系统的程序不能随便访问, 这就是内核态。 即需要执行操作系统的程序就必须转换到内核态才能执行!
  2. 内核态可以使用计算机所有的硬件资源! 用户态 :
    不能直接使用系统资源, 也不能改变 CPU 的工作状态, 并且只能访问这个用户程序自己的存储空间!
    当一个进程在执行用户自己的代码时处于用户运行态 (用户态) , 此时特权级最低, 为 3 级, 是普通的用户 进程运行的特权级, 大部分用户直接面对的程序都是运行在用户态。 Ring3 状态不能访问 Ring0 的地址空间, 包括代码和数据; 当一个进程因为系统调用陷入内核代码中执行时处于内核运行态 ( 内核态) , 此时特权级 最高, 为 0 级。 执行的内核代码会使用当前进程的内核栈, 每个进程都有自己的内核栈。
    用户运行一个程序, 该程序创建的进程开始时运行自己的代码, 处于用户态。 如果要执行文件操作、 网络数 据发送等操作必须通过 write、 send 等系统调用, 这些系统调用会调用内核的代码。进程会切换到 Ring0 , 然 后进入内核地址空间去执行内核代码来完成相应的操作。 内核态的进程执行完后又会切换到 Ring3, 回到用户 态。
    这样, 用户态的程序就不能随意操作内核地址空间, 具有一定的安全保护作用。这说的保护模式是指通 过内存页表操作等机制, 保证进程间的地址空间不会互相冲突, 一个进程的操作不会修改另一个进程地址空 间中的数据。
    用户态和内核态的切换的触发条件 ?
    当在系统中执行一个程序时, 大部分时间是运行在用户态下的, 在其需要操作系统帮助完成一些用户态自己没有特权 和能力完成的操作时就会切换到内核态。
    用户态切换到内核态的 3 种方式
    ( 1) 系统调用 这是用户态进程主动要求切换到内核态的一种方式。用户态进程通过系统调用申请使用操作系统提供的服务程序完成 工作。 例如 fork ( ) 就是执行了一个创建新进程的系统调用。系统调用的机制是使用了操作系统为用户特别开放的一 个中断来实现, 如 Linux 的 i nt 80h 中断。
    (2) 异常 当 cpu 在执行运行在用户态下的程序时, 发生了一些没有预知的异常, 这时会触发由当前运行进程切换到处理此异常 的内核相关进程中, 也就是切换到了内核态, 如缺页异常。
    (3) 外围设备的中断 当外围设备完成用户请求的操作后, 会向 CPU 发出相应的中断信号, 这时 CPU 会暂停执行下一条即将要执行的指令而 转到与中断信号对应的处理程序去执行, 如果前面执行的指令时用户态下的程序, 那么转换的过程自然就会是 由用户 态到内核态的切换。如硬盘读写操作完成, 系统会切换到硬盘读写的中断处理程序中执行后边的操作等。
    这三种方式是系统在运行时由用户态切换到内核态的最主要方式, 其中系统调用可以认为是用户进程主动发起的, 异 常和外围设备中断则是被动的。从触发方式上看, 切换方式都不一样, 但从最终实际完成由用户态到内核态的切换操 作来看, 步骤有事一样的, 都相当于执行了一个中断响应的过程。 系统调用实际上最终是中断机制实现的, 而异常和 中断的处理机制基本一致。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值