从用户态到内核态的切换

本文详细介绍了Linux操作系统中用户态和内核态的概念,以及两者之间的切换过程,主要通过系统调用来实现。系统调用是用户态程序请求内核服务的途径,而从用户态到内核态的切换涉及到CPU权限级别的改变,确保了对硬件资源的保护。同时,文章还提到了异常处理中的缺页异常,以及中断在处理意外情况中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从用户态到内核态的切换

理解用户态和内核态

在这里插入图片描述

  • 如上图所示, Linux操作系统的体系架构分为用户态和内核态, 内核从本质上来看也是一种软件资源, 用来控制计算机的硬件资源, 并为上层的应用程序提供运行环境,.
  • 用户态即是上层应用程序的活动空间, 应用程序的执行必须依靠于内核提供的资源, 包括CPU, 存储器, I/O资源, 为了让上层应用访问到这些资源, 内核必须为上层应用提供访问的接口: 系统调用
  • 系统调用是操作系统的最小功能单位, 这些系统调用根据不同的场景进行扩展和裁剪, 可以将系统调用看做一个汉字的’笔画’, 而一个"汉字"则可以看作是一个上层应用. 要实现一个完整的汉字(一个上层应用), 就需要很多的系统调用(笔画)
  • 为什么要有用户态和内核态?
    • 由于需要限制不同的程序之间的访问能力, 防止获取别的程序的内存数据或者获取外围设备的数据, CPU划分出两个权限等级----用户态和内核态
用户态和内核态的切换

系统调用

  • 所有的应用程序都是运行在用户态的, 但是有时候程序确实需要做一些内核态的事情, 例如从硬盘读取数据, 从键盘获取输入等, 唯一可以做这些的事情就是操作系统, 所以程序就需要先请求以操作系统的名义来执行---------这时就有这样一个机制: 用户态程序切换到内核态, 但是不能控制在内核态中执行指令------这就是系统调用(CPU中的实现称为陷阱指令).工作流程如下:
    • 用户态程序将一些数据值放在寄存器中, 或者使用参数创建一个堆栈, 以此表明需要操作系统提供服务
    • 用户态程序执行陷阱指令
    • CPU切换到
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值