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

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

3天内不再提示

浅析从寄存器到用户态与内核态

jf_78858299 来源: Hoeller 作者: Hoeller 2023-01-30 15:28 次阅读

寄存器CPU内部重要的组成部分,寄存器内部由N个触发器组成,每个触发器可以保存1位二进制数,所以16位寄存器可以保存16个bit。

CPU内部一般有不同类型的多个寄存器,我们需要使用CPU对应的机器指令来操作这些寄存器,当然像内存、磁盘这些也是通过机器指令来操作的。

而CPU为了安全性,比如x86的CPU将机器指令分为了一般指令和特权指令,比如操作磁盘的指令就是特权指令,只有CPU处于某种特殊状态下才能执行特权指令。

x86 CPU利用内部一个特殊寄存器,用来标记此时的CPU能不能执行特权指令,这个特殊寄存器中可以存四种状态,ring0、ring1、ring2、ring3。

Windows、Linux操作系统中只用了ring0和ring3两种状态,如果处于ring0,表示CPU可以执行所有指令,包括特权指令,如果处于ring3,表示CPU不能执行特权指令,ring0等级高,ring3等级低。

不管是操作系统还是运行在操作系统之上的软件,都是用高级语言开发出来的,最终都需要翻译为机器指令。

所以本质上来说,我们自己用c或java开发的软件,只要翻译成了机器指令,也是可以直接操作寄存器的,操作磁盘的。

但是我们不会这么来做,也肯定不需要每个软件自己去实现这么底层并通用的功能,所以我们通常会调用操作系统的函数来操作磁盘。

操作系统就相当于一个中间层。

同时操作系统为了保护系统,就设计了内核态和用户态。

当我们电脑启动时,CPU处于ring0状态,这时所有指令都可以执行,从而启动引导程序,从而启动操作系统,操作系统在启动时,会对内存就行划分,划出一部分内存只能被操作系统自己使用,其他内存可以给应用软件使用。

操作系统启动完了之后,CPU状态就改为ring3,开始运行应用软件。

由于此时cpu处于ring3,所以应用软件想要运行一些特殊指令肯定是不行的。

当我们调用操作系统的提供的函数时,操作系统会来执行特权指令,可是操作系统不也是c语言写的代码吗,要执行特权指令需要ring0,如何把ring3切换成ring0呢?

系统中断,其实就是一条指令,比如int 0x80。

系统中断,cpu会自动切回到ring0状态,然后执行操作系统在系统启动时所设置好的代码,而这段代码可以根据中断之前所执行的代码来继续执行后续逻辑,并且此时cpu已经处于在ring0状态了,可以正常执行了。

而CPU处于ring0状态就是我们说的内核态,处于ring3状态就是我们说的用户态。

总结,当我们自己写的程序要操作磁盘时,因为要执行特权指令,但是CPU处于ring3,无法直接执行特殊指令,需要调用操作系统函数,从而会修改CPU处于ring0,从而进去内核态。

用户态时,CPU只能执行一些普通指令,内核态时,CPU能执行所有指令。

今天就聊到这,抛砖引玉,如果有不对的地方,欢迎大佬们指出。

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

    关注

    31

    文章

    5336

    浏览量

    120230
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10854

    浏览量

    211583
  • Linux
    +关注

    关注

    87

    文章

    11292

    浏览量

    209329
  • WINDOWS
    +关注

    关注

    3

    文章

    3541

    浏览量

    88624
  • 触发器
    +关注

    关注

    14

    文章

    2000

    浏览量

    61132
