首页 > 其他分享 >【os】操作系统是怎样一步步接收键盘按键的?

【os】操作系统是怎样一步步接收键盘按键的?

时间:2024-11-14 22:18:21浏览次数:1  
标签:server 键盘 按下 内核 按键 os CPU

你有没有想过,按下键盘按键后,相应的字符是怎么一步步显示在屏幕上的?
首先来看硬件部分,你至少应该能想到必须得有键盘和CPU:

之后呢,cpu是怎么知道有键盘按下呢?
为了让键盘按下按键后能通知到CPU,需要借助键盘控制器,keyboard controller,这当然也是硬件:

当按下按键时,键盘控制器能检测到键盘按键:

接着键盘控制器向CPU发出中断:

当CPU接收到中断信号后暂停当然正在执行的代码,在此之前也许CPU正在执行应用程序的代码,表现出来的就是你的程序就在运行:

当然也有可能CPU正在执行操作系统代码,但不管怎样,CPU接收到中断信号后将暂停执行当前的指令然后跳转到一个提前配置好的地址,这个地址指向的就是内核中的处理函数,假设这个函数叫做do_irq()。

中断处理函数do_irq发现中断来自键盘,因此开始调用能处理键盘按键的内核代码,这段内核代码就是所谓的驱动,driver。

驱动程序处理键盘按键后发现按下的是字母a,然后呢?
在类Unix系统中,驱动程序会把字母a写到device file中,也就是设备文件,你可以像访问普通文件那样直接访问设备文件,但它并不是真正的文件。

现在,键盘按键已经从硬件世界来到的了软件世界,也就是内核中。
还是以Unix系统为例,在Unix中负责窗体管理的叫做X Window System,该系统由X server以及X client组成,图形应用程序就是x client,接收来自x server的键盘消息,那么x server又是从哪里知道键盘消息呢?答案就是刚才提到的设备文件:

接下来X server会把键盘按键消息发送给正在获取焦点的窗体,怎么发送呢?利用的就是进程间通信技术,IPC:

这样,我们的程序就可以获得键盘按键了。

原创 码农的荒岛求生

标签:server,键盘,按下,内核,按键,os,CPU
From: https://www.cnblogs.com/o-O-oO/p/18546970

相关文章

  • postgresql逆向工程
    packagestanfordcorenlp.wang.biao.diy;importcom.baomidou.mybatisplus.annotation.FieldFill;importcom.baomidou.mybatisplus.generator.FastAutoGenerator;importcom.baomidou.mybatisplus.generator.config.DataSourceConfig;importcom.baomidou.mybatisplus.g......
  • Universal_Robots_ROS2_Driver实现UR机械臂仿真控制(2)
    目录一、最终效果展示二、整体架构三、模块说明四、模块接口说明一、最终效果展示效果展示实现UR机械臂指定位姿控制结果分析move.cpp:期望位姿;rviz2:检测到的位姿;ur_sim:机械臂的实际位姿位姿:位置(position)和姿态(orientation)通过观察可以发现,经过轨迹规......
  • 老人新兵 —— 一款iOS app的开发手记
    老人新兵——一款iOSapp的开发手记东坡肘子​ ​关注他 47人赞同了该文章本文写于2020年初,文中提到技术问题随着SwiftUI的发展以及认知的提高,大多有了更好的解决方案,请无视技术细节。原文发表在我的博客 肘子的Swift记事本 。由于技术文......
  • HarmonyOS ArkUI(基于ArkTS) 开发布局 (上)
    一 ArkUI(基于ArkTS)概述基于ArkTS的声明式开发范式的方舟开发框架是一套开发极简、高性能、支持跨设备的UI开发框架,提供了构建应用UI所必需的能力点击详情特点开发效率高,开发体验好代码简洁:通过接近自然语义的方式描述UI,不必关心框架如何实现UI绘制和渲染。数据驱动U......
  • Dosbox-x安装WinXP——图文教程
    一、前言很多老游戏只能在win95、98或者XP中运行,因此,很多人尝试将Win95、98安装到Dosbox中,利用Dosbox来玩那些久远的情怀。有Win98自然就有人想在Dosbox中安装更高级的Win系统,于是就有人尝试在Dosnox中安装Win2000、WinXP的,其中2023-07-03在国外的fabulous.systems出现了一篇利用......
  • Windows每次开机键盘无法使用,需要重新拔插键盘USB接口的终极解决方案(filco键盘)
    我试了如下方法:1.电源选项中的USB选择性暂停:打开控制面板——电源选项——更改计划设置——更改高级电源设置——USB设置——将USB选择性暂停改为“已禁用”。2.关闭USB的省电策略:右键我的电脑——属性——设备管理器——通用串行总线控制器——右键USBHub——属性——电源管理......
  • centOS7 docker 安装步骤
    一、安装前检查工作:1.检查/etc/yum.repos.d/CentOS-Base.repo文件是否存在,如果不存在,从网络仓库中复制一份新的CentOS-Base.repo文件。sudocurl-o/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repo或者使用wget:sudowget-O/etc/yum.r......
  • docker-compose安装pgsql和pgvector
    快速安装PostgreSQL和pgvector1、创建Dockerfile文件,代码如下:#使用PostgreSQL16基础镜像FROMpostgres:16#安装pgvectorRUNapt-getupdate&&\apt-getinstall-ypostgresql-16-pgvector&&\rm-rf/var/lib/apt/lists/*#设置启动命令CMD["postgr......
  • 【TencentOS Server】腾讯云服务器上安装 Nginx 的详细步骤
    使用hostnamectl命令查询服务器信息1.安装EPEL仓库EPEL(ExtraPackagesforEnterpriseLinux)是一个为RHEL和CentOS提供额外软件包的仓库,TencentOSServer作为一个RHEL类的发行版,也可以使用这个仓库。首先安装EPEL仓库:sudoyuminstallepel-release-y2.......
  • 【小样本分割】VAT:Cost Aggregation Is All You Need for Few-Shot Segmentation
    论文:CostAggregationIsAllYouNeedforFew-ShotSegmentation代码:https://github.com/Seokju-Cho/Volumetric-Aggregation-Transformer目录简介SwinTransformer VAT​编辑VolumeEmbeddingModuleVolumetricTransformerModule Affinity-AwareTransformerDeco......