搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
自研操作系统--DIM-SUM设计与实现
0.00     定价 ¥ 129.00
图书来源: 浙江图书馆(由浙江新华配书)
此书还可采购24本,持证读者免费借回家
  • 配送范围:
    浙江省内
  • ISBN:
    9787121391866
  • 作      者:
    作者:谢宝友|责编:张春雨
  • 出 版 社 :
    电子工业出版社
  • 出版日期:
    2020-08-01
收藏
内容介绍

本书详细阐述了自研操作系统DIM-SUM的设计与实现,提供了在ARM 64虚拟机中动手实践DIM-SUM及参与DIM-SUM开发的方法。针对DIM-SUM操作系统的同步与互斥、调度、内存、中断与定时器、块设备、文件系统模块进行了详细的分析,包括这些模块的设计思路、数据结构定义、关键API说明。最重要的是,本书对各个模块的主要函数进行了逐行解释,有助于读者深刻理解如何实现一款实用的操作系统。最后,本书还展望了接下来10年DIM-SUM操作系统的发展目标,希望最终其能发展为可以在服务器系统、桌面系统中实用的自研操作系统。

本书适合于对操作系统研发有兴趣的大学生、研究生,以及从事操作系统相关工作的一线工程师。对于Linux操作系统工程师,本书也极具实用价值。


展开
精彩书评

自研操作系统是一件极富挑战性,也很难成功的事情,宝友同学敢于在这方面进行积极有益的尝试,值得支持和鼓励。加油,努力!

 

阿里巴巴经济体技术委员会主席、阿里云总裁、阿里巴巴合伙人 张建锋(行癫)

 

DIM-SUM自研操作系统是作者多年研究成果的结晶,是在现有操作系统生态中增加中国元素的艰难探索,初步具备了操作系统的雏形,并在ARM 64虚拟机中进行了验证。

 

本书深入浅出,不但是对DIM-SUM涉及的技术、原理、实现方法的有效提炼,而且也有助于促使DIM-SUM在后续发展中成为可用的、具有丰富生态的、真正的操作系统。

 

Windows体系和UNIX/Linux体系前期均由个人或团队创新提出,在各研究机构、企业、组织积极持续的投入中,通过多年的发展,已发行了针对不同场景与应用的版本,形成了稳定的生态环境。DIM-SUM依然延续这样的创新道路,披荆斩棘,雏形已成。通过本书的出版,望国内的软硬件厂商、技术爱好者等能够研究它、发展它、扶持它,给创新以希望,给产业以梦想。

 

自研操作系统,任重而道远,望DIM-SUM自研操作系统能破冰而行。

 

工业和信息化部软件与集成电路促进中心副主任 刘龙庚

 

操作系统是帮助人类操作IT、CT设备的系统,也是企业、国家操控IT、CT生态链的系统。因为操作系统连接着底层的硬件、顶层的最终用户,以及中间的应用开发者、服务提供者,所以一个操作系统的成功及其可持续发展既需要创新的技术,也需要顺应市场、上下游生态环境的商业运作,非常复杂和困难,充满了不确定性。但可以确定的是,要想在当下及未来的智能时代获得突破性发展、实现科技自由,就必须从最根本做起。千里之行,积于跬步,谋事在人,成事则需要天时、地利、人和诸多因素聚合。

 

谢宝友在十多年前放弃了高薪工作,带着自己尝试开发的操作系统原型,决然投身到操作系统研发工作中,虽几经波折,仍痴心不改,践行梦想。同样,也有越来越多的团队、技术人员投入操作系统领域。

 

技术在进步,团队在成长,环境在变化,机会属于有准备的人。

 

OPPO操作系统领域专家、基础软件平台总监  钟卫东

 

 

与谢宝友共事几年,他在操作系统上的专业程度令人佩服。研发操作系统是一个非常复杂的系统工程,能长期坚持研发,这本身就值得我们敬佩。特别希望能在不远的将来,DIM-SUM自研操作系统可以得到实际应用,相信你!

 

阿里巴巴研究员 杨华(道延)

 

 

 

谢老师在新书中不仅展现了超凡的技术实力,也展示了极强的文学修养和浓浓的家国情怀。本书值得所有对操作系统底层技术感兴趣的读者阅读。我们需要更多的基础软件人才,相信本书的出版将为此项事业做出巨大贡献。

 

