上海交大陈海波教授、夏虞斌教授领衔巨作上市:《操作系统:原理与实现》
❤️作者主页:小虚竹
❤️作者简介:大家好,我是小虚竹。2022年度博客之星评选TOP 10🏆,Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主🏆,51CTO专家博主🏆
❤️技术活,该赏
❤️点赞 👍 收藏 ⭐再看,养成习惯
PC端左侧加我微信,进社群,有送书等更多活动!
老规矩,文末有送书的规则~~
文章目录
- 创作背景
- 独创性
- 专家推荐
- 作者简介
- 目录
- 丰富的配套资源
- 粉丝福利
- 福利1
- 福利2
- 福利3
《操作系统:原理与实现》
创作背景
操作系统是现代计算平台的基础与核心支撑系统,负责管理硬件资源、控制程序运行、改善人机交互以及为应用软件提供运行环境等。长期以来,我国信息产业处于“缺芯少魂”的状态,作为信息产业之“魂”的操作系统是释放硬件能力、构筑应用生态的基础,也是关键的“卡脖子”技术之一。当前,以华为海思麒麟与鲲鹏处理器、银河飞腾处理器等为代表的ARM平台在智能终端、服务器等应用场景的崛起,以及以开源为特色的RISC-V指令集架构的出现及其生态的蓬勃发展,逐步改变了x86处理器一统天下的局面。因此,需要结合ARM等指令集架构与体系结构来构筑新的操作系统或深入优化现有操作系统,从而充分发挥硬件资源的能力并给用户提供更流畅的体验。
操作系统是一个不断发展的学科。随着云计算、大数据、AIoT等新应用场景的兴起,以及非易失性内存、智能设备、各类加速器等新硬件的广泛应用,我国对操作系统人才的需求进一步扩大。我国对操作系统人才的需求进一步扩大,然而操作系统课程的内容却普遍相对陈旧,许多知识点和教授的方式还停留在上世纪90年代,教学与实际工业界研发脱节严重,高校毕业的应届生难以直接参与操作系统一线研发工作。因此,操作系统的教学亟需与时俱进的改革。首先,操作系统教材需要体现操作系统的核心原理与设计,从而帮助读者建立对操作系统的系统性认识;其次,操作系统教材需要反映国际的研究前沿,当前操作系统技术仍在迅猛发展,很多新的问题随着新处理器、新加速器架构、新应用场景的出现而不断涌现,同样,很多经典的问题也会出现新的解决方法,这些都给操作系统的设计与实现提供了新的思路;最后,操作系统教材需要反映工业界实践,操作系统是一门系统性与实践性非常强的学科,脱离实现来谈设计很容易陷入纸上谈兵的陷阱。当前操作系统领域的前沿研究与工业界实践结合得越来越紧密,在工业界新应用场景与需求的推动下,研究人员将前沿研究应用到工业界实践,再由工业界实践反馈进一步推动前沿研究,从而形成了良好的循环,并且循环的速度越来越快。
独创性
上海交通大学陈海波教授多年以来一直辛勤坚守在操作系统研究与工业实践的第一线,取得了突出的研究成果并对产业界产生了重大影响,是国际计算机领域的知名青年学者。他从2009年开始一直在复旦大学、上海交通大学从事操作系统的教学工作,致力于将前沿研究与工业实践传递到人才培养与课堂教学中去,得到了广大学生的好评,培养了一批又一批在学术界与工业界崭露头角的青年计算机从业者。他和同事夏虞斌教授一起,与上海交通大学并行与分布式系统研究所及领域操作系统教育部工程研究中心的多位老师和博士研究生共同合作,将他们对操作系统的深入理解、多年来的科研体会与一线的教学实践加以总结,在教学实践与反馈的基础上,撰写了这本新的操作系统书籍:**《操作系统:原理与实现》****。**新书主要增强了原理与实现的解耦,先基于“第一性原理”,从具体问题“自然导出”抽象概念,然后再介绍具体实现。在原理方面,增加了微内核设计思想对不同抽象的影响;在实现方面,加强了教材与ChCore代码的对应。在配套实验方面,对实验做了同步调整,增加了在树莓派上实现硬件启动的实验。
作者:陈海波 夏虞斌 等 书号: 978-7-111-72248-9
作为操作系统教材的新尝试,该书融合了作者的教学经验与工业实践经验,以三个“面向”为导向,即面向经典基础理论与方法,面向国际前沿研究,面向最新工业界实践,深入浅出地介绍操作系统的理论、架构、设计方法与具体实现。本书将原理与实现解耦,从具体问题导出抽象概念,然后分析实现方法。全书内容以ARM架构为主,x86架构为辅;以微内核架构为主,同时兼顾宏内核与外核等架构。
除纸质版教材外,本书还配有网络章节、在线社区和课程实验。与本书配套的微内核架构教学操作系统ChCore由上海交通大学并行与分布式系统研究所设计并实现,通过ChCore相关实验,读者可在动手实践中获得第一手经验。
专家推荐
软件是计算系统的“灵魂”,而操作系统则是软件运行和支撑技术的核心,“CPU+操作系统”更是成为信息产业生态的核心、信息时代安全的基石。自1956年第一个实用操作系统诞生以来,操作系统已历经60多年的发展。它的发展一方面伴随着以CPU为代表的硬件及其组成结构的发展,另一方面是为了支持多机、分布式和网络环境,以及满足新型计算模式和新型应用的需求。迄今,以20年左右为周期,操作系统已出现从主机计算时代到个人计算时代,再到移动计算时代的两次重大变迁,每次变迁均涉及计算设备及其用户两方面的数量级的跃升,同时诞生了新的“CPU+操作系统”生态。当然,从技术的本质来看,操作系统“向下管理各种计算资源,向上为应用程序提供运行环境和开发支撑,为用户提供交互界面”的角色定位未变。
当前,万物互联、人机物融合计算的泛在计算时代正在开启。以云计算、大数据、人工智能和物联网等为代表的新型应用场景,多种不同架构的CPU、GPU和加速器、以新型存储、传感设备等为代表的新型硬件,以及嵌入式、移动计算、边缘计算、云计算等不同规模的计算系统,使得操作系统的内涵和外延均发生了重大变化,新一轮的重大变迁正在孕育中。我以为,支撑泛在计算的“泛在操作系统”将成为新的操作系统形态,并催生新的“CPU+操作系统”生态。这一轮变迁将促进新的操作系统研究与实践,在带来新机遇的同时,也会产生新的挑战和更激烈的竞争。
操作系统的发展离不开一代又一代科技工作者的接力付出,因此,操作系统人才培养与操作系统研发处于同样重要的地位!人才培养的根基就在于大学阶段的操作系统教学。考察已有的操作系统教材,面对新的计算时代所带来的新要求和新挑战,它们还存在若干需要改进之处。
首先,在新的泛在计算环境下,主流的计算设备不仅包括x86平台,还包括以ARM为代表的移动计算平台,未来还可能诞生以RISC-V为代表的物联计算平台,计算系统的规模和架构也趋于多样化。因此,需要思考和探索适合新型计算设备和系统的操作系统架构,改变传统操作系统教材以x86指令集为主、面向单机平台、以宏内核架构为实例进行讲解的模式,增加对微内核等新型操作系统架构、分布式和云计算平台、移动计算平台乃至物联计算平台等相关内容的讲解。
其次,随着计算平台与环境的扩展和泛化,在计算机系统上运行的应用形态也趋于多样化,而传统操作系统的教学更多关注底层运行机理,对上层应用的支持关注较少。在拥有众多新的应用场景的新一代计算环境下,操作系统的研究和教学不仅要关注底层设备和资源的管理,以及计算机系统的运行机制,同时也要关注运行在操作系统之上的新型应用的开发、运行和管理支撑平台与技术。
最后,操作系统教学的特点是层次多、内容杂,拥有很多的理论和技术知识点,要想帮助学生全面掌握这些技术的来龙去脉,就必须在操作系统教学中强调理论与实践相结合。早期的操作系统教材更多强调理论与方法,而不讲解实际系统的设计与实现,导致学生无法将所学的知识映射到真实系统,从而不能很好地解决实际问题。而过多关注某个实际系统的实现,则可能将大量的时间花费在各种细节上,导致学生缺乏对全局与原理的整体把握,形成思维定式而难以举一反三。
我非常高兴地看到,陈海波教授等编写的这本教材在上述很多方面进行了新的尝试。其一,本书以ARM64体系结构为主,面向多种体系结构,主要介绍微内核架构,同时兼顾宏内核与外核等架构,体现了操作系统的“现代性”。其二,本书采用“问题驱动”的思路,通过实际问题引出设计原理与实现方法;对同一问题,讨论多种设计的优缺点以及不同的适用场景,使读者不但“知其然”,而且“知其所以然”。其三,本书在平衡理论与实践方面做了很有益的尝试,针对教学与科研的需求,专门设计与实现了一个微内核操作系统,将理论内容与代码实现相融合;在此基础上设计了一套课程实验,读者可以通过动手实践,进一步加深对操作系统的理解。当然,也需指出,本书还只是针对移动计算环境的改进和加强,目前尚未涉及物联计算环境。
本书作者长期从事操作系统领域的研究工作,不仅在操作系统研究领域取得了较为突出的成果,还在工业界开展了深入实践。
本书基于作者多年来在复旦大学和上海交通大学讲授“操作系统”课程的经验,经过提炼与整理,结合操作系统的经典理论、研究前沿和工业界实践,为深入理解操作系统的原理与实现提供了较为翔实的学习资料与实践平台。通过这门课程的学习,学生可以建立起操作系统的完整知识体系,为后续在计算机系统方向进行更深入的学习和研究奠定基础。已有的教学实践表明,这是一本值得高等院校计算机专业学生以及操作系统相关领域的研究人员和工业界实践者学习和参考的书籍。
我国正在全面推进经济和社会的数字化转型、网络化重构和智能化提升,加快建设数字中国、发展数字经济。无疑,操作系统等基础软件的自主可控将是这一深度信息化进程的关键。目前,我国操作系统受制于人的问题仍然非常突出。要想改变这一现状,我们不仅需要把握新的泛在计算时代带来的机遇,应对设计和实现一个完整的操作系统所面临的众多技术挑战,更重要的是要构建操作系统开发和运行的生态,让更多的人融入操作系统生态的开发、维护和发展中。要破解这个难题,需要我国学术界和产业界的协同,需要更多从业人员的参与和合作,更需要源源不断的人才供给,特别是青年学生这个源头。衷心希望本书能够为我国操作系统的教学和人才培养做出实质性贡献。
梅宏中国科学院院士中国计算机学会理事长2022年9月于北京
以5G、人工智能、云计算与物联网等为代表的新一轮科技革命与产业变革正在重新定义我们的信息社会。构建新型信息社会的一个关键因素是坚实的计算机基础设施,这对计算机系统能力培养提出了新的要求,需要广大信息产业从业人员具有良好的系统分析、设计与验证能力。
操作系统被誉为信息产业之魂,它向下承载着对物理硬件的抽象与管理,向上提供并管理着应用的执行环境,是连接硬件与应用的纽带,也是构筑信息社会的基石。数据的爆炸式增长、计算形态的变迁、存储层次的变化、新型硬件的涌现,给操作系统带来了新的机遇与挑战,也使得操作系统的教学成为计算机系统能力培养中的关键。这需要学生不仅能理解操作系统的基础理论,理解真实操作系统的设计与实现,而且能够通过动手实现一个操作系统来获得第一手经验。
本书的作者陈海波教授多年以来一直坚守在操作系统研究与工业实践的第一线,取得了突出的研究成果并对产业界产生了重大影响,是国际计算机领域的知名青年学者。他从2009年开始先后在复旦大学、上海交通大学从事操作系统的教学工作,致力于将前沿研究与工业实践传递到人才培养与课堂教学中,得到了广大学生的好评,培养了一批又一批在学术界与工业界崭露头角的青年计算机从业者。我很高兴看到他和其他作者一道,将他们对操作系统的深入理解、多年来的科研体会与一线的教学实践加以总结,撰写了这本新的操作系统教材。
本书的一个重要特色是较好地结合了经典基础理论方法、国际前沿研究与最新工业界实践。之前的操作系统教材往往将重心放在经典理论方法上,面向x86架构并以宏内核(Monolithic Kernel)为中心,基本上是PC时代前期的内容。本书则重点围绕当前在移动端和服务器端广泛使用的ARM架构进行介绍,而将x86架构作为辅助内容。并且,本书不仅介绍典型 Linux 操作系统的设计与实现,还介绍微内核(Microkernel)、外核(Exokernel)与多内核(Multikernel)等多种操作系统架构。此外,本书还与国际前沿研究紧密结合,介绍了许多面向新型应用、基于新型硬件的新问题与新思路。
本书的另一个重要特色是试图为操作系统的教学与人才培养提供完整的配套体系:在教材之外,作者提供了课程课件、授课视频、课程作业等丰富的教辅材料。作者所在的上海交通大学并行与分布式系统研究所还设计与实现了一个面向教学与科研的微内核架构操作系统ChCore,并提供了一整套课程实验与相应的测试用例,以帮助读者从头实现一个可以运行在ARM开发板上的操作系统。
相信这本书可以为我国基础软件人才培养与计算机系统能力培养提供有力支持!金海华中科技大学教授中国计算机学会会士IEEE Fellow2022年9月
作者简介
目录
目 录丛书序言序言一序言二前言第一部分 操作系统基础第1章 操作系统概述 21.1 简约不简单:从Hello World说起 21.2 什么是操作系统 31.3 操作系统简史 51.3.1 GM-NAA I/O:第一个(批处理)操作系统 51.3.2 OS/360:从专用走向通用 61.3.3 Multics/UNIX/Linux:分时与多任务 61.3.4 macOS/Windows:以人为本的人机交互 71.3.5 iOS/Android:移动互联网时代的操作系统 81.4 操作系统接口 101.5 思考题 12参考文献 12第2章 操作系统结构 132.1 操作系统的机制与策略 142.2 操作系统复杂性的管理方法 152.3 操作系统内核架构 172.3.1 简要结构 182.3.2 宏内核 182.3.3 微内核 202.3.4 外核 222.3.5 其他操作系统内核架构 242.4 操作系统框架结构 262.4.1 Android系统框架 262.4.2 ROS系统框架 282.5 操作系统设计:Worse is better? 292.6 ChCore:教学科研型微内核操作系统 312.7 思考题 32参考文献 32第3章 硬件环境与软件抽象 353.1 应用程序的硬件运行环境 353.1.1 程序的运行:用指令序列控制处理器 363.1.2 处理数据:寄存器、运算和访存 383.1.3 条件结构:程序分支和条件码 433.1.4 函数的调用、返回与栈 463.1.5 函数的调用惯例 503.1.6 小结:应用程序依赖的处理器状态 523.2 操作系统的硬件运行环境 543.2.1 特权级别与系统ISA 543.2.2 异常机制与异常向量表 573.2.3 案例分析:ChCore启动与异常向量表初始化 603.2.4 用户态与内核态的切换 613.2.5 系统调用 643.2.6 系统调用的优化 663.3 操作系统提供的基本抽象与接口 673.3.1 进程:对处理器的抽象 693.3.2 案例分析:使用POSIX进程接口实现shell 703.3.3 虚拟内存:对内存的抽象 733.3.4 进程的虚拟内存布局 753.3.5 文件:对存储设备的抽象 773.3.6 文件:对所有设备的抽象 793.4 思考题 803.5 练习答案 81参考文献 82第4章 虚拟内存管理 834.1 CPU的职责:内存地址翻译 844.1.1 地址翻译 844.1.2 分页机制 854.1.3 多级页表 874.1.4 页表项与大页 914.1.5 TLB:页表的缓存 934.2 操作系统的职责:管理页表映射 964.2.1 操作系统为自己配置页表 964.2.2 如何填写进程页表 974.2.3 何时填写进程页表:立即映射 1014.2.4 何时填写进程页表:延迟映射 1044.2.5 常见的改变虚拟内存区域的接口 1084.2.6 虚拟内存扩展功能 1094.3 案例分析:ChCore虚拟内存管理 1124.3.1 ChCore内核页表初始化 1124.3.2 ChCore内存管理 1154.4 思考题 1184.5 练习答案 119参考文献 121第5章 物理内存管理 1225.1 操作系统的职责:管理物理内存资源 1225.1.1 目标与评价维度 1225.1.2 基于位图的连续物理页分配方法 1235.1.3 伙伴系统原理 1265.1.4 案例分析:ChCore中伙伴系统的实现 1275.1.5 SLAB分配器的基本设计 1315.1.6 常用的空闲链表 1335.2 操作系统如何获得更多物理内存资源 1345.2.1 换页机制 1345.2.2 页替换策略 1375.2.3 页表项中的访问位与页替换策略实现 1405.2.4 工作集模型 1415.2.5 利用虚拟内存抽象节约物理内存资源 1425.3 性能导向的内存分配扩展机制 1435.3.1 物理内存与CPU缓存 1445.3.2 物理内存分配与CPU缓存 1465.3.3 多核与内存分配 1475.3.4 CPU缓存的硬件划分 1475.3.5 非一致内存访问(NUMA架构) 1495.3.6 NUMA架构与内存分配 1505.4 思考题 1515.5 练习答案 152参考文献 152第6章 进程与线程 1546.1 进程的内部表示与管理接口 1546.1.1 进程的内部表示—PCB 1546.1.2 进程创建的实现 1556.1.3 进程退出的实现 1596.1.4 进程等待的实现 1606.1.5 exit与waitpid之间的信息传递 1626.1.6 进程等待的范围与父子进程关系 1646.1.7 进程睡眠的实现 1666.1.8 进程执行状态及其管理 1666.2 案例分析:ChCore微内核的进程管理 1696.2.1 进程管理器与分离式PCB 1696.2.2 ChCore的进程操作:以进程创建为例 1706.3 案例分析:Linux的进程创建 1726.3.1 经典的进程创建方法:fork 1726.3.2 其他进程创建方法 1756.4 进程切换 1796.4.1 进程的处理器上下文 1806.4.2 进程的切换节点 1806.4.3 进程切换的全过程 1816.4.4 案例分析:ChCore的进程切换实现 1826.5 线程及其实现 1916.5.1 为什么需要线程 1916.5.2 用户视角看线程 1926.5.3 线程的实现:内核数据结构 1946.5.4 线程的实现:管理接口 1956.5.5 线程切换 2006.5.6 内核态线程与用户态线程 2006.6 纤程 2026.6.1 对纤程的需求:一个简单的例子 2036.6.2 POSIX的纤程支持:ucontext 2046.6.3 纤程切换 2066.7 思考题 2076.8 练习答案 208参考文献 209第7章 处理器调度 2107.1 处理器调度机制 2107.1.1 处理器调度对象 2117.1.2 处理器调度概览 2117.2 处理器调度指标 2147.3 经典调度策略 2167.3.1 先到先得 2167.3.2 最短任务优先 2187.3.3 最短完成时间优先 2197.3.4 时间片轮转 2207.3.5 经典调度策略的比较 2217.4 优先级调度策略 2227.4.1 高响应比优先 2237.4.2 多级队列与多级反馈队列 2237.4.3 优先级调度策略的比较 2297.5 公平共享调度策略 2297.5.1 彩票调度 2317.5.2 步幅调度 2337.5.3 份额与优先级的比较 2357.6 多核处理器调度机制 2367.6.1 运行队列 2367.6.2 负载均衡与负载追踪 2377.6.3 处理器亲和性 2387.7 案例分析:Linux调度器 2397.7.1 O(N)调度器 2407.7.2 O(1)调度器 2417.7.3 完全公平调度器 2427.7.4 Linux的细粒度负载追踪 2447.7.5 Linux的NUMA感知调度 2457.8 思考题 2467.9 练习答案 247参考文献 248第8章 进程间通信 2498.1 进程间通信基础 2508.1.1 进程间通信接口 2508.1.2 一个简单的进程间通信设计 2538.1.3 数据传递 2558.1.4 通知机制 2578.1.5 单向和双向 2578.1.6 同步和异步 2588.1.7 超时机制 2598.1.8 通信连接 2608.1.9 权限检查 2618.1.10 命名服务 2628.1.11 总结 2638.2 文件接口IPC:管道 2648.2.1 Linux管道使用案例 2658.2.2 Linux中管道进程间通信的实现 2678.2.3 命名管道和匿名管道 2698.3 内存接口IPC:共享内存 2708.3.1 共享内存 2708.3.2 基于共享内存的进程间通信 2728.4 消息接口IPC:消息队列 2738.4.1 消息队列的结构 2748.4.2 基本操作 2748.5 案例分析:L4微内核的IPC优化 2758.5.1 L4消息传递 2758.5.2 L4控制流转移 2778.5.3 L4通信连接 2798.5.4 L4通信控制(权限检查) 2798.6 案例分析:LRPC的迁移线程模型 2808.6.1 迁移线程模型 2818.6.2 LRPC设计 2818.7 案例分析:ChCore进程间通信机制 2838.8 案例分析:Binder IPC 2858.8.1 总览 2868.8.2 Binder IPC内核设计 2868.8.3 匿名共享内存 2908.9 思考题 2918.10 练习答案 292参考文献 292第9章 并发与同步 2949.1 同步场景 2959.1.1 一个例子:多线程计数器 2959.1.2 同步的典型场景 2979.2 同步原语 2999.2.1 互斥锁 3009.2.2 读写锁 3029.2.3 条件变量 3049.2.4 信号量 3139.2.5 同步原语的比较 3169.3 死锁 3189.3.1 死锁的定义 3189.3.2 死锁检测与恢复 3209.3.3 死锁预防 3219.3.4 死锁避免 3229.3.5 哲学家问题 3259.4 活锁 3269.5 思考题 3279.6 练习答案 330参考文献 335第10章 同步原语的实现 33610.1 互斥锁的实现 33610.1.1 临界区问题 33610.1.2 硬件实现:关闭中断 33710.1.3 软件实现:皮特森算法 33710.1.4 软硬件协同:使用原子操作实现互斥锁 34010.2 条件变量的实现 34510.3 信号量的实现 34610.3.1 非阻塞信号量 34710.3.2 阻塞信号量 34810.4 读写锁的实现 35210.4.1 偏向读者的读写锁 35310.4.2 偏向写者的读写锁 35410.5 案例分析:Linux中的futex 35610.6 案例分析:微内核中的同步原语 36010.7 思考题 36110.8 练习答案 364参考文献 364第11章 文件系统 36611.1 基于inode的文件系统 36711.1.1 一个不用inode的简单文件系统 36711.1.2 inode与文件 36811.1.3 多级inode 37011.1.4 文件名与目录 37411.1.5 存储布局 37711.1.6 从文件名到链接 37811.1.7 符号链接(软链接) 38111.2 基于表的文件系统 38211.2.1 FAT文件系统 38211.2.2 NTFS 38611.3 虚拟文件系统 39211.3.1 文件系统的内存结构 39211.3.2 面向文件系统的接口 39411.3.3 多文件系统的组织和管理 39811.3.4 伪文件系统 40011.4 VFS与缓存 40211.4.1 访问粒度不一致问题和一些优化 40211.4.2 读缓存 40311.4.3 写缓冲区与写合并 40311.4.4 页缓存 40311.4.5 直接I/O和缓存I/O 40411.4.6 内存映射 40511.5 用户态文件系统 40511.5.1 为什么需要用户态文件系统 40611.5.2 FUSE 40611.5.3 ChCore的文件系统架构 40711.6 思考题 41011.7 练习答案 411参考文献 412第12章 文件系统崩溃一致性 41412.1 崩溃一致性 41512.2 同步写入与文件系统一致性检查 41712.2.1 同步写入 41712.2.2 文件系统一致性检查 41812.2.3 fsck的局限和问题 42012.3 原子更新技术:日志 42112.3.1 日志机制的原理 42112.3.2 日志的批量化与合并优化 42312.3.3 日志应用实例:JBD2 42312.3.4 讨论和小结 42712.4 原子更新技术:写时拷贝 42712.4.1 写时拷贝的原理 42812.4.2 写时拷贝在文件系统中的应用 42912.4.3 写时拷贝的问题与优化 43012.4.4 讨论和小结 43012.5 Soft updates 43112.5.1 Soft updates的三条规则 43212.5.2 依赖追踪 43412.5.3 撤销和重做 43512.5.4 文件系统恢复 43712.5.5 讨论和小结 43712.6 案例分析:日志结构文件系统 43812.6.1 基本概念与空间布局 43812.6.2 数据访问与操作 43912.6.3 基于段的空间管理 44112.6.4 检查点和前滚 44412.6.5 小结 44612.7 思考题 446参考文献 447第13章 设备管理 44913.1 硬件设备基础 45013.1.1 总线互联 45113.1.2 设备的硬件接口 45213.1.3 几种常见的设备 45213.2 设备发现与交互 45713.2.1 CPU与设备的交互方式概览 45813.2.2 设备发现 46013.2.3 设备寄存器的访问 46313.2.4 中断 46613.2.5 直接内存访问 47013.3 设备管理的共性功能 47513.3.1 设备的文件抽象 47513.3.2 设备的逻辑分类 47713.3.3 设备的缓冲区管理 47813.3.4 设备的使用接口 48213.4 应用I/O框架 48413.4.1 应用层I/O库 48413.4.2 用户态I/O 48613.5 案例分析:Android操作系统的硬件抽象层 48813.6 思考题 49013.7 练习答案 491参考文献 491第14章 系统虚拟化 49314.1 系统虚拟化技术概述 49414.1.1 系统虚拟化及其组成部分 49414.1.2 虚拟机监控器的类型 49514.2 “下陷-模拟”方法 49614.2.1 版本零:用进程模拟虚拟机内核态 49714.2.2 版本一:模拟时钟中断 49814.2.3 版本二:模拟用户态与系统调用 50014.2.4 版本三:虚拟机内支持多个用户态线程 50114.2.5 版本四:用线程模拟多个vCPU 50214.2.6 小结 50414.3 CPU虚拟化 50514.3.1 可虚拟化架构与不可虚拟化架构 50514.3.2 解释执行 50614.3.3 动态二进制翻译 50714.3.4 扫描-翻译 50814.3.5 半虚拟化技术 50914.3.6 硬件虚拟化技术 50914.3.7 小结 51214.4 内存虚拟化 51314.4.1 影子页表机制 51414.4.2 直接页表映射机制 51714.4.3 两阶段地址翻译机制 51814.4.4 换页和气球机制 52114.4.5 小结 52314.5 I/O虚拟化 52314.5.1 软件模拟方法 52414.5.2 半虚拟化方法 52614.5.3 设备直通方法:IOMMU和SR-IOV 52814.5.4 小结 53114.6 中断虚拟化 53214.7 案例分析:QEMU/KVM 53414.7.1 KVM API和一个简单的虚拟机监控器 53414.7.2 KVM和QEMU 53614.7.3 KVM内部实现简介 53814.8 思考题 539参考文献 540缩略语 541在线章节第二部分 操作系统进阶第15章 多核与多处理器第16章 可扩展同步原语第17章 多场景文件系统第18章 存储系统第19章 轻量级虚拟化第20章 网络与系统第21章 操作系统安全第22章 操作系统调测第23章 形式化证明第24章 云操作系统第三部分 ChCore课程实验实验1:机器启动实验2:内存管理实验3:进程与线程、异常处理实验4:多核、多进程、调度与IPC实验5:文件系统与shell实验6:设备驱动与持久化实验7:进阶实践
丰富的配套资源
本书在“好大学在线”设置了MOOC课程;建设了课程网站,提供了与课程教学配套的讲义PPT与授课视频;搭建了在线社区,供大家讨论与答疑。
扫码备注“操作系统”,加入本书读者交流群。
传送门:–》
粉丝福利
福利1
虚竹哥直接送2本好书,参与好评送书~
-
参与好评送书:随机抽取2位幸运读者,各送一本《操作系统:原理与实现》
-
统计截止时间:2023/03/03 20:00:00
-
请中奖的读者统计截止时间过后7天内私信虚竹哥收货地址,过期奖励作废哈!
福利2
来虚竹哥送书的朋友圈点赞,点赞送书~
虚竹哥开放好友位 :传送门–》
- 第8个,第64个好友点赞的,2位幸运读者,各送一本《操作系统:原理与实现》
- 统计截止时间:2023/03/03 20:00:00
- 请中奖的读者统计截止时间过后7天内私信虚竹哥收货地址,过期奖励作废哈!
福利3
没抽中也没事,这边也可以直接到京东上购买,有优惠。
传送门–》
我是宠粉的虚竹哥,请继续支持我,哈哈哈~
相关文章:
上海交大陈海波教授、夏虞斌教授领衔巨作上市:《操作系统:原理与实现》
❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。2022年度博客之星评选TOP 10🏆,Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作…...
dpi数据接入shell脚
原文:dpi数据接入shell脚本_weixin_34416754的博客-CSDN博客 ##############从ftp服务器拿数据文件 #!/bin/bash #获取感知优良率DPI数据 #DCN服务器信息 uSichuan pS988188# ip137.192.5.53 #获取日期,根据日期抓取文件 Tdate -d "3 days ago&…...
Easyrecovery数据恢复软件工作原理及使用介绍教程
Easyrecovery是一款强大的数据恢复软件,它专门解决磁盘数据恢复问题。在计算机世界里,数据丢失经常是一件令人头疼的事情,但是有了Easyrecovery,您可以放心大胆地享受数据备份和恢复的乐趣。EasyRecovery使用Ontrack公司复杂的模式…...
【面试题】社招中级前端笔试面试题总结
大厂面试题分享 面试题库后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库typeof null 的结果是什么,为什么?typeof null 的结果是Object。在 JavaScript 第一个版本中,所有值都存储在…...
设备运行状况不能远程手机查看。难道就妥协吗?为何不试试这个办法
一、背景 随着国家经济结构逐步调整,纺织行业自动化、智能化水平逐步提高,业内竞争程度也将加大;整个市场变化快,并呈现出智能化、通用化、网络化、复杂化的新发展趋势。客户订单小批量、个性化、快速交货的特点越来越明显&#…...
重新认识 Java 中的内存映射(mmap)
mmap 基础概念 mmap 是一种内存映射文件的方法,即将一个文件映射到进程的地址空间,实现文件磁盘地址和一段进程虚拟地址的映射。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页到对应的文…...
224. 基本计算器
224. 基本计算器给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。 示例 1:输入:s "1 1"输出:2示例 2&#…...
微信小程序通过 node 连接 mysql——方法,简要原理,及一些常见问题
前言 博主自己在22年夏天根据课程要求做了一个小程序连接阿里云服务器的案例,在最近又碰到了相应的需求。 原参考文章:微信小程序 Node连接本地MYSQL_微信小程序nodejs连接数据库_JJJenny0607的博客-CSDN博客 ,还请多多支持原作者! 第二次…...
uni-app项目搭建和代码托管
文章目录一、项目搭建步骤一、HBuilder X 创建uniapp项目步骤二、开启微信小程序服务端口步骤三、把项目运行到微信小程序步骤四、解决警告二、使用Git管理项目2-1、本地管理2-2、托管到码云一、项目搭建 步骤一、HBuilder X 创建uniapp项目 步骤二、开启微信小程序服务端口 步…...
win10+python3.6+cuda9+pytorch1.1.0安装
为了让torch可以使用显卡GPU加速,需要安装对应版本的cudatoolkit和pytorch。这里我的nvidia显卡驱动是9.1版本,只能安装cudatoolkit9。 一般支持gpu加速的显卡大部分都是英伟达nvidia系列,都自带了nvidia驱动,所以不需要安装nvidi…...
【2023】某python语言程序设计跟学第二周内容
本文说明: 案例内容为北理工python语言程序设计课程,如有不妥请联系! 目录蟒蛇绘制案例:执行结果:代码分析:举一反三:绘制一个五角星图案执行结果:turtle库根据案例简单说明…...
spring源码篇——BeanDefinition的注册
spring-framework 版本:v5.3.19 文章目录注解方式(AnnotationConfigApplicationContext)AnnotationConfigApplicationContext#registerAnnotatedBeanDefinitionReader#doRegisterBeanBeanDefinitionRegistry#registerBeanDefinitionAnnotatio…...
virtualbox7虚拟机中安装苹果macOS big sur系统详细教程
第1步,在 Windows 10/11 PC 上启用虚拟化。 现在的电脑一般都默认开启虚拟化技术了。 如果你遇到一些报错,比如收到错误消息“无法在虚拟机上打开会话”,可以查看 如果没有遇到问题,可以直接进入到第二步。 第2步,在…...
用spectralayers 简单去一下人声做个伴奏
最近有个同事说有个工作要一个歌的伴奏不会下载问我能不能给下一个。问题是我五音不全,也不咋关注伴奏这方面的事儿,然后巧了,当天晚上就有个网上的大哥在群里聊天的时候说有个去人声比较给力的软件,我马上给要来了。 软件叫啥sp…...
高峰对话|深度探讨「多云与边缘」
2022 年 12 月,分析师 Zeus Kerravala 与 VMware 通信运营商和边缘事业部高级副总裁兼总经理 Sanjay Uppal 进行非常有启发性的谈话,分享了科技行业领导者的见解。 二位主要围绕以下主题进行探讨: 📍 如何定义多云,以…...
开发手册——一、编程规约_2.常量定义
这篇文章主要梳理了在java的实际开发过程中的编程规范问题。本篇文章主要借鉴于《阿里巴巴java开发手册终极版》 下面我们一起来看一下吧。 1. 【强制】不允许任何魔法值(即未经定义的常量)直接出现在代码中。 反例:String key "Id#…...
Sandstorm 建设者亮点——2023 年 2 月
隆重推出 Sandstorm 建设者亮点——2023 年 2 月版,这是由最厉害的 Sandstorm 社区制作的独一无二的 NFT 系列。 从突破性的兔子机器人到神奇的蒸汽朋克海盗船,Sandstorm 建设者亮点 NFT 系列展示了一系列独一无二的创作。 19 项新资产将添加至 Sandstor…...
MyBatis快速入门
创建表(自行完成)创建模块,引入坐标(1).进入mybatis官网:MyBatis中文网按步骤进行添加坐标先添加mybatis依赖然后手动添加mysql驱动junit单元测试坐标:logback坐标:用的时候直接复制…...
Mysql的一些提权方式(mysql提权、UDF)
目录 bash命令提权 必要条件 实验 UDF提权 什么是UDF 必要条件 实验 手动测试...
【2023】DevOps、SRE、运维开发面试宝典之Docker相关面试题
文章目录 1、docker的工作原理是什么2、docker的组成包含哪几大部分3、讲一下镜像的分层结构以及为什么要使用镜像的分层结构?4、简单描述一下Dockerfile的整个构建镜像过程?5、Docker的四种网络类型?6、Docker跨宿主机通讯的方式1、docker的工作原理是什么 docker是一个Cl…...
圣杯布局的实现方式
1.什么是圣杯布局? 左右盒子固定,中间盒子自适应 2.实现方式 (1)flex布局 思路:左右盒子给固定的宽高,中间盒子flex:1 <!DOCTYPE html> <html lang"en"> <head> <met…...
RecastDemo用法
这里写自定义目录标题recastnavigation介绍recastnavigation的内容RecastDemo安装RecastDemo介绍可配置参数合理的创建标题,有助于目录的生成如何改变文本的样式生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个…...
IIC总线式驱动开发(mpu6050)(二)
目录 六、I2C总线二级外设驱动开发方法 七、I2C总线二级外设驱动开发之名称匹配 1. i2c_register_board_info 2. i2c_new_device:明确二级外设地址的情况下可用 3. i2c_new_probed_device 八、I2C总线二级外设驱动开发之设备树匹配 六、I2C总线二级外设驱动开…...
盘点一下那些远程办公的神仙公司
其实远程办公已经有50多年的历史了,这几年,这种工作方式越来越受到大家的喜欢,对于员工来说,工作效率可以大幅提高,节省下来的通勤时间和成本,有更多的时间花在工作上。可以更好的平衡工作与生活。对于公司…...
Spring Cloud Alibaba全家桶(四)——微服务调用组件Feign
前言 本文小新为大家带来 微服务调用组件Feign 的相关知识,具体内容包含什么是Feign,Spring Cloud Alibaba快速整合OpenFeign,Spring Cloud Feign的自定义配置及使用(包括:日志配置、契约配置、自定义拦截器实现认证逻…...
安装pytorch
一、在anaconda中创建虚拟环境 打开Anaconda Prompt创建一个虚拟环境。比如要创建一个名字为pytorch的虚拟环境,可以如下输入。其中python3.7指定该虚拟环境的python版本号。 conda create -n pytorch python3.7 二、进入新创建的虚拟环境。 创建好虚拟环境后&a…...
自动化测试 Appium之Python运行环境搭建 Part2
环境部署 1、安装Android SDK 安装好后,配置ANDROID_HOME环境变量,设置为Android SDK安装路径(例中:D:\Program Files (x86)\Android\android-sdk) 2、安装其它SDK相关软件包 安装好Android SDK后,选择打开Android SDK Manager…...
LeetCode 2 - 两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开…...
用Python实现九九乘法表的几种方式,最简单只需一行代码
前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 我们在学习Python的过程中需要不断的积累和练习,这样才能够走的更远, 今天一起来学习怎么用Python写九九乘法表~ 更多教程源码资料电子书: 点击此处跳转文末名片获取 第一种方法、for-for 代码&…...
入职外包三个月,我提桶跑路了
有一种打工人的羡慕,叫做“大厂”。 真是年少不知大厂香,错把青春插稻秧。 但是,在深圳有一群比大厂员工更庞大的群体,他们顶着大厂的“名”,做着大厂的工作,还可以享受大厂的伙食,却没有大厂…...
网站建设后期费用/搜索优化网络推广
在 Android 中,Activity 和 Fragment 这类 UI 组件会被系统销毁或重建,未特殊处理的 UI 数据将会丢失。以往处理这类问题时,会使用 onSaveInstanceState() 保存 UI 数据,在 onCreate() 方法里恢复 UI 数据,但是数据的大…...
青岛工程建设管理信息网站/英文谷歌优化
碱性食物_百度百科...
找人帮你做PPT的网站/提高工作效率整改措施
oracle的cursor 转自:http://www.cnblogs.com/shengtianlong/archive/2010/12/31/1922767.html 1,什么是游标? ①从表中检索出结果集,从中每次指向一条记录进行交互的机制。 ②关系数据库中的操作是在完整的行集合上执行的。 …...
建设安全工程信息网站/商业软文案例
使用React来构建web应用,每个页面都将是多个组件组成,并且相互嵌套来构成的,接下来就学习下组件的嵌套。 一、组件嵌套: 背景交代: 1、创建一个html,包含引用的相关js、需要被渲染的div; 2、…...
龙华新区网站制作/东莞seo优化
sorry...
网站建设制作视频教程/计算机培训班
金山毒霸-垃圾清理-单文件封装,清洁洁癖的爱好! 实话,金山的软件确实不错。展望金山可以在软件行业,做出让世界都使用的。为国人扛起一片天 下载地址: http://pan.baidu.com/s/1dFa7GdV...