信号-2-信号捕捉

相关概念:递达  未决  /  阻塞   忽略

阻塞 vs 忽略

阻塞:

如果指定信号信号被阻塞, block期间该信号不能被递达,一直在pending表中。知道block被撤销后, 该信号才能递达,递达后对应pending位置置零。

忽略:

被忽略的信号可以正常递达,只是在递达时不会执行任何handler

block  pending  handler

block  pending  handler为task_struct中的三张表,是三个位图

  1. block 表:记录当前进程阻塞的信号集合,阻塞的信号不会立刻处理,直到解除阻塞。
  2. pending 表:保存已经发送但尚未处理的信号,当进程可以处理时,信号将被从待处理表中移到处理队列。
  3. handler 表:存储信号对应的处理函数,决定当信号到达时,进程如何响应这些信号。

三张表中都有31个信号,信号值减1为hander对应下标

对三张表进行查改

见:对block, pending, handler,三张表进行查改操作-CSDN博客

signal

signal:对handler表

#include <signal.h>typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);

SIG_DEL, SIG_IGN     默认方法&忽略

signal只是设置作用,不执行实际捕捉过程。一次设置,一直可用

sigpromask:对block

sigset_t 结构体  信号集

block信号集也叫做信号屏蔽字(singal musk)

sigpending

检查pending表,不需要提供修改功能

只有输出型参数

 

三者关系

一个信号值被block了,只是挡住了pending到handler的道路,但改信号值还是可以进入pending。当block解除后,pending对应信号值可执行handler,执行后pending中该位置置零

信号捕捉

信号捕捉流程

 为什么运行signalhandler要返回用户态:限制权限

为什么signalhandler之后进入sys_sigreturn而不是直接返回main:进入内核态才能从cpu得到下条指令地址,才能回到main

用户态&内核态

什么是用户态&内核态

用户态:我自己写的代码

内核态:操作系统的代码

如何切换用户态&内核态   cs寄存器

从用户态到内核态:cpu内cs(code segment)寄存器,两个bit位的值为0是内核态,3是用户态

只有cpu的cs为0才能访问内核态

调用int0x80或syscall时,cpu自动改cs为0,用户态为3

用户如何进入内核态

通过系统调用(system_call), 如write, read, fork, kill等等

int 0x80 & system_call

int 0x80是一条汇编指令, c语言调用system_call接口(write, read,fork等)时,其汇编语句中会调用int 0x80使该进程陷入内核态

操作系统是怎样运行的

操作系统基于中断来循环运行

硬件中断

IDT 中断向量表

可理解为函数指针数组

下标为中断号

通过外部设备中断,OS不必轮询/周期性检测

IDT表:

时钟元

时钟中断,一直在推进操作系统进行调度

什么是操作系统:操作系统就是基于中断向量表进行中断的

当代时钟元被集成到CPU内部

其中断频率称为主频

什么是时间片

本质是一个计数器

进程调度就是当前时间片进行--

所以说进程调度不一定切换,当时间片为0时才切换

软中断

上述为硬中断

也有软中断,由于软件问题,出发上述逻辑(系统调用)

陷阱&异常

陷阱:单纯让OS陷入内核态的软中断, 通常指system_call

异常:出错导致的软中断

所以中断不一定是错误,可能只是一种手段

系统调用过程

系统调用就是软中断

操作系统就是躺在中断处理例程上的代码块

系统调用表

系统调用号

系统调用

三者关系:系统调用通过调用sys_function(int index)向CPU指定寄存器写入系统调用号, CPU自动去系统调用表执行对应方法

中断时的上下文保护

见:上下文保护-CSDN博客

总结:将cpu与进程相关信息/状态保存到进程PCB中 

 CPU执行中断时如何保存数据

 

内核页表/用户页表

内核页表:整个OS,只有一份,映射3-4GB的内核区

用户页表:每个进程不一样,映射0-3GB

所以每个进程看到的都是同一OS

