当前位置: 首页 > news >正文

第五部分:6---信号的递达

目录

信号的递达流程:

信号在什么时候递达?

用户态和内核态:

内核态、用户态在页表的映射关系:

操作系统如何得知当前执行状态是用户态还是内核态?

操作系统如何处理被捕捉的信号?


信号的递达流程:

  • 信号被生成后加入未决信号集,等待处理。

  • 如果信号被阻塞,则暂时不能递达;如果没有被阻塞,则可以递达并处理。

  • 如果信号未被阻塞,先从未决信号集中移除信号,再依据可处理信号集的设定执行默认操作或调用自定义处理函数。

  • 如果信号被阻塞,解除阻塞后,该信号需要被“立即”递达。

信号在什么时候递达?

  • 进程在内核态返回到用户态时,进行信号的检测和处理。

用户态和内核态:

  • 用户态是一种受控的状态,所能够访问的资源有限。

  • 内核态是操作系统的工作状态,能够访问大部分的系统资源。

内核态、用户态在页表的映射关系:

  • 系统调用是在进程的地址空间内发起的,但用户态的进程只能访问用户态的虚拟地址空间(通常是0到3GB)。当通过系统调用从用户态切换到内核态时,进程会进入操作系统内核的上下文,从而可以访问更高的地址空间(通常是3GB到4GB的内核空间)。这个切换是通过硬件机制完成的,例如使用中断或陷入指令。

  • 在x86架构下,每个进程都有自己独立的页表,用户态代码只能访问页表的用户空间部分。当进程切换到内核态时,此时可以访问页表的内核空间的地址范围。每个进程的页表包含用户态和内核态的映射。

  • 代码的执行确实都发生在进程的地址空间内,但在用户态执行的是用户代码,系统调用切换到内核态时,执行的则是内核代码。虽然它们共享同一个进程地址空间,但所执行的代码属于不同的权限级别。

操作系统如何得知当前执行状态是用户态还是内核态?

  • 在x86架构中,cs寄存器包含当前执行代码所在段的权限级别,而这个权限级别可以用来区分用户态和内核态。在Linux系统中,Ring 0(00)是内核态,Ring 3(11)是用户态。

  • 用户进程不能直接修改cs寄存器。操作系统通过中断、陷入(trap)、或系统调用等机制从用户态切换到内核态。CPU会自动修改cs寄存器,从Ring 3切换到Ring 0。这种切换是硬件级别的。

  • 操作系统通过读取cs寄存器来得知当前执行代码时的状态。

操作系统如何处理被捕捉的信号?

  • 当进程捕捉到某个信号并定义了自定义的信号处理函数时,操作系统如果要递达这个信号。操作系统会切换到用户态来执行这个自定义的信号处理函数。执行完成后通过sigreturn返回到内核态,再由内核态返回到之前的执行点。

  • 这么做的原因是:信号处理函数是用户代码,为了防止用户有越权行为,操作系统不会直接在内核态处理用户的自定义函数。

相关文章:

第五部分:6---信号的递达

目录 信号的递达流程: 信号在什么时候递达? 用户态和内核态: 内核态、用户态在页表的映射关系: 操作系统如何得知当前执行状态是用户态还是内核态? 操作系统如何处理被捕捉的信号? 信号的递达流程&am…...

深入解析 ARM64 SOC RK3568的 /proc/interrupts 输出

在 Linux 系统中,/proc/interrupts 文件提供了系统中断的详细信息,是性能分析和故障排除的重要工具。本文将重点解析 RK3568环境下该文件的输出格式及其背后的结构。 什么是 /proc/interrupts? /proc/interrupts 文件记录了所有中断的信息&…...

Android常用C++特性之std::unique

声明:本文内容生成自ChatGPT,目的是为方便大家了解学习作为引用到作者的其他文章中。 std::unique 是 C 标准库中的一个算法函数,用于移除相邻的重复元素,使每个相邻的元素在容器中保持唯一。它不会真正移除元素,而是通…...

Redis篇(Java操作Redis)

目录 讲解一:简介 讲解二:Jedis Github 一、创建项目、 二、添加依赖 三、配置文件 四、Java连接Redis 五、通过Redis连接池获取连接对象并操作服务器 六、封装JedisUtil对外提供连接对象获取方法 七、Java操作Redis五种数据类型 1. 连接与释放…...

Cypress自动化Github workflow

目录 Workflow .github/workflows/build.yaml jobs build-deploy: .github/wrokflows/execute-tests.yaml 输入参数 jobs restart_failed_dp: seed_data: execute-tests: Docker File docker/Dockerfile.base docker/service-dockerfile.base Deploy deploy/tes…...

