聚企360做的网站做网站和做网页一样吗

张小明 2025/12/30 12:52:36
聚企360做的网站,做网站和做网页一样吗,公司名称大全简单大气易经起名,wordpress 自带搜索——深入Linux操作系统通信机制#xff0c;解析中断、异常与系统调用如何协同工作 上一篇博客#xff1a;Linux进程信号详解-CSDN博客 目录 一、硬件中断#xff1a;处理信号时进程是怎么陷入内核的#xff1f; 1.信号处理流程总结 2.什么是硬件中断#xff1f; 3.操作系…——深入Linux操作系统通信机制解析中断、异常与系统调用如何协同工作上一篇博客Linux进程信号详解-CSDN博客目录一、硬件中断处理信号时进程是怎么陷入内核的1.信号处理流程总结2.什么是硬件中断3.操作系统运行的本质受中断驱动软件二、异常与硬件中断的关系异常的概念异常与中断的区别与联系异常的分类三、系统调用的本质特殊的异常系统调用能实现进程状态切换的原因四、信号的一生总结从硬件中断到用户函数的完整传递链总结一、硬件中断处理信号时进程是怎么陷入内核的1.信号处理流程总结在上一篇博客末尾我们说Linux中信号的处理过程可以用一张图总结如下所示。其中每个绿圈就代表着一次内核状态的切换我们逐一解释①第一次状态切换整个过程从左上角开始进程在运行过程中由于某种原因比如硬件中断或系统调用导致进程状态需要从用户态进入内核态以完成某种任务在陷入内核之前操作系统会保存当前cpu上执行进程的上下文②检查是否有信号需要递达内核在处理完相关任务后在返回用户态之前会顺便检查进程task_struct中的pending表与block表检查是否有可递达的信号③第二次状态切换如果发现有信号需要递达并且还是是用户自定义处理函数那么操作系统会修改进程的执行环境然后返回到用户态跳转到信号处理函数去执行而非继续原来的执行流程④第三次状态切换在执行完自定义函数后会通过sigreturn系统调用再次回到内核态操作系统会在sigreturn系统调用中会恢复之前保存的上下文⑤第四次状态切换最后返回用户态从原来被中断的地方继续向下执行。注意如果信号是默认行为则直接在内核态处理即可无需之后的两次状态切换。上述是上一篇博客的内容总结而本文则从细节出发硬件中断或者系统调用是怎么让进程进入内核态的2.什么是硬件中断我们知道当进程执行IO操作时比如scanf如果外设没有准备好那么该进程就会进入阻塞状态直到外设准备好发出“信号”通知操作系统该进程才会继续向后执行。这里的“信号”是我们熟知的那个信号吗——不是这里的信号实质上被叫做中断号。硬件中断概念由外部硬件设备如键盘、鼠标、网卡、硬盘等通过中断控制器向CPU发出的“信号”表示有事件需要处理。硬件中断的执行过程①外部设备就绪后先向中断控制器发起中断请求②中断控制器根据外部设备信息先CPU发送特定中断号③操作系统收到中断号后先保存当前CPU正在执行进程的上下文然后将自身权限级别从用户态强制切换到内核态并通过中断号在操作系统的中断向量表 IDT 中查找执行相应的处理方法④相关方法执行完毕后恢复之前保存的进程上下文恢复成用户态继续执行代码。硬件中断执行过程是不是有点眼熟发中断与发信号中断号与信号编号cpu执行前需要保存执行上下文……这不就是操作系统中信号的执行过程吗实际上操作系统中的信号机制就是模拟的硬件中断所以信号也可以看作是软件中断机制中的一种。细节提醒中断向量表其实就是操作系统的一部分启动就加载到内存中了中断向量表 IDT可以理解成函数指针数组每个元素都指向一个函数中断号就是数组下标中断控制器的作用是统一收集外设发出的中断请求并转化成相应的中断号注意冯诺依曼体系结构中只允许CPU向外设发送控制信号而硬件中断是通过中断控制器向CPU发送中断请求信号来实现的因此硬件中断是外部设备主动通知CPU的一种机制它并不违反冯·诺依曼体系结构。3.操作系统运行的本质受中断驱动软件一个小疑问操作系统在中断没来的时候可能在干什么呢当Linux操作系统被加载到内存并完成一系列初始化后实际上操作系统就一直处在一个pause( )空闲循环当中。// 早期/简化操作系统的主循环xv6风格 void main_loop(void) { // 初始化 init_hardware(); init_process_table(); // 启动第一个用户进程 start_first_process(); // 主循环等待中断 while (1) { pause(); // 2. 中断发生后CPU自动跳转到中断处理程序 // 3. 中断处理程序执行完毕后返回这里 // 4. 可能进行进程调度 // 检查是否有就绪进程 if (need_reschedule()) { schedule(); } } }操作系统大部分时间都处于pause中即阻塞状态当有中断来临的时候操作系统才会被唤醒执行相关的任务。比如时钟中断时钟源一种集成在CPU内部的硬件它会以特定的频率向CPU发送特定的中断这就是描述CPU运行速度的主频当操作系统检测到时钟中断后就会去检查当前进程的时间片剩余值若不够了就切换进程。所以操作系统本质上就是一个基于中断进行运作的软件。二、异常与硬件中断的关系异常的概念上文说到硬件中断的本质是外设发出中断号cpu根据中断号执行相应的处理函数。可是cpu也是硬件啊那么cpu是否也会出现中断呢实际cpu运行过程中也是会出现中断的不过这个中断并非是由于cpu硬件就绪而是出现运行异常的原因。那么什么是异常呢概念CPU在执行指令过程中检测到的异常情况如除零、缺页、非法指令、调试断点等。cpu也是硬件所以cpu也会有中断并且cpu的中断只会发生在运行出现错误的时候比如除零、野指针解引用、修改常量字符串等。所以有的地方也把异常称为“软中断”因为他是cpu在运行软件过程中出现的运行中断现象结合上述提及的信号的本质是对硬件中断的模仿所以目前我们可以暂时认为软中断包含异常与信号虽然它两的目的不同但处理流程却是一致的都需要进程运行状态的转变。异常与中断的区别与联系相同点①硬件中断和异常处理流程是一样的。它们都会打断当前正在执行的程序用相同的方式保存/恢复上下文并转去执行相应的处理程序中断处理程序或异常处理程序②中断和异常共享一个中断向量表IDT。每个中断或异常都有一个唯一的编号向量号CPU根据这个编号在IDT中找到对应的处理程序。不同点①最大的不同硬件中断由外部设备触发是异步的而异常由CPU内部触发是同步。什么意思呢简单来说就是cpu正在执行当前代码指令时如果出现异常如访问野指针此时的异常与cpu执行是有先后的同步机制是先执行了某条指令代码才导致的异常。而硬件中断则不同当硬件中断发生并通过中断控制器向cpu发送中断号时cpu内部执行的指令代码可能与发生的硬件中断毫无关联比如IO操作请求IO的进程可能早就被切换下去了当键盘发出硬件中断表示自己OK时cpu内部可能正在执行其他进程的代码数据与该硬件中断毫无关联。一句话总结硬件中断与当前指令无关异常与当前指令相关。②触发源不同。硬件中断触发源是外部设备而异常则是CPU内部执行指令时检测到的问题或事件。③返回行为可能不同。硬件中断处理程序返回后一定会继续执行之前被中断的指令而异常处理程序返回后可能重新执行触发异常的指令也可能直接终止程序比如除0异常。一张表总结硬件中断异常触发源外部硬件设备CPU自身执行指令同步性异步随机时间点同步指令执行时可预测性不可预测可重现相同指令返回地址下一条指令触发异常的指令或下一条可屏蔽性可屏蔽除NMI大部分不可屏蔽优先级有硬件优先级立即处理无优先级目的响应外部事件处理指令执行错误或特殊条件例子键盘输入、时钟源除零、缺页、非法指令中断和异常可以看作CPU事件处理机制的两个侧面中断是处理外部外部事件驱动异常是处理内部指令执行驱动但它们都服务于同一个目的让CPU能够响应和处理各种事件维持系统的正确运行。异常的分类异常的本质是CPU 执行指令时触发的内部同步事件它与硬件中断的 “外部异步” 是对立的 Linux 内核将异常分为3 大类它们核心区别在于触发原因和处理后是否能恢复执行1. 故障Fault“可修复的临时错误”核心特点异常触发时指令尚未成功执行内核修复问题后会让 CPU 重新执行该指令用户程序无感知。场景举例缺页异常——进程访问未加载到物理内存的页除零错误Divide Error执行 / 0 操作。处理后行为修复问题后返回原指令重试。2. 陷阱Trap“主动发起的正常通知”核心特点异常是 “故意触发” 的用于实现用户态与内核态的协作如系统调用或调试功能时无错误的。场景举例系统调用用户程序通过int 0x80 / syscall 指令触发陷阱使CPU 切换到内核态执行系统调用函数执行完后返回用户态继续执行下一条指令这也是 “系统调用属于异常” 的核心原因调试断点gdb的break本质是在代码中插入异常指令CPU 执行到该指令时触发陷阱暂停进程并交给调试器处理处理后行为执行完成后返回下一条指令继续执行。3. 终止Abort“致命错误终止进程”核心特点错误严重到内核无法修复必须终止进程或系统避免数据损坏属于 “异常中的最高级别错误”。场景举例CPU 检测到代码访问内存出现错误如空指针解引用触发终止异常导致进程/系统终止。处理后行为无法恢复终止进程 / 系统。补充信号中的abort()函数与 CPU 异常中的终止Abort类型有什么关系吗相同点两者都是不可恢复的终止最终都会导致进程彻底终止。不同点机制、层级不同。CPU 的 Abort 异常是硬件 / 内核级的致命错误直接触发进程 / 系统终止abort()是用户态 C 库函数通过信号机制间接实现 “强制终止进程”最终可能触发内核的终止逻辑但并非直接触发 CPU 的 Abort 异常。所有异常它们都通过内核的中断描述符表IDT获取处理方法并收到操作系统管理的。三、系统调用的本质特殊的异常系统调用早在第一次接触进程就遇见过日常编程中我们也经常使用各种系统调用比如open、write、fork等等。以前我们只知道系统调用是操作系统预留的与外部交接的窗口现在我们来深入了解一下系统调用的本质。为什么要有系统调用操作系统内核是一个精密繁杂但又井井有条的系统它对下管理好计算机的各种软硬件资源对上给用户提供良好安全的服务。操作系统为了实现保护自身的安全与为用户提供服务这两个要求从而折中出了为用户提供接口的方式。根本原因是 Linux 的权限隔离——用户态 / 内核态隔离设计为防止用户程序扰乱操作系统的运行用户态程序的权限设置的极低无法直接操作硬件或核心资源所以想要执行核心资源的操作用户程序得通过系统调用让内核 “代理执行” 高权限操作如读写文件、创建进程让自身始终处于低权限的安全区。系统调用的概念系统调用System Call是用户态程序向 Linux 内核请求核心服务的标准化接口本质是用户态到内核态的权限切换机制是用户态主动触发的内核态调用属于异常的一种但目的是请求服务而非处理错误。系统调用能实现进程状态切换的原因在上文“为什么要有系统调用”中说到系统调用出现的原因是Linux 用户态 / 内核态隔离设计的原因那么系统调用是怎么实现进程状态切换的呢从系统调用的概念可知系统调用本身是属于异常的一种但本身不具备错误信息。也就是说系统调用借助了异常的机制使得进程在执行过程中进行状态转换从用户态到内核态。在介绍硬件中断与信号处理流程时我们都提及了叫做中断向量表IDT而它也是系统调用实现必不可少的数据结构实际上在中断向量表中有一个成员叫做系统调用表sys_call_table这个系统调用表实际本质是个函数指针数组它里面的每一个元素都是操作系统提供的调用接口而它的数组下标被称作系统调用号这个系统调用号每个系统调用都是唯一可标识的。实际上操作系统提供给用户层的只有系统调用号。那在用户层面我们是怎么使用系统调用的呢我们似乎也没用什么系统调用号啊实际上我们使用的的诸如open、close、read、write、fork函数依旧是库函数证据就是在使用它们时必须包含头文件否则如果时操作系统提供的接口我们的程序应该可以直接使用。所以fork()这类封装了系统调用的库函数本质是通过 “陷阱异常” 触发用户态到内核态的切换内核通过中断描述符表IDT找到系统调用处理入口再查系统调用表执行对应的内核函数。综上我们可以得出系统调用实际调用流程①用户态显式调用fork()或其他库函数实际调用的是glibc 库中的封装函数而非直接触发系统调用这一步完全在用户态执行。②fork库函数内部通过指令int 0x80 或者 syscall 触发 “陷阱类异常”主动切换到内核态③操作系统保存cpu上当前用户态执行的上下文随后依据库函数的类型读取系统调用号再通过系统调用表找到实际的系统调用函数④以内核态身份完成系统调用的全部过程⑤恢复上下文切换回用户态继续执行之后的代码。补充内核页表以32位为例进程的地址空间[ 0~3 ]为用户空间在用户态下访问呢而[ 3~4]为内核空间只能在内核态下访问。用户空间通过用户级页表将栈堆数据段、代码段与物理内存映射而内核空间中则是该进程运行将会使用的系统调用。操作系统中所有的进程的内核页表映射到的物理地址都是一样的——即操作系统在物理内存上的地址因为系统调用表属于操作系统的一部分。所以系统调用的过程实际上也是在进程地址空间上进行跳转进而得出进程中的所用函数调用都是在进程地址空间上进行跳转。四、信号的一生总结从硬件中断到用户函数的完整传递链以信号2 SIGINT为例通过键盘向进程发送信号①当进程运行起来后该进程默认是前台进程只有前台进程才能从外设上收到数据②当从键盘上输入ctrl c后键盘通过中断控制器向CPU发出中断号③操作系统检测到中断号保存当前进程的执行上下文切换到内核态通过中断号在中断描述符表 IDT 执行键盘中断的处理函数④操作系统解析该次硬件中断识别为 SIGINT 信号需要向前台进程发送 SIGINT 信号⑤操作系统将SIGINT信号在前台进程的pending表中标记为1处理函数执行完毕⑥操作系统恢复当前进程在cpu的上下文信息准备退出内核态接下来是信号的处理逻辑……⑦操作系统检测到有需要递达的信号若是自定义信号处理则返回到用户态执行处理函数执行完后再通过sigreturn返回内核态恢复前台进程CPU中的运行上下文再次回到用户态继续执行之后的代码指令。如果信号是默认行为则直接在内核态执行默认函数执行完后依实际情况是否需要恢复进程上下文再返回用户态继续执行之后的代码。这里是SIGINT信号默认行为是结束进程所以不用再恢复上下文。总结本文深入解析了Linux操作系统的通信机制重点探讨了硬件中断、异常与系统调用的协同工作原理。硬件中断由外部设备触发通过中断控制器通知CPU处理异常则是CPU执行指令时检测到的同步事件分为故障、陷阱和终止三类。系统调用作为特殊的异常实现了用户态到内核态的切换通过中断向量表和系统调用表完成服务请求。本文还详细阐述了信号处理流程从硬件中断触发到用户态处理函数的完整传递链揭示了操作系统基于中断驱动的运行本质。这些机制共同构成了Linux高效可靠的进程通信与系统调用基础。笔者水平浅薄文中若有错误还万望读者指出共同进步~读完点赞手留余香~
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