访问用户区不需要系统调用(这就是为什么访问共享内存不用系统调用:已经被映射到用户区中的共享区)

对于内核区,我们只/只能关心系统调用接口。

但我们没必要关心系统调用对应地址,glibc已经将其封装,用户只需知道调用号


 

tips

nohub指令

fg / bg 指令  移动到前/后台

nohub vs bg

 

man 7 singal     查看各种指令信息

函数 传参/return 通过寄存器

板书笔记

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/7109.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

正则表达式1 re.match惰性匹配详解案例

点个关注 re.match() re.match() 函数尝试从字符串的开头开始匹配一个模式&#xff0c;如果匹配成功&#xff0c;返回一个匹配成功的对象&#xff0c;否则返回None。大小写区分&#xff0c;内容匹配不到后面的,只能匹配一个&#xff0c;不能有空格&#xff08;开头匹配&#…

如何针对云计算安全进行等保测评?

等级保护作为我国网络安全法明确的重要制度&#xff0c;已在我国信息系统安全保驾护航中发挥着重要作用。目前&#xff0c;等级保护已经进入了2.0时代&#xff0c;“云、大、物、移、工控”纳入等保监管。 当前&#xff0c;按照传统等级保护技术要求实施的安全策略已经不能适应…

软考:性能测试的几个方面

性能测试的指标&#xff1a; 响应时间&#xff0c;吞吐量&#xff0c;并发用户数&#xff0c;资源利用率等 四个方面&#xff1a; 1、发现缺陷 2、性能调优 3、评估系统能力&#xff0c;不仅需要&#xff0c;还需要。 4、验证稳定性和可靠性

Vue(JavaScript)读取csv表格并求某一列之和(大浮点数处理: decimal.js)

文章目录 想要读这个表格&#xff0c;并且求第二列所有价格的和方法一&#xff1a;通过添加文件输入元素上传csv完整&#xff08;正确&#xff09;代码之前的错误部分因为价格是小数&#xff0c;所以下面的代码出错。如果把parseFloat改成parseInt&#xff0c;那么求和没有意义…

搭建兰空图床并配合PicGo实现批量上传

文章目录 服务器安装docker安装数据库部署兰空图床兰空图床配置邮箱验证配合PicGo实现批量上传 最近想试试自己搭建图床&#xff0c;虽然免费的又拍云够用了&#xff0c;但对象存储和图床还是有区别的&#xff0c;用起来有些复杂&#xff0c;所以打算试试兰空图床 服务器 想搭建…

如何对数据库的表字段加密解密处理?

对于表格数据的加密处理&#xff0c;通常涉及到对数据库中存储的数据进行加密&#xff0c;以保护敏感信息。 Java示例&#xff08;使用AES算法加密数据库表数据&#xff09; 首先&#xff0c;你需要一个数据库连接&#xff0c;这里假设你使用的是JDBC连接MySQL数据库。以下是…

LLM训练”中的“分布式训练并行技术;分布式训练并行技术

目录 “LLM训练”中的“分布式训练并行技术” 分布式训练并行技术 数据并行 流水线并行:按阶段(stage)进行切分 张量并行 序列并行 多维混合并行 自动并行 MOE并行 重要的分布式AI框架 “LLM训练”中的“分布式训练并行技术” 随着深度学习技术的不断发展,特别是…

TS学习笔记

一、TS运行环境搭建 1、安装 安装命令 npm i -g typescript 第一步&#xff1a;新建index.html和demo.ts 第二步&#xff1a;在index.html引入demo.ts文件 第三步&#xff1a;运行TS的命令 tsc demo.ts 注意&#xff1a;运行命令后&#xff0c;会将ts文件转换成js文件 …

ubuntu 22.04 server 安装 和 初始化 LTS

