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不是一个意思

相关推荐
kaico20182 小时前
Jenkins Shared Library 开发
运维·jenkins
酌量2 小时前
nvidia orin agx刷机忘记CUDA runtime,安装torch和cuda
linux·笔记·ubuntu·torch·cuda·agx
R_.L2 小时前
【云服务器】VSCode连接云服务器
服务器·vscode
满天星83035772 小时前
【MySQL】表的基本查询(上)
linux·服务器·数据库·mysql
yuanlaile2 小时前
Linux Docker、Swarm、K8s分布式部署全集解析
linux·docker·kubernetes·k8s实战
dajun1811234562 小时前
信息系统运维管理全流程详解 在线画图工具绘制运维流程图表技巧
运维·数据库·信息可视化·流程图·旅游·论文笔记
皮卡蛋炒饭.2 小时前
库制作与原理
linux·学习
PyHaVolask2 小时前
Linux实用工具与技巧
linux·运维·chrome
不才小强2 小时前
Linux开发环境搭建指南
linux·运维·服务器