《Linux设备驱动开发详解》作者、Linux工程师、海思顾问 宋宝华

 

 

在国产基础软件大发展的历史背景下,自研国产操作系统显得十分迫切和必要。宝友在繁忙的工作之余,从零开始写DIM-SUM操作系统,这个操作系统具备现代操作系统很多优秀和先进的特性,比如高效的内存管理、进程管理、虚拟文件系统、LEXT3文件系统等。

 

更加难能可贵的是,宝友不但公开了源代码,还把自研DIM-SUM操作系统的设计心得和体会总结成册,这给国内从事基础软件开发的技术人员提供了宝贵的一手资料。

 

《自研操作系统:DIM-SUM设计与实现》一书把设计操作系统的理论知识和实际工程实践紧密结合,为读者提供了一个动手实践的好项目。读者不但可以从本书中学习到操作系统的理论知识和提升工程能力,而且能参与到DIM-SUM操作系统的开发中,为国产操作系统添砖加瓦!

 

《奔跑吧Linux内核》作者 笨叔

 

 

2019年,在深圳鹏城实验室举办的OS2ATC 2019大会上,本书作者谢宝友应我邀请介绍他研发多年的操作系统DIM-SUM,技术报告的主题为“做中国的Linux,做中国的Linus——国产自研操作系统DIM-SUM介绍”,没想到这成了DIM-SUM操作系统的首次亮相。在这次的技术报告中,作者讲了为什么国内没有一个在他看来像样的操作系统,他为什么要自己实现一个自研操作系统。在报告中,我看到了本书作者对操作系统的好奇心、在开发操作系统方面的情怀,也看到了他在操作系统领域的愚公精神。

 

我有幸看了本书的目录和样章,可以看出作者对Paul E.Mckenney的并行编程原理与设计以及Linux的设计实现内涵有深入的理解。作者对DIM-SUM操作系统的设计实现有详细的分析描述,初步看来,DIM-SUM操作系统与Linux类似,但有其自身的特点。目前我还没有看到DIM-SUM源代码并在系统中运行DIM-SUM,等到本书出版和DIM-SUM操作系统源代码公开之后,我会进一步学习DIM-SUM操作系统。

 

祝DIM-SUM操作系统发展得越来越好,希望更多的人对操作系统感兴趣,并加入DIM-SUM操作系统的开源生态中。

 

清华大学 陈渝

 

                                                                             

DIM-SUM操作系统的问世,是作者二十多年的坚持和智慧的结晶。作为这个操作系统诞生的全程见证者,我能体会到作者这份二十多年都未曾更改初心的不易和为此奋斗的艰辛。仅仅这一点,就不是一个常人能轻易做到的。

 

 做操作系统需要情怀、胸怀和能力,可以毫不夸张地说,作者正好符合!如果这个时代选择不辜负这样一个个有备而来的人,那么中国的操作系统必将走出困局、迎来新生!

 

操作系统爱好者 巫绪萍

 

 

 

操作系统被誉为IT行业的核武器。然而,多年来我们在这方面一直受制于人。

LMOS和DIM-SUM这两个自研操作系统都是为了在这方面有所突破而诞生的。作为同行人,我深知开发一个自研操作系统的难度,因此佩服DIM-SUM作者“板凳一坐十年冷”的心态和“虽千万人吾往矣”的勇气和魄力!

DIM-SUM操作系统以开源、开放的姿态面对大家的质疑和监督,欢迎所有操作系统爱好者参与到它的开发中来,不断呵护它逐渐壮大,成为真正自主、可用、实用的服务器操作系统!

LMOS发起者、《深度探索嵌入式操作系统》作者 彭东

 

 

多年前和宝友一起共事时,我就惊叹于他对时间的精确管理能力和强大的内在驱动力。在繁重的工作之余,他仍有时间钻研操作系统、网络协议并记录大量学习笔记,到现在这一宝贵财富仍然造福于所有有志于学习操作系统内核的开发人员。

DIM-SUM操作系统是宝友十年如一日地深耕操作系统领域的最新成果,该系统借鉴了一些Linux的设计思想,但在很多方面都有原创性的突破。本书既是宝友开发自研操作系统的宝贵经验总结,又是对有志于参与我国开源操作系统项目的黑客们的集结号,绝对不容错过。

