『 Linux 』用户态与内核态的转换机制及信号检测时机

news2024/9/28 13:23:23

文章目录

    • 用户态与内核态
      • 进程地址空间
      • 操作系统的本质
    • 信号的处理时机


用户态与内核态

请添加图片描述

进程在执行代码的过程中代码必定涉及用户代码,库函数代码及操作系统内核代码;

以简单的printf()函数为例,该函数必定为先执行用户的代码即知道需要调用printf()函数,再执行库(如libc)中的代码printf()最后该函数必定封装了操作系统的系统调用接口(如write())一系列的操作;

这意味着进程必须要由用户态转换为内核态,再由内核态转换回用户态才有对应的"权限"执行对应的接口;

当执行系统调用接口时操作系统将对进程进行用户切换,即用户态转换为内核态或是内核态转换为用户态;

  • 用户态(User Mode)

    • 访问限制

      在用户态运行的进程只能访问它自己的用户空间代码和数据;这是为了保护系统安全,防止用户程序意外或故意地修改系统关键数据;

    • 受限访问内核资源

      用户态进程无法直接访问操作系统内核代码和数据,也不能执行特权指令(如直接操作硬件或更改系统设置);

    • 系统调用

      当用户态进程需要请求内核服务时(例如文件操作、网络通信等),它通过系统调用(如int 0x80在x86 Linux系统上)请求操作系统来执行这些操作;系统调用是用户态与内核态通信的一种受控机制;

  • 内核态(Kernel Mode)

    • 完全访问权限

      在内核态运行的代码有权访问系统的所有资源,包括所有内存、硬件设备和CPU指令集;这包括内核空间的代码和数据,也包括可能的用户空间数据(用于完成用户的请求);

    • 保护机制

      尽管内核态有更高的权限,操作系统通过严格的权限管理和进程隔离机制,确保用户进程只能通过合法的系统调用接口访问内核资源;


进程地址空间

请添加图片描述

每个进程都存在一个对应的内核数据结构task_struct,该数据结构保存了进程的各种属性,其中存在一个进程地址空间作为虚拟地址;

虚拟地址通过页表映射至物理地址;

其中进程地址空间中0-3GB为用户空间,3-4GB为内核空间;

对于用户而言所使用的进程地址空间为用户空间,通过页表与MMU内存管理单元访问对应位置的物理内存;

本质上页表存在两种页表分别为用户级页表与内核级页表;

  • 用户级页表

    管理进程的用户地址空间,主要用于映射用户代码和数据所需的物理内存;

    由于进程具有独立性,用户级页表的数量为当前进程的数量,即一个进程有一个独立的用户级页表;

  • 内核级页表

    管理内核空间地址,映射内核代码和数据所需的物理内存;

    内核地址空间在所有进程中是共享的,因此内核级页表在所有进程中是相同的,意味着系统中只有一个内核级页表;

本质上用户级页表与内核级页表的结构是统一的,只是在逻辑上进行分开;

用户空间通过用户级页表访问物理内存,内核空间通过内核级页表访问操作系统内核代码和数据,保证了进程的隔离和内核的安全性;

  • 进程视角

    在进程视角中本质上就是调用自己的地址空间;

  • 操作系统视角

    操作系统视角为任何一个时期都将有进程执行;

用户级页表与内存级页表本质上属于一种数据结构的实例化,其可以属于一种数据具有自己的地址;

  • CR3寄存器

    CPU中存在一个寄存器为CR3,该寄存器存储着页表的地址;

    当进程需要执行自己用户的代码数据时,即访问用户级地址空间时,CR3寄存器指向用户级页表的地址;

  • ecs寄存器

    CPU中还存在一个ecs寄存器,该寄存器中存在两个以比特位形式表现的标志位;

    其四种选项分别为00,01,10,11;

    其中11表示为用户态,00表示为内核态;

    其标定了一个用户态与内核态的权限,当其标志位变为00时表示其陷入内核;

    该寄存器也提供了一个接口以便能够修改对应的标志位;

    故当使用汇编语句int 80时即标志位变为00从而陷入内核;


