Linux信号中断

进程怎么知道键盘输入数据?

按照以前的说法,键盘是硬件,操作系统就要管理这个键盘,然后定期去检查键盘是否有输入数据,有的话就把数据搬到内存里,然后放到键盘所对应的缓冲区里,struct file结构体指向缓冲区,唤醒进程,进程通过文件描述符就能把数据拿到用户空间。但是在计算机里键盘只是其中一种,如果是定期去检查硬件那么操作系统会很忙。

所以,外设在硬件上直接和CPU对应的针脚进行间接的连接,当外部设备有数据传输,就会向CPU发送硬件中断的东西。外设与CPU之间有个叫中断控制器的东西,当外设向中断控制器发送高电平时,中断控制器可以识别出信号来自哪个针脚,就在内部的寄存器里记录该针脚对应的中断号。比如0号针脚被点亮,就把0写入寄存器里。再由中断控制器往CPU的特定针脚发送高电平,这样CPU就知道哪个外设准备好了,CPU就访问中断控制器,就从里面的寄存器中读取对应的中断号。

接下来操作系统提供一个叫中断向量表IDT的东西,类似一个函数指针数组,里面指向一堆方法,数组的下标就是中断号。CPU拿到中断号后,就会执行操作系统的代码,拿着中断号去查表,看看是调用哪个方法。

所以以后外设准备好了就会向CPU发中断,CPU就会自动执行对应的方法。

类比一下信号机制:发中断相当于发信号,保存中断相当于保存信号,中断号相当于信号编号,处理中断相当于处理信号。总而言之,信号是用软件来模拟硬件的信号中断的。

但是当没有中断来的时候,操作系统是暂停的,如果一直没有外部设备响应的话,操作系统就会一直暂停,于是在向量中断表当中注册一个进程调度的方法schedule,在硬件上引入时钟源,它会以特定频率向CPU发送特定的中断。假如每隔1ns发送一次中断,,CPU就会每隔1ns去调用schedule。从此以后,操作系统就在硬件时钟中断的驱动下进行调度了。操作系统就是基于中断进行工作的软件。后来人们觉得把时钟源放在外部和其他外设竞争中断还有传递给CPU效率太低,于是就把时钟源集成在了CPU内部,外设没有中断时,CPU自己就向自己触发中断,调用schedule方法。操作系统就是一个死循环。

CPU在自己的指令集当中引入新的汇编指令syscall,用它来触发让CPU主动进入中断,也就是说如果在代码里写这个接口,CPU就会自动进行一次中断。

进行系统调用,有一个系统调用表,函数指针数组,每一个系统调用都有一个唯一的下标,这个下标就叫做系统调用号,这是在内核当中。在中断表里注册一个方法callsystem,1.它想办法获取系统调用号。2.调用系统调用的方法。

用户层面:系统调用接口底层用汇编语言写,比如move eax X,编号为X移动到寄存器中,然后int 0x80,这个0x80是callsystem在中断表里的地址。然后callsystem里就有mov n eax,当用户层调用系统调用接口时就会被callsystem获取,然后调用sys_call_table[n]调用底层的方法。

操作系统不提供任何系统调用接口,只提供系统调用号。我们用的接口都是glibc封装的。

用户态和内核态:在虚拟地址当中,用户区0-3GB,内核区3-4GB,操作系统也是软件,也在物理内存里。

内核页表和用户页表:都是用来对虚拟地址到物理地址的映射。一个进程一个用户页表,内核页表只有一份。内核页表是所有进程公共的,所以不管进程如何调度,都能找到操作系统。用户和内核都在0-4GB的区间。为了能够既保证操作系统本身的安全性,又保证用户能访问到操作系统,所以引入用户态和内核态。处于哪个态是硬件决定的,cs寄存器记录用户态还是内核态的信息。int 0x80让cs段寄存器转而指向操作系统,同时将权限标志位由11设置为0。

相关推荐
大聪明-PLUS44 分钟前
FFmpeg 组件 - 用途、输入/输出数据、配置
linux·嵌入式·arm·smarc
a3158238061 小时前
Linux部署Python Django工程和Node工程,使用宝塔面板
linux·服务器·python·django·node·strapi·宝塔面板
dishugj1 小时前
Linux系统磁盘性能相关命令详解与实例分析
linux·运维·服务器
代码AC不AC1 小时前
【Linux】深入理解Linux进程:从概念到实践
linux·进程·pcb·fork
南风~古草1 小时前
20252803《Linux内核原理与分析》第12周作业-Linux系统监控实战(系统安全实验)
linux·运维·系统安全
未来会更好yes1 小时前
Alibaba Cloud Linux3.21.04 ModSecurity 3 + Nginx + OWASP CRS 完整安装流程
linux·waf·modsecurity
XH-hui1 小时前
【打靶日记】HackMyVm 之 Twisted
linux·网络安全·hackmyvm·hmv
Evan芙1 小时前
Rocky Linux 9 双网卡 bond0 绑定
linux·服务器·网络
保持低旋律节奏2 小时前
linux——vim编辑器
linux·编辑器·vim