信号-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.rhkb.cn/news/466651.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(蓝桥杯C/C++)——基础算法(下)

目录 一、时空复杂度 1.时间复杂度 2.空间复杂度 3.分析技巧 4.代码示例 二、递归 1.递归的介绍 2.递归如何实现 3.递归和循环的比较 4.代码示例 三、差分 1.差分的原理和特点 2.差分的实现 3.例题讲解 四、枚举 1.枚举算法介绍 2.解空间的类型 3. 循环枚举解…

【极限编程(XP)】

极限编程&#xff08;XP&#xff09;简介 定义与核心价值观&#xff1a;极限编程&#xff08;Extreme Programming&#xff0c;XP&#xff09;是一种轻量级、敏捷的软件开发方法。它强调团队合作、客户参与、持续测试和快速反馈等价值观&#xff0c;旨在提高软件开发的效率和质…

如何编写安全的 Go 代码

原文&#xff1a;Jakub Jarosz - 2024.11.02 在编写 Go 代码时&#xff0c;如何时刻考虑安全性&#xff1f;要在一篇简短的文章中回答这个问题似乎不太可能。因此&#xff0c;我们将把范围缩小到一些具体做法上。 这些实践如果持续应用&#xff0c;将有助于我们编写健壮、安全…

Go八股(Ⅳ)***slice,string,defer***

***slice&#xff0c;string&#xff0c;defer*** 1.slice和arry的区别 arry&#xff1a; Go语言中arry即为数据的一种集合&#xff0c;需要在声明时指定容量和初值&#xff0c;且一旦声明就长度固定&#xff0c;访问时按照索引访问。通过内置函数len可以获取数组中的元素个…

使用 Mac 数据恢复从 iPhoto 图库中恢复照片

我们每个人都会遇到这种情况&#xff1a;在意识到我们不想丢失照片之前&#xff0c;我们会永久删除 iPhoto 图库中的一些照片。永久删除这些照片后&#xff0c;是否可以从 iPhoto 图库中恢复照片&#xff1f;本文将指导您使用免费的 Mac 数据恢复软件从 iPhoto 中恢复照片。 i…

Spark 的介绍与搭建:从理论到实践

目录 一、分布式的思想 &#xff08;一&#xff09;存储 &#xff08;二&#xff09;计算 二、Spark 简介 &#xff08;一&#xff09;发展历程 &#xff08;二&#xff09;Spark 能做什么&#xff1f; &#xff08;三&#xff09;spark 的组成部分 &#xff08;四&…

Spring Boot2(Spring Boot 的Web开发 springMVC 请求处理 参数绑定 常用注解 数据传递 文件上传)

SpringBoot的web开发 静态资源映射规则 总结&#xff1a;只要静态资源放在类路径下&#xff1a; called /static (or /public or /resources or //METAINF/resources 一启动服务器就能访问到静态资源文件 springboot只需要将图片放在 static 下 就可以被访问到了 总结&…

Vue2中使用firefox的pdfjs进行文件文件流预览