操作系统的本质

请添加图片描述

操作系统可以理解为一个软件,一个进程;

其本质上是一个基于硬件中断的死循环,其中发生中断的可以是计算机组成中的各个硬件;

这个循环不断地等待和处理中断信号,中断可以来自各种硬件设备或软件事件;

这些中断不限于I/O中断,系统调用中断,异常中断等;

当不存在I/O中断,系统调用中断,异常中断等中断时,必须通过一种措施使操作系统持续的调度不同的进程以维持自身的系统维护和进程调度;

该措施为 时钟中断 ,其中断是由计算机组成中的 时钟芯片 产生的;

  • 时钟芯片

    时钟芯片是一种专门用于生成时钟信号的硬件装置;

    其提供了一个稳定的时钟源以保持系统时间,计时以及产生时间中断;

    在进行时间中断时其将以非常短的时间向操作系统发送一个硬件中断异常以维持系统的维护和进程调度;

  • 时钟中断

    时钟中断是由时钟芯片产生的一种中断信号;

    其以周期性的发生,用于告诉操作系统当前时间的变化或需要执行定时任务;

    时钟中断通常用于多任务操作系统中以实现进程调度,系统计时等功能;

操作系统的基本工作机制可以分为主循环,等待中断,中断处理;

  • 主循环

    操作系统在启动时进入一个主循环,这个主循环负责监控和管理系统资源,响应外部和内部事件;

  • 等待中断

    在主循环中,操作系统通常处于等待中断的状态;

    这个中断状态可以来自硬件(时钟中断,I/O中断等);

  • 中断处理

    当一个中断发生时,操作系统将暂停正在进行的工作,跳转到响应的中断处理程序;

    这些中断处理程序执行特定的任务,例如更新系统时间,处理I/O请求,调度新进程等;

时钟中断在操作系统中十分重要,其负责定时中断,进程调度,系统计时,定时任务等;

  • 定时中断

    时钟芯片周期性地产生时钟中断(例如每秒100次);

    每次时钟中断发生时操作系统会执行中断处理程序以保证就算不发生其他中断操作系统也能够进行进程调度,系统维护等操作;

  • 进程调度

    时钟中断触发进程调度器的运行;

    调度器决定是否需要切换当前运行的进程以确保所有进程都能够得到CPU时间,这就是所谓的"时间片轮转调度";

  • 系统计时

    操作系统使用时钟中断来保持系统时间的准确性;

    每次中断发生时操作系统会更新其内部计时器;

  • 定时任务

    操作系统可以设置定时器,在指定的时间后产生中断以执行某些定时任务;

    这些任务包括系统维护,资源回收,性能监控等;

	/* 简化的操作系统模型 */
while (true) {
    wait_for_interrupt();  // 等待中断
    handle_interrupt();    // 处理中断
}

实际上在操作系统中以for (;;) { pause(); }的形式存在;

  • pause()的作用

    • 等待中断

      pause()指令使CPU进入低功耗状态等待中断发生;

    • 处理中断

      当中断发生时,CPU会跳转到响应的中断处理程序执行特定任务;

    • 恢复主循环

      中断处理完成后操作系统会返回主循环并等待下一个中断;


信号的处理时机

请添加图片描述

当进程接收到一个信号时并不会立即处理这个信号,而是等待合适的时候对该信号进行处理;

信号的处理是由进程完成的,这意味着此时进程必须进入内核态才能对信号进行处理;

信号的检测与处理的时机为进程由内核态返回到用户态的过程;

进程在内核态时意味着其必定在进行重要的工作,只有当重要的工作完成时即从内核态返回用户态的时机才有机会对信号进行检测;

该图为以基于用户自定义动作处理信号为例;

处理这个信号,而是等待合适的时候对该信号进行处理;

