diff options
Diffstat (limited to '2025')
| -rw-r--r-- | 2025/11/27/二〇二五年十一月二十七日/index.html | 5 | ||||
| -rw-r--r-- | 2025/12/02/“缺页”-和-“中断”-术语上的区别/index.html | 314 |
2 files changed, 319 insertions, 0 deletions
diff --git a/2025/11/27/二〇二五年十一月二十七日/index.html b/2025/11/27/二〇二五年十一月二十七日/index.html index a30d522e..5c496605 100644 --- a/2025/11/27/二〇二五年十一月二十七日/index.html +++ b/2025/11/27/二〇二五年十一月二十七日/index.html @@ -215,6 +215,11 @@ <nav class="post-nav"> <div class="prev-item"> + <div class="icon arrow-left"></div> + <div class="post-link"> + <a href="/2025/12/02/%E2%80%9C%E7%BC%BA%E9%A1%B5%E2%80%9D-%E5%92%8C-%E2%80%9C%E4%B8%AD%E6%96%AD%E2%80%9D-%E6%9C%AF%E8%AF%AD%E4%B8%8A%E7%9A%84%E5%8C%BA%E5%88%AB/">Prev</a> + </div> + </div> <div class="next-item"> diff --git a/2025/12/02/“缺页”-和-“中断”-术语上的区别/index.html b/2025/12/02/“缺页”-和-“中断”-术语上的区别/index.html new file mode 100644 index 00000000..c353c0b7 --- /dev/null +++ b/2025/12/02/“缺页”-和-“中断”-术语上的区别/index.html @@ -0,0 +1,314 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="UTF-8"> +<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> +<meta http-equiv="X-UA-Compatible" content="ie=edge"> + + <meta name="author" content="韩暮秋"> + + + <meta name="subtitle" content="暮秋小屋"> + + + <meta name="description" content="这里是暮秋小屋,思念和灵感的寄存处"> + + + <meta name="keywords" content="韩暮秋,MuqiuHan,'Muqiu Han', 'muqiu han', muqiuhan"> + + + + + <title> + + “缺页” 和 “中断” 术语上的区别 | + 暮秋小屋 + </title> + + + + <link rel="icon" href="/favicon.ico"> + + + <style> + @font-face { + font-family: CarroisSong; + src: url('/fonts/CarroisSong.ttf'); + } + </style> + + + + <!-- stylesheets list from _config.yml --> + + <link rel="stylesheet" href="/css/style.css"> + + + + + + <!-- scripts list from _config.yml --> + + <script + src="/js/menu.js"></script> + + + + + + <script + src="https://polyfill.alicdn.com/polyfill.js?features=es6"></script> + <script + id="MathJax-script" + async + src="https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/mathjax/3.2.0/es5/tex-mml-chtml.js"></script> + + + + + <meta name="generator" content="Hexo 6.3.0"></head> + <body> + <div class="mask-border"> + </div> + + <div class="wrapper"> + + <div class="header"> + <div class="flex-container"> + <div class="header-inner"> + <div class="site-brand-container"> + <a href="/"> + + 暮秋小屋 + + </a> + </div> + <div id="menu-btn" class="menu-btn" onclick="toggleMenu()"> + 菜单 + </div> + <nav class="site-nav"> + <ul class="menu-list"> + + + <li class="menu-item"> + <a href="/"> + 主页 + </a> + </li> + + + + <li class="menu-item"> + <a href="/categories/gallery/"> + 日记本 + </a> + </li> + + + + <li class="menu-item"> + <a href="/tags/Medicine/"> + 医学 + </a> + </li> + + + + <li class="menu-item"> + <a href="/tags/Technique/"> + 计算机/互联网 + </a> + </li> + + + + <li class="menu-item"> + <a href="/tags/Life/"> + 生活 + </a> + </li> + + + + <li class="menu-item"> + <a href="/archives"> + 全部 + </a> + </li> + + + + <li class="menu-item"> + <a href="/about"> + 关于 + </a> + </li> + + + + <li class="menu-item search-btn"> + <a href="#">Search</a> + </li> + + </ul> + </nav> + </div> + </div> +</div> + + <div class="main"> + <div class="flex-container"> + <article id="post"> + + + <div class="post-head"> + <div class="post-info"> + <div class="tag-list"> + + + <span class="post-tag"> + <a href="/tags/Technique/"> + Technique + </a> + </span> + + + </div> + <div class="post-title"> + + + “缺页” 和 “中断” 术语上的区别 + + + </div> + <span class="post-date"> + Dec 2, 2025 + </span> + </div> + <div class="post-img"> + + <div class="h-line-primary"></div> + + </div> +</div> + <div class="post-content"> + <p>在计算机体系结构语境中,术语“异常”与“中断”的混用,源于硬件事件分类与操作系统实现策略的视角差异。这种差异并不代表定义不严谨,而反映了从底层硬件信号到上层软件管理的不同抽象层次。关键在于区分事件的内在性质与操作系统对其的处理模型。</p> +<p>从硬件与架构的视角看,“异常”和“中断”有明确界定。异常是同步事件,由当前正在执行的指令直接触发,其发生时刻可精确复现。非法操作码、除零、地址越界等均属此类,因为它们是执行流本身导致的错误或特殊情况。中断则是异步事件,由外部硬件设备在指令执行的任意时刻触发,与当前指令流无关,如时钟中断、I/O完成中断。这种分类基于事件的来源和时序特性,是CPU设计的基础。</p> +<p>缺页事件的性质符合硬件对异常的定义:当一条内存访问指令(如load或store)试图访问的虚拟地址页面不在物理内存中时,由内存管理单元同步检测并触发该事件。从CPU角度看,这是一条指令执行过程中产生的同步故障,本质上是一个“缺页异常”。</p> +<p>因为操作系统在处理缺页时,借用了中断的处理框架,因此常被称为 “缺页中断”。因为现实是:缺页处理过程耗时极长,涉及磁盘I/O。若采用处理一般异常的简单模型(即陷入内核后在同一执行上下文中直接处理直至完成),CPU将在等待磁盘的数百毫秒内被完全阻塞,导致资源利用率极低。</p> +<p>因此,操作系统将缺页处理设计为一个复杂的状态管理过程。其伪流程如下:</p> +<ol> +<li>CPU执行访存指令,触发缺页异常,硬件自动保存当前上下文并跳转到操作系统预设的异常处理入口。</li> +<li>操作系统内核诊断出缺页原因,确认需要从磁盘调入页面。</li> +<li>内核将此进程标记为“等待I/O”状态,并将其从运行队列移出。</li> +<li>内核调用磁盘驱动程序,发起读盘请求,然后立即执行调度程序,切换到另一个就绪进程运行。此时,对原进程而言,其执行流被“中断”并挂起。</li> +<li>磁盘I/O完成后,磁盘控制器产生一个硬件中断。中断处理程序收到页面数据,将其载入物理内存,并更新页表。</li> +<li>内核将之前等待的进程重新标记为就绪状态。在未来某个时刻,调度程序会再次选中该进程,并通过恢复其之前保存的上下文,让导致缺页的那条指令重新执行,此时便能成功访问内存。</li> +</ol> +<p>这一流程的关键在于第 4 步:操作系统主动放弃当前进程的CPU使用权,去执行其他任务。这种行为模式与响应异步硬件中断后执行调度在逻辑上同构。虽然事件源头是同步异常,但操作系统利用中断处理的可抢占和可调度特性,实现了对漫长I/O等待期的资源复用。因此,“缺页中断”这一术语,精准地描述了操作系统 “将其作为一个可延迟调度的事件进行管理” 的软件机制,而非否定其硬件层面的同步异常本质。</p> +<hr> +<p>有人会觉得:“相当于一个人本来应该姓王,结果直接姓林,然后来句合理,没有前因后果,就像数学分成正数负数,结果给 3 取名负三,然后来句,这是正数”</p> +<hr> +<p>在静态、单一层次的分类体系下,将一个A类事物命名为B类,确实构成矛盾。然而,计算机系统是一个多层级协同运行的动态模型,其术语的最终有效性,不仅在于标识事件的 <strong>静态起源</strong> , 更在于描述其在系统 <strong>动态运行中引发的控制流路径和资源管理行为</strong>。</p> +<p>这个比喻可以引申为:一个人根据其血缘被赋予 “王” 姓(硬件本质),但在特定的工作组织(操作系统)中,因其担任的职能、遵循的流程与 “林” 姓团队完全相同,故在日常运营中被纳入 “林” 团队进行调度和管理。组织内部称其为 “林工”,并非否认其血缘,而是为了精确匹配管理流程,实现最高运作效率。</p> +<p>“缺页” 的命名问题正遵循此逻辑。硬件按起源将其分类为 <strong>同步异常(姓王)</strong> ,但操作系统发现,处理此事件所需的行为模式——保存现场、可能挂起当前任务、启动异步I/O、调度其他任务、在事件完成后通过恢复现场来继续——与处理 <strong>异步中断(姓林)</strong> 的完整行为模式完全一致。这套行为模式的关键特征是 <strong>可阻塞与可调度性</strong> 。</p> +<p>为了调用这套成熟、高效的中断管理框架(包含调度器、等待队列、I/O完成回调等复杂机制),操作系统在软件层面将其标识为“中断”。这并非分类错误,而是在更高抽象层上,根据 <strong>行为模型</strong> 而非 <strong>触发原因</strong> 进行的重新映射。其因果链条是清晰且自洽的:</p> +<ol> +<li><strong>因</strong>:缺页由指令同步触发(硬件异常)。</li> +<li><strong>策略决策</strong>:因其处理必然涉及漫长等待,操作系统决定采用异步、可调度的方式处理它。</li> +<li><strong>技术实现</strong>:实现此策略的最直接路径,是复用已为硬件中断设计好的、具备异步抢占与任务调度能力的中断管理和调度框架。</li> +<li><strong>命名结果</strong>:该事件在处理流程上被纳入“中断”路径,故在操作系统软件范畴内,称其为“缺页中断”。这个术语准确指向了“通过中断管理框架处理的缺页异常”这一复杂概念。</li> +</ol> +<p>这不同于给数字 3 取名“负三”。它更接近于:发现一种具有正数性质的粒子,但其在磁场中的偏转行为与负电荷粒子完全相同。物理学家为便于利用已有的、成熟的“负电荷粒子”行为方程进行计算和预测,可能会在动力学分析中临时称其为“负粒子”,同时明确其静态性质为正。这里的命名服务于特定的分析模型和计算框架。</p> +<p>所以 “缺页中断”这一术语的严谨性,不在于它否定了硬件的分类,而在于它精确地描述了操作系统层面所采用的 <strong>处理模型</strong> 。它不是一个分类学错误,而是一个基于行为相似性,为了实现高效资源管理而采用的、精确的工程学术语。它同时指明了事件的起源(异常)和处理的方式(中断框架),是多层次系统设计中一种高效而准确的表述。</p> + +</div> + +<script> + window.onload = detectors(); +</script> + <div class="post-footer"> + <div class="h-line-primary"></div> + <nav class="post-nav"> + <div class="prev-item"> + + </div> + <div class="next-item"> + + <div class="icon arrow-right"></div> + <div class="post-link"> + <a href="/2025/11/27/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%BA%94%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%83%E6%97%A5/">Next</a> + </div> + + </div> + </nav> +</div> + + + <div class="post-comment"> + + + + + + + +</div> + + +</article> + </div> + </div> + + <div class="footer"> + <div class="flex-container"> + <div class="footer-text"> + + + 韩暮秋 | + + + 希望路过的人可以添点柴火让这里暖和点 + + </div> + </div> +</div> + + </div> + + + <div class="search-popup"> + <div class="search-popup-overlay"> + </div> + <div class="search-popup-window" > + <div class="search-header"> + <div class="search-input-container"> + <input autocomplete="off" autocapitalize="off" maxlength="80" + placeholder="Search Anything" spellcheck="false" + type="search" class="search-input"> + </div> + <div class="search-close-btn"> + <div class="icon close-btn"></div> + </div> + </div> + <div class="search-result-container"> + </div> + </div> +</div> + +<script> + const searchConfig = { + path : "/search.xml", + top_n_per_article: "1", + unescape : "false", + trigger: "auto", + preload: "false" + } +</script> +<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/search.js"></script> +<script src="/js/search.js"></script> + + + + </body> +</html> |
