目录 1
1 对系统的看法 1
1.1 发展历史 1
1.2 设计思想 2
1.3 系统结构 3
1.4 主要特点 4
1.5 用户评述 5
1.5.1 文件系统综述 5
1.5.2 处理环境 7
1.5.3 组建块原语 8
1.6 关于硬件的设想 9
1.6.1 中断和例外 10
1.6.2 处理机执行 10
1.6.3 内存管理 11
2 UNIX系统内核导引 12
2.1 UNIX系统内核的结构 12
2.2 基本概念 14
2.2.1 文件系统 14
2.2.2 进程 16
3 文件系统的数据结构和表示 21
3.1 磁盘文件系统结构 21
3.2.1 文件控制块i节点 23
3.2 文件系统的数据结构 23
3.2.2 目录项结构 26
3.2.3 系统打开文件表 26
3.2.4 用户打开文件表 27
3.2.5 安装表结构 28
3.2.6 各数据结构之间的关系 29
3.3 i节点的管理 30
3.3.1 目录的路径名搜索(namei) 30
3.3.2 iget 33
3.3.3 复制磁盘i节点内容(iread) 35
3.3.4 iput 35
3.3.5 更新磁盘i节点(iupdat) 36
3.3.6 释放指定文件盘块(itrunc) 37
3.3.7 tloop 37
3.3.8 maknode 39
3.3.9 wdir 39
3.3.10 文件的打开(openi) 40
3.3.11 检查存取权限access 41
3.3.12 owner 42
3.3.13 文件的读写(readi和writei) 42
3.3.14 ialloc 46
3.3.15 ifree 47
3.4.2 ufalloc(i) 48
3.4 打开文件表的管理 48
3.4.1 getf 48
3.4.3 falloc 49
3.4.4 finit 49
3.4.5 closef 50
3.5 文件的地址映射 51
3.5.1 bmap 51
3.5.2 alloc 54
3.5.3 free 55
3.5.4 badblock 56
3.6.2 update 57
3.6.1 getfs 57
3.6 其他函数 57
3.6.3 suser 58
3.6.4 passc与cpass 58
4 文件系统的系统调用 59
4.1 文件的读与写(read/write) 59
4.2 文件的打开(open)和创建(creat) 59
4.3 文件的关闭(close) 64
4.4 改变读写指针 64
4.5 与一个已存文件建立联结link 65
4.6 文件的删除(unlink) 67
4.9 取得打开文件的i节点内容(fstat) 70
4.7 建立特别文件(mknod) 70
4.8 检查存取权限(saccess) 70
4.10 取得某一文件的i节点内容(stat) 72
4.11 复制一个打开文件之描述字(dup) 73
4.12 文件控制系统调用(fcntl) 73
4.13 安装系统文件卷(smount) 75
4.14 拆卸文件卷(sumount) 77
4.15 pipe机构的工作原理 79
5.1.1 进程 84
5.1.3 进程图象的基本结构 84
5.1.2 进程图象的组成部分 84
5.1 进程和进程图象 84
5 进程结构和控制 84
5.2 进程的各种状态 88
5.2.1 运行态 89
5.2.2 就绪态 89
5.2.3 睡眠态 89
5.2.4 停止状态(被跟踪状态) 89
5.2.5 进程终止前的暂时状态 90
5.2.6 进程各种主要状态之间的转换关系 90
5.3 进程管理使用的主要队列 91
5.4.3 保存和装入进程关联 92
5.4.2 进程控制块基地址(PCBB) 92
5.5 进程的创建和终止 92
5.4.1 进程控制块(PCB) 92
5.4 进程关联转换 92
5.6 进程的睡眠和唤醒 99
5.7 处理机调度和进程对换 103
5.7.1 关于调度标志runrun,runin和runout的说明 104
5.7.2 用于处理机调度的策略 104
5.7.3 用于进程对换的策略 104
5.7.4 程序分析 105
5.7.5 关于特别进程0 109
5.9 执行一个文件 110
5.8 进程同步 110
5.10 应用exec()的一个例子—shell的基本实施过程 117
5.11 主要程序说明与调用关系 118
6 中断、陷入和软中断 120
6.1 硬件中断机构 121
6.1.1 处理器状态字Psw 121
6.1.2 处理器访问方式 121
6.1.3 异常和中断向量 122
6.1.4 中断优先级IPL 123
6.1.5 软件中断 123
6.2 中断、陷入总控程序trap.s 124
6.2.1 变元表和变元指示字 124
6.2.3 过程调用指令 125
6.2.2 调用栈桢和调用栈桢指示字 125
6.2.4 中断、陷入发生后的堆栈结构 126
6.2.5 程序分析 127
6.3 陷入处理程序trap.c 127
6.3.1 陷入类型和处理 127
6.3.2 系统调用的处理 129
6.3.3 系统调用参数传递的处理 130
6.4 时钟管理 131
6.4.1 时钟特性 131
6.4.2 时钟管理方式 132
6.4.3 时钟处理程序clock.c 132
6.5.1 软中断类型 134
6.5 软中断 134
6.5.2 设置软中断处理方式 135
6.5.3 软中断处理的时机 135
6.5.4 主要程序分析 135
6.6 跟踪 140
6.6.1 数据结构 140
6.6.2 跟踪过程 140
6.6.3 程序分析 141
6.7 主要程序说明与调用关系 145
7 内存管理 147
7.1 VAX-11内存管理机构及硬件 147
7.1.1 VAX-11内存地址空间 147
7.2.1 系统空间的地址转换 149
7.2 地址转换 149
7.2.2 进程空间的地址转换 150
7.3 有关存储器管理控制的其它寄存器 151
7.3.1 存储器管理的开启 151
7.3.2 地址转换快表(转换缓冲器) 151
7.4 UNIX System V的内存管理 151
7.4.1 系统V内存管理概貌 151
7.4.2 主要数据结构说明 152
7.4.3 主要函数的分析及框图 153
8 进程通信(IPC) 163
8.1 UNIX SYSTEM V IPC程序包综述 163
8.2 消息(message) 164
8.2.1 消息机制的有关数据结构及其关系 165
8.2.2 通信操作及其实现 167
8.2.3 消息机制通信的过程举例 174
8.3 共享存储区(shared memory) 176
8.3.1 共享存储区机制的数据结构及其关系 177
8.3.2 共享存储区的建立 178
8.3.3 共享存储区的附加与拆卸 179
8.3.4 共享存储区状态信息的读取、修改和共享存储区的取消 185
8.4 信号量(semaphore) 186
8.4.1 信号量机制的数据结构及其关系 187
8.4.2 信号量集合的建立和描述字的获取 189
8.4.3 对信号量的操作 189
8.4.4 信号量集合状态信息的读取、修改及信号量集合的撤消 195
8.5 UNIX SYSTEM V IPC程序包主要程序一览表 198
9 字符设备管理 202
9.1 字符设备管理涉及的数据结构 202
9.1.1 字符缓冲池及其队列 202
9.1.2 字符设备控制结构tty 203
9.2 行式打印机的设备处理程序及驱动程序 203
9.2.1 行式打印机设备处理程序 203
9.2.2 行式打印机设备驱动和中断处理程序 204
9.3 终端机设备管理程序 211
9.3.1 在数据结构上的一些基本操作 211
9.3.2 终端机设备处理程序 215
10.1.1 磁盘驱动 233
10 块设备管理 233
10.1 磁盘和磁带驱动 233
10.1.2 磁带驱动 255
10.2 缓冲区管理程序 274
10.2.1 缓冲管理算法 274
10.2.2 缓冲区管理程序 275
11 系统初启 286
11.1 start.s程序 286
11.2 mlsotup(lastaddr.startpe)程序 287
11.3 main( )程序 287
11.4 主要程序说明与调用关系 290