信号的处理是由进程完成的,这意味着此时进程必须进入内核态才能对信号进行处理;

信号的检测与处理的时机为进程由内核态返回到用户态的过程;

进程在内核态时意味着其必定在进行重要的工作,只有当重要的工作完成时即从内核态返回用户态的时机才有机会对信号进行检测;

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

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

相关文章

InsCode GPU服务器快速使用

文章目录 1. 背景介绍2. 环境配置 1. 背景介绍 InsCode服务器地址:https://inscode.csdn.net/workbench?tabcomputed。 2. 环境配置 新建环境后,按照如下步骤快速配置,以便后续执行深度学习模型训练。 数据 openlane 环境依赖 Copy Mini…

切换数据失败0x1671分析

1、问题背景 切换双卡数据开关,无法切换成功,且单机必现该问题 2、问题分析 搜索Log发现相关拨号无法建立成功,返回0x1671,无法建立PDN连接。 相关拨号上层未下发相关AT命令,属于上层报错,并非网络问题&…

《系统架构设计师教程(第2版)》第12章-信息系统架构设计理论与实践-05-信息系统架构案例分析

文章目录 1. 价值驱动的体系结构——连接产品策略与体系结构1.1 价值模型1)概述2)价值驱动因素3)传统方法识别价值模型的缺陷(了解即可) 1.2 体系结构策略(挑战)1) 优先级的确定2&am…

厚积薄发,详解 IoTeX 2.0 如何推动 DePIN 赛道迈向新台阶

背 景 DePIN 是加密货币行业的一个新兴垂直领域,也是本轮牛市最重要的叙事之一。DePIN 通常通过发行和分配代币来激励参与者,用户可以通过提供资源、维护网络、参与治理等方式获得代币奖励并产生直接的经济收益,从而重新洗牌财富分配方…

友思特应用 | 硅片上的光影贴合:UV-LED曝光系统在晶圆边缘曝光中的高效应用

导读 晶圆边缘曝光是帮助减少晶圆涂布过程中多余的光刻胶对电子器件影响的重要步骤。友思特 ALE/1 和 ALE/3 UV-LED 高性能点光源,作为唯一可用于宽带晶圆边缘曝光的 i、h 和 g 线的 LED 解决方案,可高效实现WEE系统设计和曝光需求。 晶圆边缘曝光及处…

GRE VPN和MGRE VPN综合练习

GRE VPN和MGRE VPN综合练习 实验拓扑 实验要求 1、R5为ISP,只能进行IP地址配置,其所有地址均配为公有IP地址; 2、R1和R5间使用PPP的PAP认证,R5为主认证方; R2与R5之间使用ppp的CHAP认证,R5为主认证方; R3与R5之间使用HDLC封装;…

【leetcode】两数相加【中等】(C++递归解法)

