• 系统调用

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

  • 中断

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

  • 异常

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

当时大神们在写 Linux 内核的时候,估计还不知道将来虚拟机会大放异彩,大神们想,操作系统一共分两级特权,一个内核态,一个用户态,而 CPU 却有四个等级,好奢侈,好富裕,就敞开了用,内核态运行在第 0 等级,用户态运行在第 3 等级,占了两头,太不会过日子了。

如果用户态程序做事情,就将扳手掰到第 3 等级,一旦要申请使用更多的资源,就需要申请将扳手掰到第 0 等级,内核才有高权限访问这些资源,申请完资源,返回到用户态,扳手再掰回去,这个程序一直非常顺利的运行着,直到虚拟机的出现。

linux 切换用户_Linux 用户态切换到内核态的 3 种方式相关推荐

  1. 用户态和内核态:用户态线程和内核态线程有什么区别?

    转载 文章来源于 拉钩教育 重学操作系统 林䭽 用户态和内核态:用户态线程和内核态线程有什么区别? 什么是用户态和内核态 Kernel 运行在超级权限模式(Supervisor Mode)下,所以拥有 ...

  2. 计算机基础理论知识梳理篇(二):目态(用户态)、管态(内核态)

    目态与管态 多数计算机系统将CPU执行状态分为目态(用户态)与管态(内核态),CPU的状态属于程序状态字PSW的一位,CPU交替执行操作系统程序和用户程序. 1. CPU设计中的目态.管态 目态指非特 ...

  3. linux+Qt 下利用D-Bus进行进程间高效通信的三种方式

    linux+Qt 下利用D-Bus进行进程间高效通信的三种方式 原文链接: https://www.cnblogs.com/wwang/archive/2010/10/27/1862552.html ...

  4. linux 各用户内存_Linux用户空间与内核空间(理解高端内存)

    Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数 ...

  5. linux退出热键_linux 用户退出怎么命令

    展开全部 用户退出登录的方法有以下三种: 1.在shell提示符下输入 exit 按回车确认 2.在shell提示符下输入 logout 按回车确认 3.按快捷键3231313335323631343 ...

  6. linux vdso(Virtual Dynamically-linked Shared Object)内核态的调用映射到用户态的地址空间开销更小

    VDSO(Virtual Dynamically-linked Shared Object)是个很有意思的东西, 它将内核态的调用映射到用户态的地址空间中, 使得调用开销更小, 路径更好. 开销更小比 ...

  7. 操作系统中用户态和内核态(系统态)是什么?用户态如何变成内核态?

    用户态:当进程在执行用户自己的代码时,则称其处于用户态,这时cpu 访问资源有限,运行在用户态下的程序不能直接访问操作系统内核数据结构和程序. 内核态:当一个任务(进程)执行系统调用而陷入内核代码中执 ...

  8. linux c 获取进程p id,详解Linux获取线程的PID(TID、LWP)的几种方式

    在 Linux C/C++ 中通常是通过 pthread 库进行线程级别的操作. 在 pthread 库中有函数: pthread_t pthread_self(void); 它返回一个 pthrea ...

  9. 2019-8-19 [Linux] 3.为什么要修改静态IP IP的获取有几种方式 设置静态IP后无法Ping百度怎么办 可以ping后CRT无法连接怎么办

    文章目录 3.修改linux系统的静态IP 问题1 : 为什么要修改静态IP? 问题2 : IP的获取有几种方式? 手动或者自动 验证是否可以正常上网 ping一下百度 看一下是否可以正常上网 问题3 ...

最新文章

  1. 利用java打印正三角形_JAVA一层for循环实现打印正三角形和到三角形
  2. flask处理cookie
  3. Vue生命周期详解 对应代码解析
  4. 图文详解 Windows 2003服务器集群安装(1)
  5. java 1.7 可变参数,JDK1.7新特性(2):异常和可变长参数处理
  6. Android仿人人客户端(v5.7.1)——采用ViewGroup做父容器,实现左侧滑动菜单(三)...
  7. 使用RabbitMQ做的一些工作及经验教训
  8. BIM族库下载——Revit配景族
  9. c语言蠕虫病毒源码,蠕虫病毒源码!附带解毒源码!
  10. 【深度学习框架】-Caffe(入门级学习一:简单介绍)
  11. 使用基于全志D1-H的LicheeRV的 86 Panel 与 Tina BSP 实现 RGB 与 SPI 双屏显示
  12. Kafka bootstrap.servers
  13. open judge1.7.13
  14. anz的swift code_澳洲Commonwealth bank是不是只有一个SWIFT CODE?
  15. linux后台挂起、恢复进程相关命令
  16. 2021年“亿级”体量产品的五大发展趋势
  17. 如何提高百度经验推广技巧
  18. ApowerMirror PJ教程
  19. 群辉中使用私有Docker Registry
  20. Array [] 数组

热门文章

  1. Python基础笔记8
  2. Java基础 之软引用、弱引用、虚引用
  3. 开源怎么挣钱(转帖收藏)
  4. 【蓝桥杯-第五届】 啤酒和饮料
  5. nyoj - 概率计算 926
  6. fedora虚拟机中的vsftp服务配置
  7. 手动将经典 VM 从 VHD 迁移到新的 ARM 托管磁盘 VM
  8. cmd mysql uroot p不是内部或外部命令...
  9. 伪元素控制网页表单样式
  10. 使用ActionBar实现Tab导航(快速生成Tab样式)