捕捉信号/信号的处理步骤

news2025/1/17 6:12:38

一、信号会在合适的时候被处理

先摆出一个结论:信号会在合适的时候被处理

当然,这里说的信号默认排除了实时信号,那个是已接收到信号就立马处理信号。

上面说的合适的时候其实就是进程从内核态切换到用户态的时候。

二、何为内核态和用户态

先初步理解一下:

内核态:执行os代码时所处的状态。

进程态:执行自己写的代码时所处的状态。

这两个状态的存在并不奇怪,但是为什么这两个东西会相互切换、不应该就是两个互不关联的东西吗?进程之心任务,操作系统管理进程。

三、为什么要有内核态和用户态

以下例子默认为在32位机器上。

这是我们理解的进程虚拟地址空间 :

但我们不知道的是,这知识0~3G(32位机器2^32bit)的空间,还有1G的空间没有被描述出来,下图才是他的完整面貌:

 内核区存放的都是操作系统内核的代码和数据,包括系统调用、中断处理程序、驱动程序、进程控制块等。内核空间是操作系统独有的内存空间,只能被内核访问,用户程序无法直接访问内核空间,必须通过系统调用接口间接访问。由于内核空间只能被内核访问所以内核被很好的保护起来了。

相对应的,这两个空间有两个页表,互不干扰。

讲一下这个过程是如何被运用的:

就是一个进程正常执行的时候只在0~3G的范围操作,当他需要调用系统函数的时候,进程就会被操作系统从用户态就会切换到内核态。具体在硬件上是如何切换的,cpu有一个CR3寄存器,当存放的是3时就表示该进程为用户态,存放的是0就表示该进程为内核态

成为内核态之后,进程就会去内核空间调用内核代码执行操作,执行完操作之后,进程就要切换回用户态了,但是在此之前,系统会检查一下是否接受到了信号,如果有就先执行这个信号对应的相应操作。这也就是上文提到的合适的时候。

这时候有些同学可能就会说要转空自了:那我写代码不写系统调用,然后给他发送信号岂不是它也不知道?

要解决这个问题,我们要先知道,os的本质是什么————其实就是一个软件。每次开机被从内存中加载出来,这个软件说到底不就是一个死循环嘛。你这电脑放在那里一天两天不管他也不会自己结束,就在那里等待你的指令。

没有指令就会在每次循环的时候自己维护一下进程什么的,有些自己的任务,这其中就有一个os时钟硬件,每个一段很短的时间就会给os发送一个时钟中断,os就要执行一个中断任务——检测当前进程的时间片,这个过程就会调用一个系统函数schedule()函数(这个过程就是,一个进程侄一次只能占用cpu段很短的时间,时间到了就要被调度,切换到其他的进程),这里就会有一次内核态到用户态的切换动作。

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

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

相关文章

Golang -> Golang 变量

Golang 变量 Golang 变量使用的三种方式变量的声明,初始化和赋值程序中 号的使用数据类型的基本介绍int 的无符号的类型:int 的其它类型的说明:整型的使用细节 小数类型/浮点型小数类型分类浮点型使用细节 字符类型字符类型使用细节字符类型本质探讨 布…

java面向对象部分

在学校时学的比较乱,趁暑假再系统的学一遍 访问权限控制 private:私有,只能被本身类访问 什么都不写:默认,只能被类本身和同包中的其他类访问 protected:受保护的,只能被类本身和同包中的其…

计算物理专题:实对称矩阵特征值的求解问题

我们需要求出一个实对称阵的全部特征值与特征向量实对称矩阵特征值的求解是计算量子力学的基础之一(算符是厄米的)同时,实对称矩阵的求解也是使用有限差分法解本征方程的重要方法之一 雅克比方法 我知道这个推导过程非常的复杂,所…

计算物理专题:双向打靶法解决本征值问题

计算物理专题:双向打靶法解决本征值问题 双向打靶法全部代码 EigenMethods.py import numpy as np import matplotlib.pyplot as plt from SchrodingerTools import *#type-ode1: ## y(x)f(x)y(x) g(x) ##tips: ##lambda eigen,x:f(eigen,x)def replace_eigen(ei…

365天深度学习训练营-第T3周:天气识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章:TensorFlow入门实战|第3周:天气识别🍖 原作者:K同学啊|接辅导、项目定制 我的环境: 语言环境&#xff1a…