VoltDB数据库专家 鲁阳

 


展开
目录

第 1章  准备工作 1

1.1  DIM-SUM简介 1

1.2  DIM-SUM是什么 1

1.2.1  DIM-SUM的第一个版本为什么是HOT-POT 1

1.2.2  DIM-SUM欢迎什么 2

1.2.3  DIM-SUM不欢迎什么 3

1.3  获得源代码 3

1.3.1  通过网页下载源代码 3

1.3.2  通过Git获取源代码 3

1.4  搭建调试开发环境 4

1.4.1  安装ubuntu 16.04 4

1.4.2  ubuntu 16.04环境配置 5

1.4.3  搭建编译环境 6

1.4.4  编译HOT-POT 7

1.4.5  运行HOT-POT 8

1.4.6  开始调试 10

1.5  向DIM-SUM操作系统提交补丁 11

1.5.1  心态 11

1.5.2  准备工作 11

1.5.3  制作补丁 13

1.5.4  制作正确的补丁 14

1.5.5  发送补丁 16

1.6  获得帮助 17

1.7  提醒 17

第 2章  算法基础 18

2.1  链表 18

2.2  散列表 19

2.3  红黑树 20

2.4  基树 22

 

 

第 3章  计数与互斥同步 23

3.1  计数 23

3.1.1  计数的难题 24

3.1.2  精确计数器 24

3.1.3  近似计数器 27

3.1.4  引用计数 31

3.2  内核互斥原语 32

3.2.1  每CPU变量 32

3.2.2  自旋锁 38

3.2.3  自旋位锁 42

3.2.4  自旋顺序锁 44

3.2.5  自旋读/写锁 47

3.2.6  读/写信号量 50

3.2.7  互斥锁 56

3.3  内核同步原语 60

3.3.1  信号量的设计原理 60

3.3.2  信号量的数据结构 61

3.3. 3  信号量API 61

3.3.4  信号量的实现 62

第 4章  调度 65

4.1  基本概念 65

4.1.1  进程和线程 65

4.1.2  任务 66

4.1.3  任务抢占 66

4.1.4  idle线程 66

4.2  SMP CPU初始化 66

4.3  数据结构 71

4.3.1  线程 71

4.3.2  调度队列 76

4.3.3  杂项 77

4.4  调度子系统初始化 77

4.4.1  init_sched_early函数 78

4.4.2  init_idle_process函数 78

4.4.3  init_sched函数 79

4.5  线程调度 79

4.5.1  上下文切换 79

4.5.2  唤醒线程 82

4.6  高级调度API 85

4.6.1  等待队列 85

4.6.2  位等待队列 89

4.6.3  线程睡眠 93

4.6.4  消息队列 96

第 5章  中断及定时器 108

5.1  中断控制器初始化 108

5.1.1  主CPU中断控制器初始化 109

5.1.2  从CPU中断控制器初始化 110

5.2  中断控制器维护 110

5.2.1  中断号映射 110

5.2.2  逻辑中断的控制 113

5.2.3  设备中断处理函数 116

5.3  中断处理 119

5.3.1  序言 119

5.3.2  中断处理通用流程 120

5.3.3  处理外部设备中断 122

5.3.4  处理核间中断 126

5.3.5  软中断 126

5.3.6  尾声 126

5.4  工作队列 128

5.4.1  工作队列的数据结构 128

5.4.2  工作队列的全局变量 130

5.4.3  工作队列的API 130

5.4.4  工作队列的实现 131

5.5  定时器与时间管理 139

5.5.1  初始化 139

5.5.2  定时器的数据结构 139

5.5.3  定时器的全局变量 141

5.5.4  定时器的API 141

5.5.5  定时器的实现 141

5.5.6  定时器中断处理 144

5.5.7  时间管理 148

第 6章  内存管理 151

6.1  内存初始化 151

6.1.1  艰难地准备C运行环境 151

6.1.2  准备BOOT内存空间 152

6.1.3  物理内存块管理 152

6.1.4  早期设备内存映射 153

6.1.5  初始化每CPU变量 157

6.1.6  初始化线性映射 157

6.1.7  其他内存初始化工作 160

6.2  BOOT内存分配器 160

6.2.1  BOOT内存分配API 161

6.2.2  BOOT内存分配器的实现 161