收藏 人收藏

    评论

    相关推荐

    为什么gv7601在spi用户访问寄存器时,读取音频寄存器读不到信息,是要设置什么吗?

    为什么gv7601在spi用户访问寄存器时。读取视频寄存器正常。读取音频寄存器读不到信息。是要设置什么吗?
    发表于 11-04 08:21

    操作系统为什么分内核用户?这两者如何切换?

    操作系统为什么分内核用户,这两者如何切换?进程在地址空间会划分为哪些区域?堆和栈有什么区别?
    发表于 07-23 09:01

    请问CPU与寄存器内核用户及如何切换?

    计算机硬件系统由哪几部分构成?编程语言的作用及与操作系统和硬件的关系是什么?请问CPU与寄存器内核用户及如何切换?
    发表于 10-25 06:31

    74HC595D_38位移位寄存器

    74HC595是一颗高速CMOS 8位3移位寄存器/输出锁存芯片,采用CMOS硅栅工艺。该器件包含一个8位串行输入与并行输出移位寄存器并提供一个8位D型存储
    发表于 07-12 11:54 14次下载

    Linux内核用户是如何睡眠的

    clock_nanosleep系统调用来进行睡眠(也就是说用户任务睡眠需要调用系统调用陷入内核)。 下面我们来研究下clock_nanosleep的实现(这里集中睡眠的实现,先忽略
    的头像 发表于 08-16 15:06 1913次阅读

    8位通用移位寄存器;三-74HC299

    8位通用移位寄存器;三-74HC299
    发表于 02-16 20:28 1次下载
    8位通用移位<b class='flag-5'>寄存器</b>;三<b class='flag-5'>态</b>-74HC299

    20 位寄存器驱动,带反向寄存器使能;三-74ALVC16836A

    20 位寄存器驱动,带反向寄存器使能;三-74ALVC16836A
    发表于 02-21 18:51 0次下载
    20 位<b class='flag-5'>寄存器</b>驱动<b class='flag-5'>器</b>,带反向<b class='flag-5'>寄存器</b>使能;三<b class='flag-5'>态</b>-74ALVC16836A

    16位总线收发/寄存器;三-74ALVCH16646

    16位总线收发/寄存器;三-74ALVCH16646
    发表于 02-21 18:52 0次下载
    16位总线收发<b class='flag-5'>器</b>/<b class='flag-5'>寄存器</b>;三<b class='flag-5'>态</b>-74ALVCH16646

    18 位寄存器驱动,带反向寄存器使能;三-74ALVC16834A

    18 位寄存器驱动,带反向寄存器使能;三-74ALVC16834A
    发表于 02-23 19:07 0次下载
    18 位<b class='flag-5'>寄存器</b>驱动<b class='flag-5'>器</b>,带反向<b class='flag-5'>寄存器</b>使能;三<b class='flag-5'>态</b>-74ALVC16834A

    具有三输出寄存器的 SNx4HC595 8位移位寄存器数据表

    电子发烧友网站提供《具有三输出寄存器的 SNx4HC595 8位移位寄存器数据表.pdf》资料免费下载
    发表于 04-30 10:22 1次下载
    具有三<b class='flag-5'>态</b>输出<b class='flag-5'>寄存器</b>的 SNx4HC595 8位移位<b class='flag-5'>寄存器</b>数据表

    具有三输出寄存器的汽车类 8位移位寄存器SN74AHC165-Q1数据表

    电子发烧友网站提供《具有三输出寄存器的汽车类 8位移位寄存器SN74AHC165-Q1数据表.pdf》资料免费下载
    发表于 05-06 11:20 0次下载
    具有三<b class='flag-5'>态</b>输出<b class='flag-5'>寄存器</b>的汽车类 8位移位<b class='flag-5'>寄存器</b>SN74AHC165-Q1数据表

    八路总线收发/寄存器3 数据表

    电子发烧友网站提供《八路总线收发/寄存器3 数据表.pdf》资料免费下载
    发表于 05-13 10:28 0次下载
    八路总线收发<b class='flag-5'>器</b>/<b class='flag-5'>寄存器</b>3<b class='flag-5'>态</b> 数据表

    带3输出寄存器的8位移位寄存器SNx4AHCT595数据表

    电子发烧友网站提供《带3输出寄存器的8位移位寄存器SNx4AHCT595数据表.pdf》资料免费下载
    发表于 05-20 11:18 0次下载
    带3<b class='flag-5'>态</b>输出<b class='flag-5'>寄存器</b>的8位移位<b class='flag-5'>寄存器</b>SNx4AHCT595数据表

    带3输出的16位收发寄存器数据表

    电子发烧友网站提供《带3输出的16位收发寄存器数据表.pdf》资料免费下载
    发表于 05-22 11:14 0次下载
    带3<b class='flag-5'>态</b>输出的16位收发<b class='flag-5'>器</b>和<b class='flag-5'>寄存器</b>数据表

    带3输出的16位总线收发寄存器数据表

    电子发烧友网站提供《带3输出的16位总线收发寄存器数据表.pdf》资料免费下载
    发表于 05-24 09:09 0次下载
    带3<b class='flag-5'>态</b>输出的16位总线收发<b class='flag-5'>器</b>和<b class='flag-5'>寄存器</b>数据表