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

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • linux用户态和内核态的转换 当一个进程执行系统调用而执行内核代码时,称进程处于内核 内核态,此时处理器处于特权...
    狗尾巴草败了阅读 1,343评论 0 3
  • 操作系统概论 操作系统的概念 操作系统是指控制和管理计算机的软硬件资源,并合理的组织调度计算机的工作和资源的分配,...
    野狗子嗷嗷嗷阅读 12,516评论 3 34
  • 系统调用接口的主要任务是把进程从用户态切换到内核态。在具有保护机制的计算机系 统中,用户必须通过软件中断或陷阱,才...
    XDgbh阅读 4,029评论 0 1
  • 牵不住时间的线 逃走的风筝再也没有出现 在蓝色的大海中间 有蓝色的天空的泪 记忆的斑斓一直都在变 汹涌的海潮还是那...
    绿酒旋风阅读 252评论 2 5
  • 叫了一声“妈妈” 用童年的声音,用完全依赖的感情 小时候的“妈妈”总是软黏 只属于我的称呼,也是一种骄傲 那时候敬...
    长河失语阅读 298评论 3 3

友情链接更多精彩内容