ubuntu 22.04 server 安装 和 初始化 下载地址 https://releases.ubuntu.com/jammy/ 使用的镜像是 ubuntu-22.04.5-live-server-amd64.iso usb 启动盘制作工具 https://rufus.ie/zh/ rufus-4.6p.exe 需要主板 支持 UEFI 启动 Ubuntu22.04.4-server安装 流程 https://b…

Python接口自动化测试实战

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 接口自动化测试是指通过编写程序来模拟用户的行为&#xff0c;对接口进行自动化测试。Python是一种流行的编程语言&#xff0c;它在接口自动化测试中得到了广泛…

day01 - web开发简介

本课程涉及到的技术&#xff1a; Vue ElementUI/Html Js SpringBoot–Spring SpringMvc MyBatis(Plus) SSM Axios 学习路径&#xff1a; 前端主要&#xff1a; Html5css3JavaScript(JQuery)–>Vue(Node.js也可以学习一 下&#xff0c;服务端js)ElementUi(uni-app) 后端主要…

qt QMessageBox详解

1、概述 QMessageBox是Qt库中的一个类&#xff0c;它用于在图形用户界面&#xff08;GUI&#xff09;程序中显示消息框。消息框是一种用于向用户显示信息、警告、错误或询问用户确认的对话框。QMessageBox可以显示文本、图标和按钮&#xff0c;并允许自定义按钮的文本和功能。…

简易版 python调用cuda方法

目标: 手写一些cuda库, 使用python调用这些库 (Linux) 步骤一: 在linux上安装pybind11 方法1: sudo apt-get install python3-pybind11 方法2: git clone https://github.com/pybind/pybind11.git, 如果将其放在项目目录下的话可以不编译 步骤二: 编写CUDA代码 示例: gpu_l…

51单片机学习心得2(基于STC89C52):串口通信(UART)

串口通信&#xff08;UART&#xff09; 电平标准 &#xff08;注意&#xff1a;单片机中常使用TTL电平&#xff09; 上图中第一种与第二种电平传输信号有效距离只有十几米&#xff0c;距离超出后会传输数据错误&#xff1b;但是第三种电平传输的有效距离可达上千米。 常用通信…

gitlab-runner中搭建nvm、nrm以及优化maven打包

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 gitlab-runner中搭建nvm、nrm以及优化maven打包 git、gitlab-runner如何以gitlab-runner执行nvm、…

一文读懂:AIOps 从自动化运维到智能化运维

今天跟大家聊一聊AIOps&#xff08;人工智能运维&#xff09; 为了应对企业面临着日益复杂的运营挑战&#xff0c;AIOps&#xff08;人工智能运维&#xff09;作为一种创新的方法应运而生&#xff0c;结合了人工智能和机器学习技术&#xff0c;来提升IT运营的效率和性能。 这…

Java反射

动态代理 java.lang.reflect.Proxy:提供了为对象产生代理的方法&#xff1a; public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h) loader&#xff1a;指定用哪个类加载器&#xff0c;去加载生成的代理类。interfa…

废弃物分类分割系统:入门训练营

废弃物分类分割系统源码&#xff06;数据集分享 [yolov8-seg-C2f-DCNV2-Dynamic&#xff06;yolov8-seg-C2f-DWR等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Glob…

策划方案思路大公开,让你的创意更有市场!

各位营销界的脑洞大开者们&#xff0c;是不是又在为如何让你的创意在市场上大放异彩而绞尽脑汁&#xff1f; 别担心&#xff0c;今天我就来给你揭秘几个策划方案的新思路&#xff0c;让你的创意不仅有料&#xff0c;还有市场&#xff01; 一、紧跟热点&#xff0c;借势营销 …

软件著作权申请教程(超详细)(2024新版)软著申请

目录 一、注册账号与实名登记 二、材料准备 三、申请步骤 1.办理身份 2.软件申请信息 3.软件开发信息 4.软件功能与特点 5.填报完成 一、注册账号与实名登记 首先我们需要在官网里面注册一个账号&#xff0c;并且完成实名认证&#xff0c;一般是注册【个人】的身份。中…