总体来说,链表类问题往往是蛮适合用递归的方式求解的 要写出有效的递归,关键是要考虑清楚: 0. return的条件 1. 每步递归的操作,以及何时调用下一步递归 2. 鲁棒性(头,尾结点等特殊情况是否依旧成立&am…

Hadoop学习笔记1

hadoop节点规划 服务器集群规划,6台服务器: 一个主节点 两个从节点 三个工作节点 集群服务器用的都是centos7.9.2009的镜像 一、基础环境 1.1配置阿里云yum源 1.下载repo文件 wget http://mirrors.aliyun.com/repo/Centos-7.repo 2.备份并替换系…

Tensorflow深度学习总结

1.正态分布和高斯分布 正态分布(Normal Distribution)和高斯分布(Gaussian Distribution)实际上指的是同一个概率分布,在统计学和概率论中是最常见和最重要的连续概率分布之一。这两个术语可以互换使用,但…

【Linux】网络通信基础:应用层协议、HTTP、序列化与会话管理

文章目录 前言1. 应用层自定义协议与序列化1.1 什么是应用层?1.2 再谈 "协议"1.3 序列化 和 反序列化 2. HTTP 协议3. 认识 URL(统一资源定位符)4. urlencode和urldecode5. HTTP 协议请求与响应格式5.1 HTTP 请求5.2 HTTP 响应 6. HTTP 的方法6.1 GET 方法…

【BUG】已解决:AttributeError: module ‘sys‘ has no attribute ‘setdefaultencoding‘

AttributeError: module ‘sys‘ has no attribute ‘setdefaultencoding‘ 目录 AttributeError: module ‘sys‘ has no attribute ‘setdefaultencoding‘ 【常见模块错误】 【解决方案】 原因分析: 解决方案: 示例代码: 总结&#…

「JavaEE」Spring MVC:基本操作1

🎇个人主页:Ice_Sugar_7 🎇所属专栏:JavaEE 🎇欢迎点赞收藏加关注哦! 简介 Spring Web MVC 是⼀个 Web 框架,简称为 Spring MVC MVC 是 Model View Controller 的缩写,它是软件工程…

CSS(七)——CSS 列表和CSS Table(表格)

目录 CSS 列表 列表 作为列表项标记的图像 列表 - 简写属性 移除默认设置 所有的CSS列表属性 CSS 表格 表格边框 折叠边框(border-collapse) 表格宽度和高度 表格文字对齐 表格填充 表格颜色 CSS 列表 CSS 列表属性作用如下: 设…

反射型与dom型的xss的区别【源码分析】

反射型 XSS 和 DOM 型 XSS 都属于跨站脚本攻击 (XSS) 的类型,它们的共同点是均能通过注入恶意脚本在用户浏览器中执行,不同点是dom型xss不经过服务器,而反射型是经过服务器的。但是,它们在攻击方式、执行过程和防御措施上有所不同…

基于TensorFlow.js和COCO-SsD模型的实时目标检测网络应用程序

基于TensorFlow.js和COCO-SsD模型的实时目标检测网络应用程序 实现流程 访问用户的桌面录屏并且显示视频源(位置居中)。对视频源进行实时目标检测。在检测到的目标周围绘制边界框,并用它们的类别和检测置信度进行标记。在视频源下方显示一个…

关于SpringBoot项目利用阿里EasyExcel快捷导入Excel文件入库初始化数据的简单实现

一、问题描述 无论新项目还是旧项目,都会出现数据维护、数据初始化等操作,手动录显然很low(领导会骂你),所以一般采用批量导入导出。这里你还在用原始读取excel逐行逐列去读取吗?2024了ok?利用工具是我们cv大师的一贯…

AnyMP4 Data Recovery for Mac v1.5.8免激活版:高效数据恢复新选择

AnyMP4 Data Recovery for Mac是一款专为Mac用户设计的高效数据恢复软件,凭借其强大的功能和简洁的操作界面,为用户提供了快速、安全的数据恢复体验。 该软件支持恢复多种文件类型,包括照片、视频、音频、文档等,无论是常见的图片…

编译Sandboxie源代码

源代码地址: https://github.com/sandboxie-plus/Sandboxie.git 获取下来后,主工程在目录Sandboxie中。 根据官方文档,主要内容有: 安装VS2019 ,必须要有桌面C++开发能力Windows 10 SDK 10.0.19041 必须安装MFC for latest v142 build tools {architecture} 这个组件也需…

Linux中man手册中报No manual entry

在使用man手册的时候会出现这种错误信息: 这种情况是有可能因为没有安装man手册! 只要安装一下man就可以了: yum install man-pages

GLSL教程 第5章:光照和材质

目录 5.1 光照模型基础 5.2 Phong光照模型 5.3 Blinn-Phong光照模型 5.4 Cook-Torrance光照模型 5.5 Lambert光照模型 5.6 材质属性的深入讲解 小结 光照和材质是计算机图形学中至关重要的元素,它们共同决定了渲染图像的视觉效果。光照模型用于模拟光源与物体…