当前位置:首页 > 工业技术
操作系统设计  Xinu方法
操作系统设计  Xinu方法

操作系统设计 Xinu方法PDF电子书下载

工业技术

  • 电子书积分:13 积分如何计算积分?
  • 作 者:(美)科默(ComerD.)著;邹恒明等译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2014
  • ISBN:7111428268
  • 页数:360 页
图书介绍:
《操作系统设计 Xinu方法》目录

第1章 引言和概述 1

1.1操作系统 1

1.2本书的研究方法 1

1.3分层设计 2

1.4 Xinu操作系统 3

1.5操作系统不是什么 3

1.6从外面看操作系统 4

1.7其他章节概要 4

1.8观点 5

1.9总结 5

练习 5

第2章 并发执行与操作系统服务 6

2.1引言 6

2.2多活动的编程模型 6

2.3操作系统服务 7

2.4并发处理的概念和术语 7

2.5串行程序和并发程序的区别 8

2.6多进程共享同一段代码 9

2.7进程退出与进程终止 11

2.8共享内存、竞争条件和同步 11

2.9信号量与互斥 14

2.10 Xinu中的类型命名方法 15

2.11使用Kputc和Kprintf进行操作系统的调试 16

2.12观点 16

2.13总结 16

练习 17

第3章 硬件和运行时环境概览 18

3.1引言 18

3.2 E2100L的物理和逻辑结构 18

3.3处理器结构和寄存器 19

3.4总线操作:获取-存储范式 19

3.5直接内存访问 19

3.6总线地址空间 20

3.7内核段KSEG0和KSEG1的内容 20

3.8总线启动的静态配置 21

3.9调用约定和运行时栈 21

3.10中断和中断处理 22

3.11异常处理 23

3.12计时器硬件 23

3.13串行通信 24

3.14轮询与中断驱动I/O 24

3.15内存缓存和KSEG1 24

3.16存储布局 24

3.17内存保护 25

3.18观点 25

练习 25

第4章 链表与队列操作 26

4.1引言 26

4.2用于进程链表的统一数据结构 26

4.3简洁的链表数据结构 27

4.4队列数据结构的实现 28

4.5内联队列操作函数 29

4.6获取链表中进程的基础函数 29

4.7 FIFO队列操作 30

4.8优先级队列的操作 32

4.9链表初始化 33

4.10观点 34

4.11总结 34

练习 35

第5章 调度和上下文切换 36

5.1引言 36

5.2进程表 36

5.3进程状态 38

5.4就绪和当前状态 38

5.5调度策略 38

5.6调度的实现 39

5.7上下文切换的实现 41

5.8内存中保存的状态 41

5.9在MIPS处理器上切换上下文 41

5.10重新启动进程执行的地址 43

5.11并发执行和null进程 44

5.12使进程准备执行和调度不变式 44

5.13推迟重新调度 45

5.14其他进程调度算法 47

5.15 观点 47

5.16总结 47

练习 47

第6章 更多进程管理 49

6.1引言 49

6.2进程挂起和恢复 49

6.3自我挂起和信息隐藏 49

6.4系统调用的概念 50

6.5禁止中断和恢复中断 51

6.6系统调用模板 51

6.7系统调用返回SYSERR和OK值 51

6.8挂起的实现 52

6.9挂起当前进程 53

6.10 suspend函数的返回值 53

6.11进程终止和进程退出 54

6.12进程创建 56

6.13其他进程管理函数 59

6.14总结 60

练习 61

第7章 协调并发进程 62

7.1引言 62

7.2进程同步的必要性 62

7.3计数信号量的概念 63

7.4避免忙等待 63

7.5信号量策略和进程选择 63

7.6等待状态 64

7.7信号量数据结构 64

7.8系统调用wait 65

7.9系统调用signal 66

7.10静态和动态信号量分配 66

7.11动态信号量的实现示例 67

7.12信号量删除 68

7.13信号量重置 69

7.14多核处理器之间的协调 69

7.15 观点 70

7.16总结 70

练习 71

第8章 消息传递 72

8.1引言 72

8.2两种类型的消息传递服务 72

8.3消息使用资源的限制 72

8.4消息传递函数和状态转换 73

8.5 send的实现 73

8.6 receive的实现 74

8.7非阻塞消息接收的实现 75

8.8观点 75

8.9总结 75

练习 76

第9章 基本内存管理 77

9.1引言 77

9.2内存的类型 77

9.3重量级进程的定义 77

9.4小型嵌入式系统的内存管理 78

9.5程序段和内存区域 78

9.6嵌入式系统中的动态内存分配 79

9.7低层内存管理器的设计 79

9.8分配策略和内存持久性 80

9.9追踪空闲内存 80

9.10低层内存管理的实现 80

9.11分配堆存储 82

9.12分配栈存储 83

9.13释放堆和栈存储 84

9.14观点 86

9.15 总结 87

练习 87

第10章 高级内存管理和虚拟内存 88

