前言页 1
第0章 导论 1
本书适用对象 2
本书的编排风格 2
阅读本书所必需的背景知识 2
本书的组织结构 2
第1章 认识系统调用 5
何谓系统调用 6
系统调用的使用 7
系统调用的执行 7
核心程序的结构 9
系统调用与一般函数的区别 9
STREAMS 11
第2章 认识文件系统 13
目录与文件 14
文件的存取权限与性质设定 15
UNIX文件系统的内部结构 19
INODE 19
文件的内部结构 21
文件存取的方式 28
第3章 操作文件的系统调用 29
认识文件描述符(file descriptor) 30
OPEN系统调用 31
read与write系统调用 32
close系统调用 32
lseek系统调用 34
dup系统调用 38
link系统调用 39
unlink系统调用 40
fentl系统调用 41
stat与fatat系统调用 43
access系统调用 44
chomod系统调用 45
chown系统调用 45
chdir系统调用 46
chroot系统调用 46
mkdir与rmdir系统调用 47
mknod系统调用 47
pipe系统调用 49
mount与umount系统调用 52
文件描述符与文件指针的关系 53
将文件指针转换为文件描述符的函数 54
更周延稳定的系统调用 54
关于inode的进一步认识 55
第4章 控制终端机的系统调用 57
ioctl系统调用与终端机的输出输入 58
输入模式 60
输出模式 61
控制模式 62
区域模式 63
ioctl()在系统接口上的改进 69
STREAMS的概念 71
STREAMS的应用 73
Stream信息(message) 74
信息类型(Message Type) 74
控制信息与数据(Control Information Data) 75
信息的结构 76
putmsg()与getmsg() 77
信息的接收与传递 77
模块与驱动程序(Modules Drivers) 80
多任务(Multiplexing) 81
select()与poll() 85
异步输出输入(Asynchronous I/O)) 87
第5章 UNIX的快速缓冲区 89
为何要使用快速缓冲区 90
快速缓冲区的运作 90
快速缓冲区的数据结构 91
与快速缓冲区运作有关的子程序 96
breada子程序 97
bwrite子程序 97
bread子程序 97
binit子程序 97
getblk子程序 98
brelse子程序 99
使用快速缓冲区的负面影响 100
第6章 文件锁定与记录锁定 101
为什么需要文件锁定 102
文件锁定技术的变革 102
锁定的方式和种类 103
锁定的继承权 106
深入研究fentl()系统调用 106
lockf()函数 115
死锁(dead lock) 122
第7章 文件系统 125
s5文件系统 126
BSD.4.4的文件系统 126
快速文件系统(FFS) 126
记录结构文件系统(LFS) 127
存储器基本文件系统(MFS) 127
UFS-AT T版的快速文件系统 128
ufs的启动块 129
ufs的超级块 129
ufs的inode 129
ufs的存储(数据)块 130
ufs对目录的处理 131
sfs文件系统 132
vxfs文件系统 135
AIX的文件系统—JFS 136
AIX的虚拟文件系统 137
JFS的结构 137
UNIX的文件格式 137
ELF文件格式 140
第8章 进程的管理 143
进程与程序 144
进程的建立与执行 144
exec系统调用 150
fork与exec的应用实例 157
进程的优先权 157
线程(Thread)的概念 159
线程与资源 159
线程的类型 160
以函数库为基础的线程 160
以核心支持为基础的线程 161
第9章 分时与实时系统调度 163
前言 164
系统调度的目标 164
时间配额 164
UNIX的调度程序(Scheduler) 165
进程的状态变化 167
实时系统(real time System) 168
UNIX如何支持实时系统 169
扩充原有的系统功能 169
主从(host/target)支持 170
兼容作业 170
重建核心程序但维持标准UNIX接口 170
加入夺取点(Preemption points) 171
实时系统的效率评估 171
控制系统调度的指令 171
构造调度程序 173
第10章 信号处理 177
何谓信号(signal) 178
SVR4及POSIX.1所定义的信号列表 179
信号的处理 184
处理信号的系统调用 184
sigset系统调用 189
kill系统调用 191
alarm系统调用 191
pause系统调用 192
旧有信号处理子程序的弊病 193
阻塞信号(Block Signal) 196
供需系统的模拟 198
信号屏蔽 205
SVR4新增的信号子程序 207
更多的例子 211
工作控制(Job Control) 227
信号使用实例——精确地计算时间 229
第11章 进程间的通讯 235
背景知识 236
pipe系统调用 236
命名管道与mknod系统调用 240
命名管道的应用——客户与服务器 241
第12章 进程间通讯进阶 251
IPC对象与消息队列 252
IPC对象的内容 252
观察IPC对象内容的系统指令 253
消息队列的使用 254
messgget系统调用 257
msgsnd与msgrcy系统调用 258
信息队列的限制 264
信号与讯号 264
CRTICAL SECTION 264
DIJKSTRA演算法 265
UNIX SVR4的信号 267
操作信号的系统调用 268
共享存储器 277
第13章 UNIX的存储器管理 287
UNIX的存储器管理策略 288
需求分页 289
trap的种类 290
将进程锁定在主存储器中 290
认识Trap 290
UNIX系统的存储器配置 291
进程的虚拟存储器寻址 291
fork与vfork 295
用户模式与核心程序模式的转换 295
第14章 问题与解答 297
何谓System Panics 298
什么是监视狗重设(Watchdog reset) 299
如何建立两个超级用户帐号 299
Zombie进程 300
每次登录都看到的信息是哪里来的 300
如何暂停造成高负荷的程序 304
O_NONBLOCK与O_NDELAY标志 304
挽救被误删的文件 305
ed的臭虫(bug) 306
目录上的常驻位 306
同样的程序为什么输出结果不同 307
魔术数字 308
启动X窗口时出现奇怪的信息 309
script的循环为何只执行一次 310
如何让程序在启动文件之前执行 310