用户态和内核态

内核态和用户态

我们开发的服务代码,都是基于操作系统抽象提供的功能接口,进而操作相应的硬件资源。而硬件资源对于安全性要求非常高,所以对于安全性和系统稳定性而言,需要划定不同的应用程序运行级别。

Intel对于CPU的权限划分了四个等级0 ~ 3,linux采用了其中的0和2这两个等级。运行在0级别的程序时操作系统的内核程序,运行在2级别的程序是用户程序。我们平时写的程序都是用户程序。

以32位操作系统而言,他可以映射的内存大小为4G,操作系统启动时,会占用前1G的内存作为内核态的内存,在做CPU、硬盘的读写时,不能给用户态的应用程序直接操作的权限,在正常的用户态操作时,不需要切换。

我们实际运行的代码(java、go写成的web服务、纯后端服务),依托于jvm,实际都运行在操作系统之上,整个调用链为:java服务(编译后是二进制文件) -> (jvm)-> (linux操作系统)-> (硬件接口)。

面试题:讲解一下内核态和用户态

总体概述:

操作系统为了保护安全硬件资源而定义的两种运行级别,两种级别拥有的权限不同。
不同程序需要有划分行的访问能力,防止他们可以获取别的程序的内存数据,调用网络接口,执行CPU指令导致系统崩溃。
我们的运行一个程序时,大部门时间都是运行在用户态下的,在需要操作系统帮忙某些没有权利完成的工作(c语言的malloc()、net.read())时就需要切换到内核态。

用户态和内核态

两种状态的转换

  • 系统调用:用户进程主动要求切换到内核态的一种方式,用户进程通过systmem call申请操作系统提供的服务程序完成工作
  • 异常:当CPU仔执行运行的用户态的程序时,发生了一些不可知的异常,切换到对应处理异常的内核程序
  • 外围设备中断:
    • 硬盘读写操作完成,系统会切换到硬盘读写的中断处理陈谷种执行后续操作。

总结

级别 运行地址 级别 执行内容
用户态 较低的 3G 字节(从虚拟地址 0x00000000 到 0xBFFFFFFF),供各个进程使用,称为用户空间 3级 可以执行的操作和可以访问的资源都会受到很多限制
内核态 最高的 1G 字节(从虚拟地址 0xC0000000 到 0xFFFFFFFF),供内核使用,称为内核空间 0级 运行在内核态的进程可以执行任何操作并且在资源的使用上没有限制

链接

  • https://www.bilibili.com/read/cv14492908
  • https://strikefreedom.top/archives/linux-io-and-zero-copy
© 版权声明
好牛新坐标
版权声明:
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com

相关文章