10.1引言 88

10.2分区空间分配 88

10.3缓冲池 88

10.4分配缓冲区 89

10.5将缓冲区返回给缓冲池 90

10.6创建缓冲池 91

10.7初始化缓冲池表 93

10.8虚拟内存和内存复用 93

10.9实地址空间和虚地址空间 93

10.10支持按需换页的硬件 94

10.11使用页表的地址翻译 95

10.12页表项中的元数据 95

10.13按需换页以及设计上的问题 95

10.14页面替换和全局时钟算法 96

10.15观点 97

10.16总结 97

练习 97

第11章 高层消息传递 98

11.1引言 98

11.2进程间通信端口 98

11.3端口实现 98

11.4端口表初始化 99

11.5端口创建 100

11.6向端口发送消息 101

11.7从端口接收消息 102

11.8端口的删除和重置 103

11.9观点 106

11.10总结 106

练习 106

第12章 中断处理 107

12.1引言 107

12.2中断的优点 107

12.3中断分配 107

12.4中断向量 107

12.5中断向量号的分配 108

12.6硬件中断 108

12.7中断请求的局限性和中断多路复用 109

12.8中断软件和分配 109

12.9中断分配器底层部分 110

12.10中断分配器高层部分 112

12.11禁止中断 114

12.12函数中中断代码引起的限制 115

12.13中断过程中重新调度的必要性 115

12.14中断过程中的重新调度 115

12.15 观点 116

12.16总结 116

练习 117

第13章 实时时钟管理 118

13.1引言 118

13.2定时事件 118

13.3实时时钟和计时器硬件 118

13.4处理实时时钟中断 119

13.5延时与抢占 119

13.6使用计时器来模拟实时时钟 120

13.7抢占的实现 120

13.8使用增量链表对延迟进行有效管理 120

13.9增量链表的实现 121

13.10将进程转入睡眠 122

13.11定时消息接收 124

13.12唤醒睡眠进程 127

13.13时钟中断处理 127

13.14时钟初始化 128

13.15 间隔计时器管理 129

13.16观点 130

13.17总结 130

练习 130

第14章 设备无关的I/O 132

14.1引言 132

14.2 I/O和设备驱动的概念结构 132

14.3接口抽象和驱动抽象 133

14.4 I/O接口的一个示例 134

14.5打开-读-写-关闭范式 134

14.6绑定I/O操作和设备名 134

14.7 Xinu中的设备名 135

14.8设备转换表概念 135

14.9设备和共享驱动的多个副本 136

14.10高层I/O操作的实现 138

14.11其他高层I/O函数 138

14.12打开、关闭和引用计数 141

14.13 devtab中的空条目和错误条目 143

14.14 I/O系统的初始化 143

14.15观点 146

14.16总结 147

练习 147

第15章 设备驱动示例 148

15.1引言 148

15.2 tty抽象 148

15.3 tty设备驱动的组成 149

15.4请求队列和缓冲区 149

15.5上半部和下半部的同步 150

15.6硬件缓冲区和驱动设计 151

15.7 tty控制块和数据声明 151

15.8次设备号 153

15.9上半部tty字符输入(ttyGetc) 153

15.10通用上半部tty输入(ttyRead) 154

