美文网首页
为什么运行时程序要分成内核态和用户态

为什么运行时程序要分成内核态和用户态

作者: 鸡哥cy | 来源:发表于2018-08-25 16:53 被阅读0次

        当我们在写程序是,凡是涉及到IO读写、内存分配等硬件资源的操作时,往往不能直接操作,而是通过一种叫系统调用的过程,让程序陷入到内核态运行,然后内核态的CPU执行有关硬件资源操作指令,得到相关的硬件资源后在返回到用户态继续执行,之间还要进行一系列的数据传输。如此麻烦,让用户程序直接访问硬件资源不是更好吗?

        假设没有这种内核态和用户态之分,程序随随便便就能访问硬件资源,比如说分配内存,程序能随意的读写所有的内存空间,如果程序员一不小心将不适当的内容写到了不该写的地方,就很可能导致系统崩溃。用户程序是不可信的,不管程序员是有意的还是无意的,都很容易将系统干到崩溃。

        正因为如此,Intel就发明了ring0-ring3这些访问控制级别来保护硬件资源,ring0的就是我们所说的内核级别,要想使用硬件资源就必须获取相应的权限(设置PSW寄存器,这个操作只能由操作系统设置)。操作系统对内核级别的指令进行封装,统一管理硬件资源,然后向用户程序提供系统服务,用户程序进行系统调用后,操作系统执行一系列的检查验证,确保这次调用是安全的,再进行相应的资源访问操作。内核态能有效保护硬件资源的安全。

        另外,用户程序是通过内部中断来进行系统调用的,触发内部中断的指令是 INT N ,触发中断后CPU根据中断号到中断向量表中查找中断服务程序入口,中断服务程序的处理过程一般是,设置PSW状态字(设置了之后才能执行一切指令),保存用户态上下文,调用过程执行,执行完成恢复用户程序上下文。

相关文章

  • 为什么运行时程序要分成内核态和用户态

    当我们在写程序是,凡是涉及到IO读写、内存分配等硬件资源的操作时,往往不能直接操作,而是通过一种叫系统调用的过程,...

  • 内核态和用户态

    内核态和用户态是操作系统的两种运行级别,内核态权限高,用户态权限低。 用户程序从用户态切换到内核态:系统调用(软中...

  • 深入理解goroutine调度 2023-01-03

    内核态vs用户态 操作系统运行时使用的ram存储资源叫内核态用户(上层软件)运行时使用的ram存储资源叫用户态 对...

  • 【笔记】Linux内核简介

    用户态与内核态 用户态下,程序不能访问内核地址空间(数据和代码),内核态下则没有此限制。 激活内核例程的方法: 系...

  • 内核态与用户态

    含义: 当程序运行在内核空间时为内核态,当程序运行在用户空间时为用户态。用户态只能访问用户空间下的地址,而内核态可...

  • 内核态和用户态、

    内核态和用户态的区别 内核态切换用户态耗时的原因

  • 进程、内核模式

    CPU 即可在用户态下运行,也可以在内核态下运行。当一个程序在内核态下运行时,这些限制不再有效,每个CPU模型都为...

  • 从Kafka到NIO

    [TOC]在谈NIO之前,简单回顾下内核态和用户态 内核空间是Linux内核运行的空间,而用户空间是用户程序的运行...

  • 从Kafka到NIO

    在谈NIO之前,简单回顾下内核态和用户态 内核空间是Linux内核运行的空间,而用户空间是用户程序的运行空间,为了...

  • 内核线程之User-Mode Helpers

    这次学习下如何在Linux内核态执行用户态程序,这就要用到User-Mode Helpers,为什么要这么“逆操作...

网友评论

      本文标题:为什么运行时程序要分成内核态和用户态

      本文链接:https://www.haomeiwen.com/subject/iugjuttx.html