6.2.3  BOOT内存分配器的销毁 163

6.3  页面编号 163

6.3.1  页面编号的数据结构 164

6.3.2  页面编号的全局变量 165

6.3.3  页面编号的API 165

6.3.4  页面编号的实现 165

6.4  页面分配器 168

6.4.1  页面分配器的设计原理 168

6.4.2  页面分配器的数据结构 169

6.4.3  页面分配器的全局变量 174

6.4.4  页面分配器的API 175

6.4.5  页面分配器的实现 176

6.4.6  页面分配器的初始化 192

6.5  Beehive内存分配器 193

6.5.1  Beehive内存分配器的设计原理 193

6.5.2  Beehive内存分配器的数据结构 195

6.5.3  Beehive内存分配器的全局变量 197

6.5.4  Beehive内存分配器的API 199

6.5.5  Beehive内存分配器的实现 199

6.5.6  Beehive内存分配器的初始化 214

6.6  I/O内存映射 216

第 7章  块设备 219

7.1  磁盘及其分区 220

7.1.1  磁盘及其分区的数据结构 220

7.1.2  磁盘及其分区的全局变量 222

7.1.3  磁盘及其分区的API 222

7.1.4  磁盘及其分区的实现 222

7.2  块设备维护 228

7.2.1  块设备的数据结构 228

7.2.2  块设备的全局变量 230

7.2.3  块设备的API 231

7.2.4  块设备的实现 231

7.3  I/O请求 242

7.3.1  I/O请求的数据结构 243

7.3.2  I/O请求的全局变量 250

7.3.3  I/O请求的API 250

7.3.4  I/O请求的实现 251

7.4  I/O调度 265

7.4.1  I/O调度的数据结构 265

7.4.2  I/O调度的全局变量 267

7.4.3  I/O调度的API 267

7.4.4  I/O调度的实现 268

第 8章  虚拟文件系统 271

8.1  挂载、卸载文件系统 271

8.1.1  挂载、卸载文件系统的数据结构 272

8.1.2  挂载、卸载文件系统的全局变量 277

8.1.3  挂载、卸载文件系统的API 278

8.1.4  挂载、卸载文件系统的实现 278

8.2  文件节点缓存 285

8.2.1  文件节点缓存的数据结构 286

8.2.2  文件节点缓存的全局变量 288

8.2.3  文件节点缓存的API 289

8.2.4  文件节点缓存的实现 290

8.3  打开、关闭文件 304

8.3.1  打开、关闭文件的数据结构 305

8.3.2  打开、关闭文件的全局变量 308

8.3.3  打开、关闭文件的API 309

8.3.4  打开、关闭文件的实现 309

8.4  读/写文件 319

8.4.1  读/写文件的数据结构 320

8.4.2  读/写文件的全局变量 323

8.4.3  读/写文件的API 323

8.4.4  读/写文件的实现 323

8.5  其他功能 337

第 9章  杂项文件系统 338

9.1  文件系统的挂载 338

9.1.1  第一次加载根文件系统 338

9.1.2  第二次加载根文件系统 340

9.2  内存文件系统 340

9.2.1  内存文件系统的数据结构 340

9.2.2  内存文件系统的全局变量 340

9.2.3  内存文件系统的API 341

9.2.4  内存文件系统的实现 341

9.3  设备文件系统 349

9.3.1  设备文件系统的数据结构 349

9.3.2  设备文件系统的全局变量 350

9.3.3  设备文件系统的API 351

9.3.4  设备文件系统的实现 351

第 10章  LEXT3文件系统 358

10.1  简介 358

10.1.1  超级块 359

10.1.2  块组描述符 359

10.1.3  块位图 360

10.1.4  文件节点位图 360

10.1.5  文件节点表 360

10.1.6  文件节点 360

10.1.7  文件日志 362

10.2  LEXT3 363

10.2.1  LEXT3的数据结构 363

10.2.2  LEXT3的全局变量 371

10.2.3  LEXT3的API 372

10.2.4  LEXT3的实现 373

10.3  文件系统日志 397

10.3.1  日志的数据结构 397

10.3.2  日志的全局变量 405

10.3.3  日志的API 405

10.3.4  日志的实现 406

第 11章  杂项 438

11.1  klibc 438

11.2  网络子系统 440

11.3  SIMPLE-KSHELL 440




展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证