操作系统(OS)与控制单元(CU)交互原理及按键响应流程咨询
问题1:OS运行资源与载体相关疑问
- 控制单元(CU)不会一直只处理OS的指令:OS基于时间分片机制调度CPU资源,简单来说就是CU会把自己的执行时间切成几毫秒到几十毫秒的极小片段,以纳秒级的速度在OS指令、各个用户程序的指令之间来回切换执行,因为切换速度远快于人能感知的阈值,所以你会感觉多个程序在同时运行,完全不会出现OS占满所有CU资源的情况。
- OS的实际运行载体是CPU:你对RAM的认知是正确的,RAM属于易失性存储单元,只负责暂存OS、各类程序的运行数据和待执行指令本身,本身没有执行运算的能力,所有指令的实际执行都在CPU的运算单元、控制单元中完成。OS的核心代码平时存储在硬盘等非易失性存储中,开机时会被加载到RAM中暂存,CPU按需从RAM里读取OS的指令来执行。
问题2:你设想的按键流程中OS的作用
你设想的流程缺少了OS的核心调度和权限管控角色,OS在这个流程中的核心作用包括:
- 接收控制单元上报的硬件按键事件,判断当前处于前台激活状态的程序(比如你提到的记事本)
- 将按键数据转发给对应的前台程序,而非直接把硬件事件交给GPU
- 管控GPU等外设的访问权限,不会允许任意硬件直接向GPU发送指令,所有要输出到显示器的内容都要先经过OS的权限校验和资源分配,才能提交给GPU处理。
问题3:按下键盘按键的完整流转路径
按下“A”键后完整的指令流转步骤如下:
- 键盘硬件检测到按键按下的动作,产生对应电信号,通过总线向CPU的控制单元发送中断信号
- 控制单元收到中断信号后,暂停当前正在执行的用户程序,切换到特权态调用OS预设的中断处理程序
- OS的中断处理程序从键盘控制器的寄存器中读取按键编码,确认是“A”键按下的事件
- OS查询当前前台激活窗口对应的所属程序(比如记事本),把按键事件封装成系统消息,放到该程序专属的消息队列中
- 控制单元切回用户态,恢复之前暂停的用户程序执行,记事本程序运行时会从自己的消息队列中读到这个按键事件,处理得到要显示的“A”字符对应的渲染参数
- 记事本程序调用OS提供的图形系统接口提交渲染请求,OS校验请求合法后,给GPU分配对应的显存资源和执行优先级
- GPU收到OS下发的渲染指令后,完成字符的渲染计算,把结果写入显存的对应显示区域,最终输出到显示器上,你就能看到记事本里出现“A”字符了
内容的提问来源于stack exchange,提问作者Potato
相关产品推荐
相关产品推荐