有做财经 直播的网站吗wordpress评论显示分页

微软 Edge 浏览器使用指南 在当今数字化时代,浏览器是我们访问互联网的重要工具。微软 Edge 浏览器以其快速的浏览速度和简洁的界面设计,成为了许多用户的选择。本文将详细介绍微软 Edge 浏览器的使用方法,帮助你更好地利用它在互联网上畅游。 1. 打开微软 Edge 浏览器 要…

张小明 2025/12/30 12:52:02 网站建设

专业中山建网站公司网站建设管理情况报告

想象一下,你手头有上千张图片需要为AI训练数据集添加标签,传统的手工操作就像用勺子舀干大海,效率低下且容易出错。这正是BooruDatasetTagManager这款专业的图像标签管理工具要解决的核心问题——通过智能化技术为AI训练数据集提供高效的批量…

张小明 2025/12/30 12:51:27 网站建设

推荐做素菜的网站2345网止导航

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

张小明 2025/12/30 12:50:50 网站建设

做淘宝客网站用什么系统吗西部数码官方网站

Docker 构建中如何高效缓存 PyTorch 依赖加速迭代 在深度学习项目的日常开发与部署中,一个看似简单却频繁发生的痛点正在悄悄吞噬团队的时间:每次修改一行代码,重新构建镜像时却要花五六分钟等待 PyTorch 和 CUDA 相关组件重新下载、编译。这…

张小明 2025/12/30 12:49:39 网站建设

彩票网站制作找谁sem 优化价格

ChatMCP跨平台AI助手全面使用指南 【免费下载链接】chatmcp ChatMCP is an AI chat client implementing the Model Context Protocol (MCP). 项目地址: https://gitcode.com/gh_mirrors/ch/chatmcp 项目概述 ChatMCP是一个基于Model Context Protocol的创新型AI聊天客…

张小明 2025/12/30 12:49:03 网站建设

com域名和网站网上推广哪家好

Uncle小说PC版:从搜索到阅读的全流程解决方案 【免费下载链接】uncle-novel 📖 Uncle小说,PC版,一个全网小说下载器及阅读器,目录解析与书源结合,支持有声小说与文本小说,可下载mobi、epub、txt…

张小明 2025/12/30 12:48:29 网站建设