进程对于信号的处理&&内核态和用户态的转换

24 阅读2分钟

1.进程对于信号的处理

下面介绍的就是我们的CPU高速计算和输入输出之间的矛盾;

image-20251008160029641

下面是介绍的我们的alarm和我们信号结合使用的时候:可以执行指定位置的这个代码,进而形成循环,在不消耗任何的CPU资源的条件下保证了操作系统的高效运行;

image-20251008160225418

当我们的信号交给进程的时候,进程并非会立刻对于我们的这个信号进行处理:主要涉及几张表,比如下面描述的这个pending表和block表,分别表示这个信号的阻塞

以及我们熟知的这个屏蔽和忽略之间的区别;

image-20251008160844219

当我们程序员连续发送一样这个中断信号的时候,pending里面只会进行一次记录,我们可以使用操作系统提供的函数对于block表里面的内容进行修改,对于pending表里面的内容进行查看;

image-20251008160938591

如果存在恶意的程序对于我们的信号进行屏蔽处理,我们可以使用kill -9命令对于这个信号杀死,这个是我们的系统管理员的权限,就是为了处理这种恶意的行为的

image-20251008161125655

2.内核态和用户态的切换

首先我们需要了解这个内核态和用户态的相关的概念

image-20251008161640272

但是因为权限的问题,因此这个操作执行的时候涉及到了四次内核态和用户态之间的相互转换

1)这个过程设计到我们的内核态直接跳转到新的地址进行代码的执行;

2)执行之后返回内核态的过程---通过特殊的系统调用返回我们的内核态

3)最后我们从内核态重新回到这个最开始程序中断的地方继续进行执行;

image-20251008161944667

下面的这个就是我们的进程得到中断之后的这个内核态和用户态之间的相互切换的这个过程:

image-20251008162810552