Web网页制作-知识点(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影

目录 CSS盒子模型 概念 弹性盒模型(flex box) 内容 父元素上的属性 display属性 flex-direction属性 justify-content属性 align-items属性 子元素上的属性 flex 文档流(标准流) 浮动 定义 浮动的原理 清除浮动 …

Java开发 - 负载均衡你了解多少?

前言 前面很多篇博客都有涉及到负载均衡,而负载均衡也并不是某一个框架的专利,从博主接触Java以来,使用的很多框架都自带了负载均衡的特点。今天,我们就来一探究竟,了解下负载均衡是什么,该怎么在项目中使…

Python 函数:理解并使用 return 语句

你好,我是悦创。 函数在 Python 编程中起着至关重要的作用。他们封装了一段代码,并给它一个名字,这样我们可以在程序的任何地方,通过这个名字来调用这段代码。return 是函数的一个重要组成部分,它可以使函数输出一个值…

差分方程转化为Z变换方程

差分方程是描述离散时间系统动态行为的数学工具,而Z变换则是将离散时间信号从时间域转换到复频域的工具。因此,将差分方程转换为Z变换方程可以方便我们在复频域分析离散时间系统的动态行为。 假设我们有一个差分方程: a n x [ n ] a n − 1 x [ n − 1…

rabbitmq第二课-RabbitMQ核心编程模型以及消息应用场景详解

一、回顾RabbitMQ基础概念 二、RabbitMQ基础编程模型 使用RabbitMQ提供的原生客户端API进行交互。这是使用RabbitMQ的基础。 1.1、maven依赖 <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version&g…

C语言:使用指针使字符串逆序

题目&#xff1a; 链接&#xff1a;字符逆序__牛客网 来源&#xff1a;牛客网 将一个字符串str的内容颠倒过来&#xff0c;并输出。 输入描述: 输入一个字符串&#xff0c;可以有空格 输出描述: 输出逆序的字符串 示例1 输入 I am a student 输出 tneduts a ma I …

VUE 2X 生命周期 ⑩①

目录 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ V u e j s Vuejs Vuejs初见生面周期分析生命周期生命周期总结总结 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ ⡖⠒⠒⠒⠤⢄…

《算法设计与分析》学习笔记

目录 算法基本概念 算法的定义 算法复杂度分析 渐近记号 ①渐近上界记号O ②渐近下界记号Ω ③渐近紧确界记号 Θ ④非渐近紧确上界记号o ⑤非渐近紧确下界记号ω 渐进记号极限定义 分治 分治步骤 递归树 ​编辑代入法 主方法 改变变量 二叉树 堆 建堆 堆排…

【promptulate专栏】使用GPT和XMind快速构建思维导图

本文节选自笔者博客&#xff1a;https://www.blog.zeeland.cn/archives/ao302950h3j &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是Zeeland&#xff0c;全栈领域优质创作者。&#x1f4dd; CSDN主页&#xff1a;Zeeland&#x1f525;&#x1f4e3; 我的博客&#…

【Java】缓存常见问题及解决方式

文章目录 一、缓存常见问题二、数据不一致2.1、一致性问题2.2、解决方案 三、缓存穿透3.1、问题3.2、解决方案布隆过滤器使用布隆过滤器解决缓存穿透 四、缓存击穿4.1、问题4.2、解决方案 五、缓存雪崩5.1、问题5.2、解决方案 六、大key及热点key6.1、问题6.2、解决方案大key热…

【Leetcode刷题】字符串匹配

本篇文章为LeetCode 字符串匹配模块的刷题笔记&#xff0c;仅供参考。 目录 Leetcode28.找出字符串中第一个匹配项的下标Leetcode214.最短回文串Leetcode459.重复的子字符串Leetcode686.重复叠加字符串匹配Leetcode1023.驼峰式匹配Leetcode1392.最长快乐前缀Leetcode1668.最大重…

【SpringBoot】一、SpringBoot3改变新特性

前言 本文适合具有springboot的基础的同学。 SpringBoot3改变&新特性 一、前置条件二、自动配置包位置变化1、Springboot2.X2、Springboot3.X 三、jakata api迁移1、Springboot2.X2、Springboot3.X3、SpringBoot3使用druid有问题&#xff0c;因为它引用的是旧的包 四 新特…

App Crawler

Google官方出了一款App遍历工具App Crawler。 文档&#xff1a;应用抓取工具 | Android 开发者 | Android Developers App Crawler工具是Android Jetpack的一部分&#xff0c;它可自动的运行你的App&#xff0c;不需要编写或维护任何代码。 通过App Crawler运行App&…

实训四:索引与视图 - 索引(teachingdb数据库)

索引与数据库完整性 第1关&#xff1a;索引任务描述相关知识索引是什么索引的分类索引的创建和删除查询表中索引 编程要求参考代码 第2关&#xff1a;删除索引-练习任务描述相关知识编程要求测试说明参考代码 第1关&#xff1a;索引 任务描述 本关任务&#xff1a;为 student…

【Leetcode60天带刷】day21二叉树——530.二叉搜索树的最小绝对差 ,501.二叉搜索树中的众数 ,236. 二叉树的最近公共祖先

题目&#xff1a; 530. 二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 示例 1&#xff1a; 输入&#xff1a;root [4,2,6,1,3] 输出&#xff1…