注册 登录 进入教材巡展
#

出版时间:2014年3月

出版社:人民邮电出版社

以下为《Unix内核源码剖析》的配套数字资源,这些资源在您购买图书后将免费附送给您:
  • 人民邮电出版社
  • 9787115345219
  • 178694
  • 2014年3月
  • TP316.81
内容简介
  青柳隆宏著的《Unix内核源码剖析》是一本UNIX V6内核源代码的阅读指南。作者结合UNIX V6已公开的相关文档,对UNIX V6的内核源码进行详细剖析,旨在让读者更深入地理解进程、中断、块I/O系统、文件系统、字符I/O系统、启动系统等操作系统的基本原理。
  《Unix内核源码剖析》适合操作系统的初中级学习者阅读,特别适合通过大学课程和其他入门书对操作系统有所了解,但是对具体细节缺乏深入理解的读者,以及那些对操作系统的具体实现有兴趣的读者。
目录
第I部分 什么是UNIX V6 1
第1章 UNIX V6的全貌 2
1.1 什么是UNIX V6 2
1.2 UNIX的历史 2
1.3 UNIX V6内核 4
1.4 构成UNIX V6运行环境的硬件 4
 PDP-11 5
1.5 代码 9
1.6 手册 9
1.7 小结 10
第II部分 进程 11
第2章 进程 12
2.1 进程的概要 12
 什么是进程 12
 进程的并行执行 12
 进程的执行状态 14
 用户模式和内核模式 14
 交换处理15
2.2 proc结构体和user结构体 15
 proc结构体 16
 user结构体 17
2.3 为进程分配的内存 21
 代码段 21
 数据段 21
 虚拟地址空间 22
 变换地址 24
2.4 小结 26
第3章 进程的管理I 27
3.1 进程的生命周期 27
3.2 创建进程 28
 进程的复制 28
 父进程和子进程 29
 系统调用fork 29
 newproc() 32
 panic() 36
3.3 切换执行进程 37
 中断执行进程 37
 进程的执行状态 37
 选择执行进程的算法 38
 上下文切换 39
 系统调用wait 39
 sleep() 39
 swtch() 41
 swtch()的返回位置 44
 setpri() 51
 wakeup() 51
 setrun() 52
3.4 执行程序 53
 程序执行文件的格式 53
 系统调用exec 54
 estabur() 62
 sureg() 65
 expand() 66
3.5 进程的终止 68
 系统调用exit 69
 系统调用wait 71
3.6 数据区域的扩展 73
 系统调用break 73
3.7 管理内存和交换空间 76
 map结构体 76
 获取未使用区域 77
 释放区域 79
3.8 小结 81
第4章 交换处理 82
4.1 什么是交换处理 82
 代码段和数据段 82
 sched() 83
 xswap() 87
4.2 共享代码段的处理 88
 xalloc() 90
 xfree() 93
 xccdec() 93
4.3 小结 94
第III部分 中断 95
第5章 中断与陷入 96
5.1 什么是中断与陷入 96
 什么是中断 96
 什么是陷入 97
5.2 优先级与向量(Vector) 98
 中断优先级和处理器优先级 98
 中断和陷入向量 100
5.3 中断和陷入的处理流程 100
 发生中断或陷入 101
 执行call和trap 104
5.4 时钟中断处理函数 107
 时钟设备的规格 107
 时钟中断处理函数的内容 108
 clock() 113
5.5 陷入处理函数 117
 trap() 117
 grow() 122
5.6 系统调用的处理流程 123
 传递参数的方法 123
 sysent结构体 124
 trap() 126
5.7 小结 128
第6章 信号 129
6.1 什么是信号 129
 信号的发送方法 129
 确认接收信号 129
 信号的种类 130
 ssig() 131
 kill() 132
 signal() 133
 psignal() 133
 issig() 134
 psig() 134
 core() 136
 在系统调用处理中处理信号 136
6.2 跟踪功能 137
 什么是跟踪 137
 ipc结构体 138
 跟踪的处理流程 138
 stop() 139
 ptrace() 140
 procxmt() 142
 wait() 143