15.11上半部(tty字符输出(ttyputc) 155

15.12开始输出(ttyKickOut) 156

15.13上半部tty多字符输出(ttyWrite) 157

15.14下半部tty驱动函数(ttyInterrupt) 157

15.15输出中断处理(ttyInter out) 159

15.16 tty输入处理(tty Inter in) 161

15.17 tty控制块初始化(ttyInit) 166

15.18设备驱动控制 168

15.19观点 169

15.20总结 169

练习 169

第16章 DMA设备和驱动(以太网) 171

16.1引言 171

16.2直接内存访问和缓冲区 171

16.3多缓冲区和环 171

16.4使用DMA的以太网驱动例子 172

16.5设备的硬件定义和常量 172

16.6环和内存缓冲区 174

16.7以太网控制块的定义 175

16.8设备和驱动初始化 177

16.9分配输入缓冲区 181

16.10从以太网设备中读取数据包 182

16.11向以太网设备中写入数据包 183

16.12以太网设备的中断处理 185

16.13以太网控制函数 187

16.14观点 189

16.15 总结 189

练习 189

第17章 最小互联网协议栈 190

17.1引言 190

17.2所需的功能 190

17.3同步对话、超时和进程 191

17.4 ARP函数 192

17.5网络数据包的定义 198

17.6网络输入进程 199

17.7 UDP表的定义 202

17.8 UDP函数 203

17.9互联网控制报文协议 210

17.10动态主机配置协议 211

17.11观点 214

17.12总结 214

练习 214

第18章 远程磁盘驱动 215

18.1引言 215

18.2磁盘抽象 215

18.3磁盘操作驱动支持 215

18.4块传输和高层I/O函数 215

18.5远程磁盘范式 216

18.6磁盘操作的语义 216

18.7驱动数据结构的定义 217

18.8驱动初始化(rdsInit) 221

18.9上半部打开函数(rdsOpen) 223

18.10远程通信函数(rdscomm) 224

18.11上半部写函数(rdsWrite) 226

18.12上半部读函数(rdsRead) 228

18.13刷新挂起的请求 231

18.14上半部控制函数(rdsControl) 231

18.15分配磁盘缓冲区(rdsbufalloc) 233

18.16上半部关闭函数(rdsClose) 234

18.17下半部通信进程(rdsprocess) 235

18.18观点 239

18.19总结 239

练习 240

第19章 文件系统 241

19.1文件系统是什么 241

19.2文件操作的示例集合 241

19.3本地文件系统的设计 242

19.4 Xinu文件系统的数据结构 242

19.5索引管理器的实现 243

19.6清空索引块(lfibclear) 246

19.7获取索引块(lfibget) 247

19.8存储索引块(lfibput) 247

19.9从空闲链表中分配索引块(lfiballoc) 248

19.10从空闲链表中分配数据块(lfdballoc) 249

19.11使用设备无关的I/O函数的文件操作 250

19.12文件系统的设备设置和函数名称 251

19.13本地文件系统打开函数(lfsOpen) 251

19.14关闭文件伪设备(lflClose) 256

19.15刷新磁盘中的数据(lfflush) 256

19.16文件的批量传输函数(lflWrite,lflRead) 257

19.17在文件中查找一个新位置(lflSeek) 258

19.18从文件中提取一个字节(lflGetc) 259

19.19改变文件中的一个字节(lflputc) 260

19.20载入索引块和数据块(lfsetup) 261

19.21主文件系统设备的初始化(lfsInit) 264

19.22伪设备的初始化(lfInit) 264

19.23文件截断(lftruncate) 265

19.24初始文件系统的创建(Ifscreate) 267

19.25观点 269

19.26总结 269

练习 269

第20章 远程文件机制 270

20.1引言 270

20.2远程文件访问 270

20.3远程文件语义 270

20.4远程文件设计和消息 271

20.5远程文件服务器通信 276

20.6发送一个基本消息 278

20.7网络字节序 279

20.8使用设备范式的远程文件系统 279

20.9打开远程文件 280

20.10检查文件模式 282

20.11关闭远程文件 283

20.12读远程文件 284

20.13写远程文件 286

20.14远程文件的定位 288

20.15远程文件单字符I/O 288

20.16远程文件系统控制函数 289

20.17初始化远程文件数据结构 292

20.18观点 293

20.19总结 293

练习 294

第21章 句法名字空间 295

21.1引言 295

21.2透明与名字空间的抽象 295

21.3多种命名方案 295

21.4命名系统设计的其他方案 296

21.5基于句法的名字空间 296

21.6模式和替换 297

21.7前缀模式 297

21.8名字空间的实现 297

21.9名字空间的数据结构和常量 297

21.10增加名字空间前缀表的映射 298

21.11使用前缀表进行名字映射 299

21.12打开命名文件 302

21.13名字空间初始化 303

21.14对前缀表中的项进行排序 305

21.15选择一个逻辑名字空间 305

21.16默认层次和空前缀 305

21.17额外的对象操作函数 306

21.18名字空间方法的优点和限制 306

21.19广义模式 307

21.20观点 307

21.21总结 308

练习 308

第22章 系统初始化 309

22.1引言 309

22.2引导程序:从头开始 309

22.3操作系统初始化 309

22.4在E2100L上启动一个可选的映像 310

22.5 Xinu初始化 310

22.6系统启动 312

22.7从程序转化为进程 316

22.8观点 316

22.9总结 316

练习 316

第23章 异常处理 317

23.1引言 317

23.2异常、陷阱和恶意中断 317

23.3 panic的实现 317

23.4观点 318

23.5总结 318

练习 318

第24章 系统配置 319

24.1引言 319

24.2多重配置的需求 319

24.3 Xinu系统配置 319

24.4 Xinu配置文件的内容 320

24.5计算次设备号 321

24.6配置Xinu系统的步骤 322

24.7观点 322

24.8总结 322

练习 322

第25章 一个用户接口例子:Xinu壳 323

25.1引言 323

25.2用户接口 323

25.3命令和设计原则 323

25.4一个简化壳的设计决策 324

25.5壳的组织和操作 324

25.6词法符号的定义 324

25.7命令行语法的定义 325

25.8 Xinu壳的实现 325

25.9符号的存储 327

25.10词法分析器代码 327

25.11命令解释器的核心 330

25.12命令名查询和内部处理 336

25.13传给命令的参数 336

25.14向外部命令传递参数 337

25.15 I/O重定向 339

25.16示例命令函数(sleep) 340

25.17观点 341

25.18总结 341

练习 342

附录1 操作系统移植 343

附录2 Xinu设计注解 349

索引 352

返回顶部