文章目录 1.使用场景2. 使用方式1. npm 包下载,[点击查看](https://www.npmjs.com/package/pdfjs-dist)2. 官网下载1. 放到public文件夹下面2. 官网下载地址[点我,进入官网](https://github.com/mozilla/pdf.js/tags?afterv3.3.122) 3. 代码演示4. 图片预览5. 如果遇到跨域或者…

2024软件测试面试热点问题

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 大厂面试热点问题 1、测试人员需要何时参加需求分析&#xff1f; 如果条件循序 原则上来说 是越早介入需求分析越好 因为测试人员对需求理解越深刻 对测试工…

C语言 | Leetcode C语言题解之第542题01矩阵

题目&#xff1a; 题解&#xff1a; /*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/ type…

C++总结

目录 一、面向对象的三大特性 二、引用 2.1 概念 2.2特性 三、类与对象 3.1概念 3.2 类的内容 3.3对象的创建 四、构造函数与析构函数 五、封装 六、继承 6.1概念与基础使用 6.2 继承权限 6.2.1 权限修饰符 6.2.2 继承权限 6.3构造函数 6.3.1 派生类与基类的构造函数关系 6.3.2…

2024 CSS保姆级教程二 - BFC详解

前言 - CSS中的文档流 在介绍BFC之前&#xff0c;需要先给大家介绍一下文档流。​ 我们常说的文档流其实分为定位流、浮动流、普通流三种。​ ​ 1. 绝对定位(Absolute positioning)​ 如果元素的属性 position 为 absolute 或 fixed&#xff0c;它就是一个绝对定位元素。​ 在…

在PHP8内,用Jenssegers MongoDB扩展来实现Laravel与MongoDB的集成

在现代 web 开发中&#xff0c;MongoDB 作为一种流行的 NoSQL 数据库&#xff0c;因其灵活的文档结构和高性能而受到许多开发者的青睐。Laravel&#xff0c;作为一个优雅的 PHP Web 框架&#xff0c;提供了丰富的功能和优雅的代码风格。本文将指导你如何在 Laravel 项目中集成 …

GPU 环境搭建指南:如何在裸机、Docker、K8s 等环境中使用 GPU

本文主要分享在不同环境&#xff0c;例如裸机、Docker 和 Kubernetes 等环境中如何使用 GPU。 跳转阅读原文&#xff1a;GPU 环境搭建指南&#xff1a;如何在裸机、Docker、K8s 等环境中使用 GPU 1. 概述 仅以比较常见的 NVIDIA GPU 举例&#xff0c;系统为 Linux&#xff0c;…

Axure设计之左右滚动组件教程(动态面板)

很多项目产品设计经常会遇到左右滚动的导航、图片展示、内容区域等&#xff0c;接下来我们用Axure来实现一下左右滚动的菜单导航。通过案例我们可以举一反三进行其他方式的滚动组件设计&#xff0c;如常见的上下滚动、翻页滚动等等。 一、效果展示&#xff1a; 1、点击“向左箭…

每天五分钟深度学习框架pytorch:如何加载手写字体数据集mnist?

本文重点 那个这节课程之后,我们就将通过代码的方式来搭建CNN和RNN模型,然后训练,我们使用的数据集为pytorch中已经封装好的数据集,比如mnist,cafir10,本文我们学习一下如何在pytorch中使用它们,然后为之后的章节做准备,现在我们拿mnist来举例。 mnist和cafir10 MIN…

itextpdf打印A5的问题

使用A5打印的时候&#xff0c;再生成pdf是没有问题的。下面做了一个测试&#xff0c;在打印机中&#xff0c;使用A5的纸张横向放入&#xff0c;因为是家用打印机&#xff0c;A5与A4是同一个口&#xff0c;因此只能这么放。 使用itextpdf生成pdf&#xff0c;在浏览器中预览pdf是…

AJAX 全面教程:从基础到高级

AJAX 全面教程&#xff1a;从基础到高级 目录 什么是 AJAXAJAX 的工作原理AJAX 的主要对象AJAX 的基本用法AJAX 与 JSONAJAX 的高级用法AJAX 的错误处理AJAX 的性能优化AJAX 的安全性AJAX 的应用场景总结与展望 什么是 AJAX AJAX&#xff08;Asynchronous JavaScript and XML…

CKA认证 | Day1 k8s核心概念与集群搭建

第一章 Kubernetes 核心概念 1、主流的容器集群管理系统 容器编排系统&#xff1a; KubernetesSwarmMesos Marathon 2、Kubernetes介绍 Kubernetes是Google在2014年开源的一个容器集群管理系统&#xff0c;Kubernetes简称K8s。 Kubernetes用于容器化应用程序的部署&#x…

web实操1——只使用tomcat发布网站

安装tomcat 下载 肯定是去官网&#xff1a; http://tomcat.apache.org/ 下载之后&#xff0c;解压&#xff1a; &#xff01;&#xff01;解压后&#xff1a; logs日志&#xff1a;就是一些输出&#xff0c;输到文本里。 temp:一些临时文件(不用管) webapps:放网站的 work&…