Hbase高阶知识:HBase的协处理器(Coprocessor)原理、使用实例、高级技巧和案例分析

目录 第一章 Hbase概述与基础知识 1.1 HBase的架构与数据模型 1.2 什么是协处理器 1.3 协处理器的优势 第二章 协处理器的工作原理 2.1 协处理器的运行机制 2.2 协处理器的注册与监听 2.3 协处理器与RegionServer的交互 第三章 协处理器的类型 3.1 端点协处理器 3.2…...

海尔嵌入式硬件校招面试题及参考答案

使用 QT 的经验及对控件和信号与槽机制的了解 我使用 QT 有一段时间了,在项目开发中积累了较为丰富的经验。 QT 中的控件丰富多样,涵盖了各种常见的界面元素需求。例如按钮、文本框、列表框、进度条等。这些控件具有良好的可定制性,可以通过属性设置、样式表等方式来调整外观…...

Leetcode基础算法篇|202409(4)贪心算法

贪心算法(Greedy Algorithm):一种在每次决策时,总是采取在当前状态下的最好选择,从而希望导致结果是最好或最优的算法。 学习链接:leetcode-notes/docs/ch04/04.04/04.04.02-Exercises.md at main datawha…...

echarts 导出pdf空白原因

问题阐述 页面样式: 导出pdf: 导出pdf,统计图部分为空白。 问题原因 由于代码中进行了dom字符串的复制,而echarts用canvas绘制,canvas内部内容不会进行复制,只会复制canvas节点,因此导出pdf空白。 解决…...

数据结构及基本算法

目录 第一章 概论 第一节 引言 第二节 基本概念和常用术语 第三节 算法的描述与分析 第二章 线性表 第一节 线性表定义和基本运算个 一、线性表的逻辑定义 二、线性表的基本运算 第二节 线性表的顺序存储和基本运算的实现 一、线性表的顺序存储 二、顺序表上基本运算…...

vue3学习记录-computed