6.3 小结 144
第IV部分 块I/O系统 145
第7章 块设备子系统 146
7.1 设备的基础 146
 设备的种类 146
 设备驱动 146
 类别和设备编号 147
 特殊文件 147
7.2 块设备子系统 148
 缓冲区 148
 b-list和av-list 150
 RAW输入输出 151
7.3 缓冲区的初始化 152
 binit() 152
 clrbuf() 153
7.4 缓冲区的获取和释放 154
 getblk() 154
 notavail() 156
 brelse() 157
7.5 读取 158
 读取的种类 158
 bread() 159
 iowait() 160
 iodone() 160
 geterror() 161
 breada() 161
 incore() 162
7.6 写入 163
 写入的种类 163
 bwrite() 164
 bawrite() 165
 bdwrite() 165
 bflush() 166
7.7 RAW输入输出 167
 physio() 167
 swap() 169
7.8 小结 171
第8章 块设备驱动 172
8.1 什么是块设备驱动 172
 块设备驱动表 172
 设备处理队列 173
 处理流程 173
8.2 RK-11磁盘驱动 174
 RK11-D 175
 特殊文件 175
 设定bdevsw[] 176
 中断处理函数 176
 RK11-D的寄存器 177
 rkstrategy() 179
 rkstart() 180
 rkaddr() 180
 devstart() 181
 rkintr() 182
 RAW输入输出 184
8.3 小结 184
第V部分 文件系统 185
第9章 文件系统 186
9.1 什么是文件系统 186
 inode 186
 树状结构的命名空间 187
 挂载 187
 访问权限 188
 根磁盘 189
9.2 块设备的区域 189
 用于启动的区域 190
 超级块 190
 inode区域 191
 存储区域 193
9.3 挂载 193
 mount结构体 193
 系统调用mount 194
 getmdev() 196
 系统调用umount 197
9.4 inode的获取和释放 198
 inode[] 198
 iget() 201
 iput() 203
 iupdat() 204
9.5 inode与存储区域的对应关系 205
 bmap() 208
 itrunc() 211
9.6 分配块设备中的块 213
 ialloc() 213
 ifree() 216
 alloc() 217
 free() 220
 getfs() 222
 badblock() 222
9.7 将路径变为inode 223
 目录的内容 223
 namei() 224
 access() 230
9.8 初始化与同步 232
 iinit() 232
 update() 232
9.9 小结 234
第10章 文件处理 235
10.1 用户程序对文件的处理 235
10.2 3个结构体 235
 标准输入输出 237
10.3 文件的生成和打开处理 237
 系统调用creat 238
 maknode() 238
 wdir() 239
 系统调用open 240
 open1() 241
 falloc() 242
 ufalloc() 243
 openi() 243
10.4 文件的读取和写入 244
 系统调用read、write 244
 rdwr() 245
 readi() 246
 writei() 248
 iomove() 250
 getf() 252
10.5 指定文件的读写位置 252
 系统调用seek 252
10.6 关闭文件 254
 系统调用close 254
 closef() 254
 closei() 255
10.7 目录的生成 255
 系统调用mknod 255
10.8 文件的链接 256
 系统调用link 257
 suser() 258
10.9 删除文件 258
 系统调用unlink 258
10.10 小结 260
第11章 管道 261
11.1 什么是管道 261
 使用管道的优点 262
11.2 开始管道通信 262
 系统调用pipe 262
11.3 收发数据 264
 writep() 264
 readp() 266
 plock() 267
 prele() 267
11.4 结束管道通信 268
 closef() 268
11.5 建立管道通信的流程 268
 建立父子进程间的通信 268
 系统调用dup 272
11.6 小结 273
第VI部分 字符I/O系统 275
第12章 字符设备 276
12.1 字符设备驱动 276
 字符设备缓冲区 277
 对缓冲区的操作 278
 初始化缓冲区池 280
12.2 LP11设备驱动 281
 什么是LP11 281
 LP11设备驱动的功能 282
 lpopen() 284
 lpwrite(