0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux的用户态与内核态区分

汽车玩家 来源:未知 作者:李威 2020-04-12 19:39 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

我们先来看一张 Linux 整体架构图。

Linux的用户态与内核态区分

系统调用

系统调用时操作系统的最小功能单位。根据不同的应用场景,不同的 Linux 发行版本提供的系统调用数量也不尽相同,大致在240-350之间。这些系统调用组成了用户态跟内核态交互的基本接口,例如:用户态想要申请一块20K大小的动态内存,就需要brk系统调用,将数据段指针向下偏移,如果用户态多处申请20K动态内存,同时又释放呢?这个内存的管理就变得非常的复杂。

库函数

库函数就是屏蔽这些复杂的底层实现细节,减轻程序员的负担,从而更加关注上层的逻辑实现。它对系统调用进行封装,提供简单的基本接口给用户,这样增强了程序的灵活性,当然对于简单的接口,也可以直接使用系统调用访问资源,例如: open() , write() , read() 等等。库函数根据不同的标准也有不同的版本,例如: glibc 库, posix 库等。

Shell

Shell 顾名思义,就是外壳的意思。就好像把内核包裹起来的外壳。它是一种特殊的应用程序,俗称命令行。为了方便用户和系统交互,一般一个 Shell 对应一个终端,呈现给用户交互窗口。当然 Shell 也是编程的,它有标准的 shell 语法,符合其语法的文本叫 Shell 脚本。很多人都会用 Shell 脚本实现一些常用的功能,可以提高工作效率。

为什么要区分用户态与内核态?

CPU 的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃。比如:清内存、设置时钟等。如果所有的程序都能使用这些指令,那么你的系统一天死机N回就不足为奇了。所以, CPU 将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。 Intel 的 CPU 将特权级别分为4个级别: RING0 、 RING1 、 RING2 、 RING3 。

当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。

当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。

当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。

当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程的内核态。 Linux 使用了 Ring3 级别运行用户态, Ring0 作为 内核态,没有使用 Ring1 和 Ring2 。 Ring3 状态不能访问 Ring0 的地址空间,包括代码和数据。 Linux 进程的 4GB 地址空间,3G-4G部分大家是共享的,是内核态的地址空间,这里存放在整个内核的代码和所有的内核模块,以及内核所维护的数据。用户运行一个程序,该程序所创建的进程开始是运 行在用户态的,如果要执行文件操作,网络数据发送等操作,必须通过 write , send 等系统调用,这些系统调用会调用内核中的代码来完成操作,这时,必 须切换到 Ring0 ,然后进入 3GB-4GB 中的内核地址空间去执行这些代码完成操作,完成后,切换回 Ring3 ,回到用户态。

这样,用户态的程序就不能 随意操作内核地址空间,具有一定的安全保护作用。

处理器总处于以下状态中的一种:

1、内核态,运行于进程上下文,内核代表进程运行于内核空间;

2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;

3、用户态,运行于用户空间。

用户态到内核态怎样切换?

