37 内核与用户_信号

lesson 28操作系统是基于中断的软件集合。

看大表,拿到虚拟地址就能访问用户区,通过页表映射,内核页表和用户页表区别就是,一个进程一个用户页表,操作系统只存在一份,操作系统代码数据只有一分,内核页表,系统只有一份,每个进程都能通过进程地址空间 内核页表找到同一个操作系统,

cpu内部有个代码段寄存器,后两位0代表内核,为1代表用户,如果发现用户访问内核直接通过中断停止访问。

这个命令让cs段寄存器转而指向操作系统的代码区,并将11设置为0,这叫陷入内核,但是操作系统不允许去直接通过地址访问代码数据,所以执行int syscall就是执行0x80的系统调用方法,否则都是非法状态,。。权限标志代表用户态还是内核态。

所谓的用户态 ,就是 CPU 的权限级别为 3(Ring 3),并且我们只允许用户进程访问 0 到 3GB 的虚拟地址空间。那么,什么叫做内核态呢?CPU 的执行级别为 0(Ring 0)。

操作系统允许用户以系统调用 的方式,把系统调用号传递到我们的 EAX 寄存器 中,然后再切换我们的地址空间,使用内核页表映射操作系统内核。系统会根据中断处理机制,查找对应的系统调用表 来执行系统调用。

这个权限位有专门的名词叫CPL,CPL = Current Privilege Level 中文翻译当前特权级

硬件中断,除灵野指针异常,系统调用进入内核,中断走中断处理方法,异常,操作系统中断处理方法发信号,系统调用要求封装的系统调用,int 80陷入内核,在内部执行操作系统上的功能,1.访问3-4GB地址空间,2. 访问内核级页表 3.CPU工作模式由3变0,此时就以操作系统的身份运行,返回时可以检查信号,若发现是用户级别方法就要回到用户层,级别由0-3,然后弹栈返回回到sigreturn,再次陷入内核,执行级别3-0。返回用户态0-3。

涉及4次身份变化。

捕捉信号:硬件中断信号产生->执行中断处理方法,修改当前进程taststruct pending表,中断处理完,进程继续运行,发生陷阱,异常中断,导致陷入内核,返回时检查。

捕捉信号另一个方法sigaction,

看代码 ,如果不用这种机制,会让大量相同 信号递归处理,十分复杂,,递达之前pending1-0 block 0-1

  • 你正在愉快地执行 信号 A 的处理函数

  • 此时来了一个没被屏蔽的 信号 B。因为硬件中断或时间片轮转,CPU 陷入了内核态。

  • 内核发现有未屏蔽的信号 B 需要处理,于是保存当前正在执行的信号 A 处理函数的上下文(类似于保存案发现场)

  • 内核篡改返回地址,切换回用户态,强制 CPU 去执行 信号 B 的处理函数

  • 信号 B 的处理函数执行完毕 ,通过 sigreturn 再次陷入内核。

  • 内核恢复之前保存的上下文,回到 信号 A 的处理函数 被打断的地方,继续把 A 执行完。

  • 最后,A 执行完毕,再返回到 main 主函数的正常逻辑。


    volatile

while(flag)就是一直执行1,2步骤导入,运算,有些不需要写回就不需要,

还有一种情况,编译器发现while只检查不修改,所以给flag带一个建议性关键字register,在内存照样定义出来为0,我编译时直接把0加载到cpu寄存器,从此往后while循环在进行检测时,检测寄存器里值是否为真就不用访存了,就提高运算速度了,所以可能这样优化。

看代码,flag优化后,while循环再检测时只看寄存器,内存变了也不看 ,不知道优化级别,用valatile修饰,进程能正常结束,就是不省略从内存mov到编译器这一步。


sigchld信号

看代码,这是用阻塞方式循环,子进程全回收之后下次就返回错误,期间还有子进程发送信号在pending,还要执行一次,这次子进程全都回收直接错误,,要是有几个没退就阻塞了就采用非阻塞方式

这样不关心子进程,不会有僵尸进程,子进程退出就退出了。父进程也不管,不过拿不到退出码

但是默认就是ign,为什 还要设置一次,因为默认是def,这个是缺省动作 这两个ign不是一个意思

相关推荐
韩明君6 分钟前
OpenClaw安全部署实现
linux·人工智能·安全·debian·本地部署·ai agent·openclaw
YJlio11 分钟前
1 4.1 微软商店的使用(Microsoft Store:下载/安装/管理应用与游戏)
运维·hive·hadoop·windows·游戏·microsoft·计算机外设
要做一个小太阳17 分钟前
数据库索引
运维·数据库
代码中介商17 分钟前
Linux 文件操作系统调用完全指南:从 open 到 close
linux·运维·服务器
被摘下的星星22 分钟前
传输控制协议(TCP)
服务器·网络·tcp/ip
想拿大厂offer24 分钟前
【Linux】权限
linux·服务器
倔强的石头10634 分钟前
【Linux指南】基础IO系列(七):“一切皆文件” 底层实现 ——struct file 与统一 IO 接口的魔法
linux·运维·服务器
网络小白不怕黑34 分钟前
1.1 VMware部署Rocky Linux 9 (GPT分区表,最小化安装)
linux·服务器·gpt
qq_2975746737 分钟前
RocketMQ 系列文章(高级篇第 1 篇):高可用集群部署与运维监控实战指南
运维·rocketmq·java-rocketmq
克莱因35840 分钟前
思科Cisco 静态NAT
服务器·网络·思科