vue3学习记录-computed 1.为什么要用computed2.使用方法2.1 基本实例2.2 可写计算属性 1.为什么要用computed 写个购物车的案例 <script setup> import { ref, reactive,computed } from "vue" const tableData reactive([{ name: 商品1, price: 10, num: 1…...

SQLite3模块使用详解

目录 一、引言 1.1 SQLite3 简介 1.2 Python sqlite3 模块 二、连接数据库 2.1 导入 sqlite3 模块 2.2 连接数据库 2.3 创建游标对象 三、执行 SQL 语句 3.1 创建表 3.2 插入数据 3.3 查询数据 3.4 更新数据 3.5 删除数据 四、处理查询结果 4.1 fetchall() 4.2…...

防火墙详解(三)华为防火墙基础安全策略配置(命令行配置)

实验要求 根据实验要求配置防火墙&#xff1a; 合理部署防火墙安全策略以及安全区域实现内网用户可以访问外网用户&#xff0c;反之不能访问内网用户和外网用户均可以访问公司服务器 实验配置 步骤一&#xff1a;配置各个终端、防火墙端口IP地址 终端以服务器为例&#xff…...

假期学习--iOS中的static关键字

iOS中的static关键字 OC的static关键字 OC也提供了Static关键字&#xff0c;但是这个static关键字不能用于修饰成员变量&#xff0c;也就是说Static是不被允许修饰实例变量&#xff0c;同时Static关键字也不被允许修饰方法。Static关键字可以修饰全局变量&#xff0c;局部变量…...

Maya没有Arnold材质球

MAYA 没有Arnold材质球_哔哩哔哩_bilibili...

面试知识点总结篇三

一、arm中断流程和函数 ARM 中断流程 中断触发保存上下文中断向量表执行ISR - 清除中断标志恢复上下文返回中断 二、STM32任务间通信有哪些方式 消息队列、 信号量、共享内存、任务通知 三、uboot内存没驱动之前是怎么操作的 硬件初始化内存检测设置内存映射控制台初始化…...

数据加密标准(DES)详解:原理、步骤及Python实现

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…...

每日OJ_牛客_OR59字符串中找出连续最长的数字串_双指针_C++_Java

目录 牛客_OR59字符串中找出连续最长的数字串 题目解析 C代码1 C代码2 C代码3 Java代码 牛客_OR59字符串中找出连续最长的数字串 字符串中找出连续最长的数字串_牛客题霸_牛客网 题目解析 双指针&#xff1a; 遍历整个字符串&#xff0c;遇到数字的时候&#xff0c;用双…...

虚幻引擎UE5如何云渲染,教程来了

​步骤一&#xff1a;获取云渲染权限 访问渲染101官网&#xff0c;使用云渲码6666进行注册。 下载并安装渲染客户端。 步骤二&#xff1a;设置渲染环境 确保云渲染环境与您的本地环境一致&#xff0c;避免出错。 步骤三&#xff1a;任务提交 完成环境配置后&#xff0c;解析…...

使用Python实现图形学光照和着色的光线追踪算法

目录 使用Python实现图形学光照和着色的光线追踪算法引言1. 光线追踪算法概述2. Python实现光线追踪算法2.1 向量类2.2 光源类2.3 材质类2.4 物体类2.5 光线追踪器类2.6 使用示例 3. 实例分析4. 光线追踪算法的优缺点4.1 优点4.2 缺点 5. 改进方向6. 应用场景结论 使用Python实…...

Mantic.sh:Bash脚本实现的终端命令自动化与效率提升工具

1. 项目概述&#xff1a;一个为开发者打造的终端效率工具如果你和我一样&#xff0c;每天有超过一半的工作时间是在终端&#xff08;Terminal&#xff09;里度过的&#xff0c;那你肯定对效率工具有着近乎偏执的追求。从cd到ls&#xff0c;从grep到awk&#xff0c;我们依赖这些…...

m4s-converter终极指南:如何无损转换B站缓存视频并保留弹幕

m4s-converter终极指南&#xff1a;如何无损转换B站缓存视频并保留弹幕 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 在数字内容日益丰富的今天…...

从零构建Go Web框架:解析the0极简框架的设计原理与实现

1. 项目概述&#xff1a;一个极简主义Web框架的诞生在Web开发的世界里&#xff0c;我们常常面临一个选择&#xff1a;是拥抱功能齐全但略显臃肿的“巨无霸”框架&#xff0c;还是追求极致轻量与灵活的自定义方案&#xff1f;对于许多追求性能、热爱掌控感&#xff0c;或是需要构…...

WipperSnapper+Adafruit IO:无代码物联网开发实战,从传感器到云端自动化

1. 项目概述与核心价值如果你和我一样&#xff0c;在物联网&#xff08;IoT&#xff09;项目初期&#xff0c;常常被复杂的嵌入式编程、网络协议和云平台对接搞得焦头烂额&#xff0c;那么今天分享的这个实战项目&#xff0c;或许能让你眼前一亮。我们这次不谈复杂的代码&#…...

物联网安防系统故障排查与ESP8266固件刷写实战指南

1. 物联网安防系统故障排查实战做物联网安防系统&#xff0c;最怕的就是“哑火”。你花了好几天时间&#xff0c;把ESP8266、Raspberry Pi、MQTT Broker、Adafruit.IO和IFTTT像搭积木一样连起来&#xff0c;满心期待它能在关键时刻给你发条短信。结果&#xff0c;门被推开了&am…...

基于容器技术的在线代码沙盒:架构设计与安全实践

1. 项目概述&#xff1a;一个开箱即用的在线代码运行沙盒最近在折腾一些需要快速验证代码片段、或者给团队做技术分享的场景&#xff0c;我发现一个痛点&#xff1a;环境配置太麻烦了。你想让新人跑个Python脚本&#xff0c;他可能得先装Python、配环境变量、装依赖库&#xff…...

从肌电信号到Arduino控制:MyoWare传感器实战指南

1. 项目概述&#xff1a;当肌肉“说话”&#xff0c;我们如何“倾听”&#xff1f;如果你玩过一些体感游戏&#xff0c;或者看过科幻电影里用意念控制机械臂的场景&#xff0c;心里大概会闪过一个念头&#xff1a;这玩意儿到底是怎么做到的&#xff1f;其实&#xff0c;很多酷炫…...

容器化技术实战:从Docker到Kubernetes的体系化学习路径

1. 项目概述&#xff1a;一个容器化时代的“瑞士军刀”训练营 如果你正在或即将踏入容器化技术领域&#xff0c;无论是刚接触Docker的新手&#xff0c;还是想系统梳理Kubernetes的开发者&#xff0c;又或者是需要为团队进行技术培训的架构师&#xff0c;那么“jpetazzo/contai…...

解密ComfyUI-WanVideoWrapper:在ComfyUI中突破AI视频生成的技术壁垒

解密ComfyUI-WanVideoWrapper&#xff1a;在ComfyUI中突破AI视频生成的技术壁垒 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 你是否曾想过将脑海中的创意场景转化为生动的视频内容&#xff0…...

【197期】视频一键转图文笔记

这期分享一个自己一直在用的视频转图文笔记工具&#xff0c;把视频文件和对应的字幕文件拖进去&#xff0c;一键就能生成详细的图文笔记。目前自媒体平台上的文章基本都靠这个流程来出&#xff0c;不用另外再写一遍&#xff0c;效率高了很多。使用方式很简单&#xff0c;把视频…...