从用户态到内核态切换可以通过三种方式:

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

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

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11627

    浏览量

    217895
  • 内存
    +关注

    关注

    9

    文章

    3173

    浏览量

    76099
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    探索操作系统底层的关键接口

      在linux中,将程序的运行空间分为内核空间与用户空间(内核用户
    的头像 发表于 11-08 12:42 578次阅读

    深入了解系统调用API:探索操作系统底层的关键接口

    一、前言 为什么用户程序不能直接访问系统内核模式提供的服务? 在linux中,将程序的运行空间分为内核空间与用户空间(
    的头像 发表于 11-03 09:20 425次阅读

    使用qemu-vexpress-a9 运行用户程序跑不了怎么解决?

    qemu-vexpress-a9 的 sd.bin 镜像文件中。 然后成功编译rt-threadbspqemu-vexpress-a9的内核.elf文件 使用./qemu-nographic.sh 模拟用户
    发表于 10-09 07:41

    求助,关于rt-smart用户线程实时性差的问题求解

    我在树莓派4B上使用v5.2.0 开启smart的rt-thread 并启用SMP多核(4核)内核时,在用户内核运行同样的代码测试:
    发表于 09-26 08:25

    昆仑通物联网触摸屏配置教程

    昆仑通物联网触摸屏配置教程
    发表于 06-09 14:59 0次下载

    鸿蒙5开发宝藏案例分享---折叠屏悬停开发实践

    ?【鸿蒙折叠屏开发宝藏指南】原来官方藏了这么多好东西!手把手教你玩转悬停开发**?** Hey小伙伴们!我是你们的老朋友XX,最近在肝鸿蒙折叠屏项目时,意外挖到了官方文档里的隐藏宝藏!原来
    发表于 06-03 12:04

    关于晶振的三

    晶振的高阻在电路起什么作用,为什么有的晶振需要三脚有的不需要,晶振的三是靠什么去控制的?
    发表于 05-15 11:08

    TiPro9000固态硬盘的功耗及电压测试

    TiPro9000固态硬盘,作为致品牌精心雕琢的首款PCIe 5.0旗舰级存储力作,在技术与性能的疆场上实现了令人瞩目的重大跨越。它以前瞻性的战略眼光,率先运用了基于长江存储新一代晶栈
    的头像 发表于 03-04 11:41 1861次阅读
    致<b class='flag-5'>态</b>TiPro9000固态硬盘的功耗及电压测试

    TiPro9000固态硬盘评测

    TiPro9000固态硬盘作为致品牌旗下的首款PCIe 5.0旗舰级存储力作,在技术与性能层面均实现了重大突破。它率先采用基于长江存储新一代晶栈Xtacking4.0架构的闪存颗粒,搭配先进的DRAM缓存以及智能SLC缓存机制,构建出强大的存储性能体系。
    的头像 发表于 02-19 11:47 3589次阅读
    致<b class='flag-5'>态</b>TiPro9000固态硬盘评测

    衍射级次偏振的研究

    分析提供了通用和方便的工具。为此,复杂的一维或二维周期结构可以使用界面和调制介质进行配置,这允许任何类型的光栅形貌进行自由的配置。在此用例中,详细讨论了衍射级次的偏振的研究。 任务说明 简要介绍
    发表于 01-11 08:55

    请问lsf0108能用在三总线上吗?

    芯片输出高阻相当于LSF0108输入端断路,或者说是悬空状态,我觉得LSF0108的状态不会是高阻
    发表于 01-10 06:49

    量子隐形传通过普通光缆成功传输

    据外媒报道,美国西北大学的研究人员把量子隐形传通过普通光缆成功传输,研究人员通过普通光缆成功将量子隐形传输了30公里。这表明量子隐形传与普通的经典通信信号可在同一根光缆中共存;为量子通信与现有
    的头像 发表于 12-26 15:18 981次阅读

    衍射级次偏振的研究

    分析提供了通用和方便的工具。为此,复杂的一维或二维周期结构可以使用界面和调制介质进行配置,这允许任何类型的光栅形貌进行自由的配置。在此用例中,详细讨论了衍射级次的偏振的研究。 任务说明 简要介绍
    发表于 12-25 15:39

    衍射级次偏振的研究

    分析提供了通用和方便的工具。为此,复杂的一维或二维周期结构可以使用界面和调制介质进行配置,这允许任何类型的光栅形貌进行自由的配置。在此用例中,详细讨论了衍射级次的偏振的研究。 任务说明 简要介绍
    发表于 12-18 13:45

    飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之内核简介

    用户提供移植好的板级开发包。板卡厂商也会对移植好的内核版本进行维护,例如一些BUG修复或者物料替换。接下来讲一下获取这三种源码的方法:获取linux官网源码地址:https
    发表于 12-13 09:03