用户态和内核态的转换

1)用户态切换到内核态的3种方式

a. 系统调用 这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如前例中fork()实际上就是执行了一个创建新进程的系统调用。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。系统调用实质上是一个中断,而汇编指令int 就可以实现用户态向内核态切换,iret实现内核态向用户态切换 b. 异常 当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。

c. 外围设备的中断 当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。 这3种方式是系统在运行时由用户态转到内核态的最主要方式,其中系统调用可以认为是用户进程主动发起的,异常和外围设备中断则是被动的。

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

  1. 从当前进程的描述符中提取其内核栈的ss0及esp0信息。
  2. 使用ss0和esp0指向的内核栈将当前进程的cs,eip,eflags,ss,esp信息保存起来,这个 过程也完成了由用户栈到内核栈的切换过程,同时保存了被暂停执行的程序的下一条指令。
  3. 将先前由中断向量检索得到的中断处理程序的cs,eip信息装入相应的寄存器,开始 执行中断处理程序,这时就转到了内核态的程序执行了。

用户态和核心态的转换相关推荐

  1. 用户态和核心态(内核态)的概念、区别和转换

    这里写自定义目录标题 一.用户态和核心态的概念 用户态 核心态 二.用户态和核心态的区别 三.为啥要区别 四.二者之间如何切换 系统调用 中断 中断 一.用户态和核心态的概念 用户态 用户态和核心态是 ...

  2. 用户态与核心态的区别

    文章目录 1. 用户态与核心态的区别 1.1 定义上的区别 1.2 用户态和内核态的切换 1.3 用户态和核心态各有优势 1.4 哪些功能需要用核心态 1. 用户态与核心态的区别 1.1 定义上的区别 ...

  3. 操作系统:用户态和核心态的区别

    1.操作系统需要两种CPU状态: 内核态(Kernel Mode):运行操作系统程序 用户态(User Mode):运行用户程序 2.指令划分: 特权指令:只能由操作系统使用.用户程序不能使用的指令. ...

  4. 用户态和核心态的区别

    1.操作系统需要两种CPU状态: 内核态(Kernel Mode):运行操作系统程序 用户态(User Mode):运行用户程序 2.指令划分: 特权指令:只能由操作系统使用.用户程序不能使用的指令. ...

  5. 处理器的用户态和核心态

  6. 内存区划分;内存分配;堆、栈概念分析;动态内存管理数据结构及程序样例;核心态与用户态...

    一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放 2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初 ...

  7. 操作系统之核心态和用户态

    在操作系统中引入核心态和用户态这两种工作状态后,就需要考虑这两种状态之间如何切换. 操作系统内核工作在核心态,而用户程序工作在用户态.系统不允许用户程序实现核心态的功能,而它们又必须使用这些功能.因此 ...

  8. 内核态与用户态【转载】

    原文:http://blog.csdn.net/skywalkzf/article/details/5185442 内核态与用户态是操作系统的两种运行级别,intel cpu提供Ring0-Ring3 ...

  9. OS-用户态和核心态

    文章目录 什么是OS? 用户态和核心态 为什么划分用户态和核心态? 为什么要限制进程的访问能力? 核心态和用户态的区别 用户态如何切换至内核态 系统调用 系统调用带来的好处 系统调用的分类 中断 中断 ...

最新文章

  1. 官宣!《新程序员·开发者黄金十年》正式发布
  2. 阿里云实现putty私钥登录全过程
  3. C++ 包含目录、库目录、附加依赖项总结
  4. 计算机系统怎么算页面大小,电脑网页的设计尺寸是多少
  5. 在java中jvm目录_JVM具体在哪个文件夹下的
  6. php计算购置税1007无标题,新旧个税计算公式对比–ps:世界上最好的语言PHP
  7. java 监听端口_java游戏服务器检查报告(经验分享)
  8. 学土木结构考计算机等级考试,请教各位,我是学土木的,考计算机二级的哪个比较好?...
  9. Cmake构建_指定gcc/g++版本
  10. Epub,Mobi,Azw3电子书格式的区别,windows上有什么好用的epub阅读器
  11. 2010考研数学二第(13)题——导数应用题
  12. Redisson的看门狗机制
  13. 如何开启QQ在线客服
  14. w i ndows,解释计算 机Windows的学习英语(10页)-原创力文档
  15. Scrapy豆瓣爬虫 爬取用户以及用户关注关系
  16. Domino NotesV11开放下载啦!
  17. 龙芯Fedora21平台制作feodra21-tools docker镜像
  18. DOS重装win7系统
  19. 数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum分页,视图,序列,索引
  20. 小忽视大问题:4.8通过 Apple 登录

热门文章

  1. Fresco 二三事:图片处理之旋转、缩放、裁剪切割图片
  2. SQL 强制指定索引加快查询速度
  3. [计算机网络]httpserver--如何解析HTTP请求报文
  4. .Net 自己写个简单的 半 ORM (练手)
  5. FFmpeg 2.1 试用(新版支持HEVC,VP9)
  6. 这几天惨遭Delphi类型转换折磨,请问怎么把double转成int类型
  7. Flutter、ReactNative、uniapp对比
  8. [转载] Java是不是面向对象的程序
  9. [转载] public static void main(String[] args) 隐含了什么?
  10. 编程 mcq_MCQ | 8255 PPI(可编程外围接口)