《UNIX高级教程 系统技术内幕》求取 ⇩

第1章简介1

1.1 简介1

1.1.1 简史1

1.1.2 创始之初1

1.1.3 繁衍2

1.1.4 BSD3

1.1.5 System V4

1.1.6 商业化4

1.1.8 标准5

1.1.7 Mach5

1.1.9 OSF和UI6

1.1.10 SVR4及其之后7

1.2 演变的动力7

1.2.1 功能7

1.2.2 网络8

1.2.3 性能8

1.2.4 硬件变化9

1.2.5 改进质量9

1.2.6 模式变化9

1.2.8 简洁就是美10

1.2.7 其他应用领域10

1.2.9 灵活性11

1.3 回顾与展望12

1.3.1 UNIX好在哪里12

1.3.2 UNIX的误区在哪儿13

1.4 本书的范围14

1.5 参考文献15

第2章进程与内核17

2.1 简介17

2.2 模式,空间和上下文19

2.3 进程抽象20

2.3.1 进程状态21

2.3.2 进程上下文22

2.3.3 用户凭证23

2.3.4 u区和proc结构24

2.4 内核态下运行25

2.4.1 系统调用接口26

2.4.2 中断处理27

2.5 同步29

2.5.2 中断30

2.5.1 阻塞操作30

2.5.3 多处理器32

2.6 进程调度32

2.7 信号33

2.8 新进程和程序33

2.8.1 fork和exec34

2.8.2 进程创建35

2.8.3 fork 优化35

2.8.4 执行一个新程序36

2.8.5 进程终止37

2.8.6 等待进程终止38

2.8.7 僵尸(Zombie)进程39

2.9 小结39

2.10 练习39

2.11 参考文献40

第3章线程和轻量级进程41

3.1 简介41

3.1.1 动机41

3.1.2 多线程和多处理器42

3.2 基本抽象概念44

3.1.3 并发和并行44

3.2.1 内核线程45

3.2.2 轻量级进程45

3.2.3 用户线程47

3.3 轻量级进程设计——要考虑的问题50

3.3.1 fork的语义50

3.3.2 其他的系统调用51

3.3.3 信号传递和处理51

3.3.4 可视性52

3.3.5 堆栈增长52

3.4.2 线程库的实现53

3.4 用户级线程库53

3.4.1 编程接口53

3.5 调度器调用54

3.6 Solaris和SVR4的多线程处理55

3.6.1 内核线程56

3.6.2 轻量级进程的实现56

3.6.3 用户线程57

3.6.4 用户线程的实现58

3.6.5 中断处理59

3.6.6 系统调用处理59

3.7.1 Mach的抽象概念——任务和线程60

3.7 Mach中的线程60

3.7.2 Mach的C-threads61

3.8 Digital UNIX62

3.8.1 UNIX接口62

3.8.2 系统调用和信号64

3.8.3 pthreads线程库64

3.9 Mach 3.0的续体65

3.9.1 编程模型65

3.9.2 使用续体66

3.9.3 优化67

3.9.4 分析68

3.10 小结68

3.11 练习68

3.12 参考文献69

第4章信号和会话管理72

4.1 简介72

4.2 信号生成和处理72

4.2.1 信号处理73

4.2.2 信号生成75

4.2.4 睡眠和信号76

4.2.3 曲型情景76

4.3 不可靠信号77

4.4 可靠的信号78

4.4.1 主要特性78

4.4.2 SVR3的实现79

4.4.3 BSD信号管理80

4.5 SVR4信号机制81

4.6 信号机制的实现82

4.6.1 信号生成82

4.7 异常83

4.6.2 信号传递和处理83

4.8 Mach中的异常处理84

4.8.1 异常端口84

4.8.2 错误处理85

4.8.3 调试器的交互86

4.8.4 分析86

4.9 进程组和终端管理87

4.9.1 基本概念87

4.9.2 SVR3模型87

4.9.3 局限性89

4.9.4 4.3 BSD中的进程组和终端89

4.10 SVR4会话的体系结构91

4.9.5 缺点91

4.10.2 会话和进程组92

4.10.1 目的(动机)92

4.10.3 数据结构93

4.10.4 控制终端94

4.10.5 4.4 BSD中会话的实现95

4.11 小结95

4.12 练习95

4.13 参考文献97

5.1 简介98

第5章进程调度98

5.2 时钟中断处理99

5.2.1 调出莲表99

5.2.2 报警101

5.3 调度器的目标101

5.4 传统的UNIX调度102

5.4.1 进程优先级103

5.4.2 调度器的实现104

5.4.3 运行队列管理105

5.5 SVR4的调度器106

5.4.4 分析106

5.5.1 类无关层107

5.5.2 调度类的接口108

5.5.3 分时类110

5.5.4 实时类111

5.5.5 系统调用priocntl112

5.5.6 分析113

5.6 Solaris2.x调度的改善114

5.6.1 抢占式内核114

5.6.2 多处理器的支持114

5.6.3 隐式调度115

5.6.4 优先级逆转116

5.6.5 优先级继承的实现118

5.6.6 优先继承的局限性120

5.6.7 Turnstiles120

5.6.8 分析121

5.7 mach中的调度121

5.7.1 多处理器的支持122

5.8 Digital UNIX的实时调度器124

5.8.1 多处理器支持124

5.9.2 最终期限驱动调度125

5.9 其他的一些调度实现125

5.9.1 fair share调度125

5.9.3 三级(Three-Level)调度器126

5.10 小结127

5.11 练习127

5.12 参考文献128

第6章进程间通信130

6.1 简介130

6.2 通用IPC方法130

6.2.2 管道131

6.2.1 信号131

6.2.3 SVR4的管道133

6.2.4 进程跟踪133

6.3 System V的进程间通信135

6.3.1 公共元素135

6.3.2 信号量136

6.3.3 消息队列139

6.3.4 共享内存141

6.3.5 讨论143

6.4 Mach IPC143

6.4.1 基本概念144

6.5 消息145

6.5.1消息的数据结构146

6.5.2 消息传递接口147

6.6 端口148

6.6.1端口名字空间148

6.6.2 端口数据结构148

6.6.3 端口变换149

6.7 消息传递149

6.7.1 端口权力的传递150

6.7.2 脱机内存152

6.7.4 通知154

6.7.3 控制流154

6.8 端口操作155

6.8.1 释放一个端口155

6.8.2 备份端口155

6.8.3 端口集合155

6.8.4 端口的添加157

6.9 扩展性158

6.10 Mach 3.0的改进159

6.10.1 一次发送权159

6.11 讨论160

6.10.2 Mach 3.0的通知160

6.10.3 发送权的用户引用记数160

6.12 小结161

6.13 练习161

6.14 参考文献162

第7章同步和多处理器164

7.1 简介164

7.2 传统UNIX内核中的同步165

7.2.1 中断屏蔽165

7.2.2 睡眠和唤醒165

7.2.3 传统方法的局限性166

7.3 多处理器系统167

7.3.1 内存模型167

7.3.2 同步支持169

7.3.3 软件体系结构170

7.4 多处理器同步问题170

7.4.1 唤醒丢失问题171

7.4.2 巨群问题171

7.5 信号灯172

7.5.3 用于控制可计数资源的信号灯173

7.5.2 使用的信号灯的事件等待173

7.5.1 提供互斥访问的信号灯173

7.5.4 信号灯的缺点174

7.5.5 护卫174

7.6 自旋锁175

7.6.1 自旋锁的使用176

7.7 条件变量176

7.7.1 实现问题178

7.7.2 事件178

7.8.1 设计考虑179

7.8 读写锁179

7.7.3 阻塞锁179

7.8.2 实现180

7.9 引用计数181

7.10 其他考虑182

7.10.1 死锁避免182

7.10.2 递归锁183

7.10.3 阻塞还是自旋184

7.10.4 锁什么184

7.10.5 粒度和持续时间184

7.11.1 SVR4.2/MP185

7.11 例子分析185

7.11.2 Digital UNIX186

7.11.3 其他实现187

7.12 小结188

7.13 练习188

7.14 参考文献189

第8章文件系统接口和框架191

8.1 简介191

8.2 文件的用户接口191

8.2.1 文件和目录192

8.2.2 文件属性193

8.2.3 文件描述符195

8.2.4 文件I/O197

8.2.5 分散-聚集I/O(Scatter-Gather I/O)197

8.2.6 文件加锁198

8.3 文件系统199

8.3.1 逻辑磁盘200

8.4 特殊文件200

8.4.1 符号链接200

8.5 文件系统框架202

8.4.2 管道和FIFO202

8.6 vnode/vfs体系结构203

8.6.1 目标203

8.6.2 设备I/O的经验204

8.6.3 vnode/vfs接口概述206

8.7 实现概述207

8.7.1 目标207

8.7.2 v节点和打开文件208

8.7.3 v节点209

8.7.4 v节点引用计数210

8.7.5 vfs对象211

8.8 文件系统相关对象212

8.8.1 每个文件的私有数据212

8.8.2 vnodeops向量213

8.8.3 vfs层中的文件系统相关部分214

8.9 安装一个文件系统214

8.9.1 虚拟文件系统转换215

8.9.2 mount的实现215

8.9.3 VFS-MOUNT处理216

8.10 对文件的操作216

8.10.1 路径名遍历216

8.10.2 目录查找缓存217

8.10.3 VOP_LOOKUP操作218

8.10.4 打开文件219

8.10.5 文件I/O219

8.10.6 文件属性220

8.10.7 用户凭证220

8.11 分析220

8.11.1SVR4实现的缺点221

8.11.2 4.4BSD模型222

8.12 小结223

8.11.3 OSF/1方法223

8.13 练习224

8.14 参考文献225

第9章文件系统实现227

9.1 简介227

9.2 System V文件系统(s5fs)228

9.2.1 目录228

9.2.2 i节点229

9.2.3 超级块231

9.3.1 内存i节点232

9.3 s5fs内核组织232

9.3.2 i节点查找233

9.3.3 文件I/O233

9.3.4 i节点的分配与回收234

9.4 对s5fs的分析236

9.5 伯克利快速文件系统(FFS)236

9.6 硬盘结构237

9.7 磁盘组织238

9.7.1 块和碎片238

9.7.2 分配策略239

9.8 FFS的增强功能240

9.9 分析241

9.10 临时文件系统242

9.10.1 内存文件系统243

9.10.2 tmpfs文件系统243

9.11 特殊目的文件系统244

9.11.1 specfs文件系统244

9.11.2 /proc文件系统245

9.11.3 处理器文件系统246

9.11.4 半透明文件系统247

9.12.1 基本操作248

9.12 以往的磁盘缓存248

9.12.3 优点249

9.12.2 缓冲区头结构249

9.12.4 缺点250

9.12.5 保证文件系统的一致性250

9.13 小结251

9.14 练习251

9.15 参考文献252

10.1 简介255

10.2 分布式文件系统的一般特征255

第10章分布式文件系统255

10.2.1 设计考虑256

10.3 网络文件系统(NFS)256

10.3.1 用户透视257

10.3.2 设计目标258

10.3.3 NFS组成258

10.3.4 无状态260

10.4 协议族261

10.4.1 扩展数据表示(XDR)261

10.4.2 远程过程调用(RPC)262

10.5.1 控制流264

10.5 NFS实现264

10.5.2 文件句柄265

10.5.3 Mount操作265

10.5.4 路径名查找266

10.6 UNIX语义266

10.6.1 打开文件权限266

10.6.2 删除打开文件267

10.6.3 读和写267

10.7.3 延迟写268

10.7.2 客户端高速缓存268

10.7.1 性能瓶颈268

10.7 NFS性能268

10.7.4 重传高速缓存269

10.8 专用NFS服务器271

10.8.1 Auspex功能性多处理器结构271

10.8.2 IBM的HA-NFS服务器272

10.9 NFS安全性273

10.9.1 NFS访问控制273

10.9.2 UID重新映射274

10.9.3 root重新映射274

10.10 NFSv3275

10.11 远程文件共享(RFS)文件系统276

10.12 RFS结构276

10.12.1 远程消息协议277

10.12.2 有状态操作278

10.13 RFS实现278

10.13.1 远程安装278

10.13.2 RFS客户和服务器280

10.13.3 崩溃恢复280

10.14 客户端高速缓存281

10.13.4 其他问题281

10.14.1 高速缓存一致性282

10.15 Andrew文件系统283

10.15.1 可扩展的结构284

10.15.2 存储和名字空间组织284

10.15.3 会话语义285

10.16 AFS实现286

10.16.1 缓存以及一致性286

10.16.2 路径名查找287

10.16.3 安全性287

10.18 DCE分布式文件系统(DCE DFS)288

10.17 AFS的缺陷288

10.18.1 DFS体系结构289

10.18.2 高速缓冲区一致性289

10.18.3 令牌管理器291

10.18.4 其他DFS服务291

10.18.5 分析292

10.19 小结292

10.20 练习293

10.21 参考文献294

11.2 传统文件系统的局限298

11.1 简介298

第11章高级文件系统298

11.2.1 FFS磁盘布局299

11.2.2 写的主导性300

11.2.3 元数据更新301

11.2.4 崩溃恢复301

11.3 文件系统成簇(Sun-FFS)302

11.4 日志方法303

11.4.1 基本特征303

11.5 日志结构文件系统304

11.6 4.4BSD日志文件系统305

11.6.1 写日志306

11.6.2 数据检索306

11.6.3 崩溃恢复307

11.6.4 清除进程307

11.6.5 分析308

11.7 元数据日志309

11.7.1 正常操作309

11.7.2 日志的一致性310

11.7.4 分析312

11.7.3 崩溃恢复312

11.8 Episode文件系统313

11.8.1 基本抽象313

11.8.2 结构314

11.8.3 记日志315

11.8.4 其他特性315

11.9 监视器(watchdog)316

11.9.1 目录监视器317

11.9.2 消息通道317

11.9.3 应用318

11.10.1 使用端口(portals)319

11.10 4.4BSD端口文件系统319

11.11 堆栈式文件系统层320

11.11.1 框架和接口321

11.11.2 Sun Soft原型322

11.12 4.4BSD文件系统接口323

11.12.1 Nullfs和Union Mount文件系统324

11.13 小结324

11.14 练习324

11.15 参考文献325

12.1 简介328

第12章内核内存管理328

12.2 功能需求329

12.2.1 评估标准330

12.3 资源映射图分配器331

12.3.1 分析332

12.4 简单2次幂空闲表333

12.4.1 分析334

12.5 McKusick-Karels分配器335

12.5.1 分析336

12.6 伙伴系统337

12.7.1 Lazy合并339

12.6.1 分析339

12.7 SVR4 Lazy伙伴算法339

12.7.2 SVR4实现细节340

12.8 Mach-OSF/1的Zone分配器341

12.8.1 垃圾收集341

12.8.2 分析342

12.9 多处理器的分层分配器343

12.9.1 分析344

12.10.1 对象复用345

12.10.2 硬件Cache利用率345

12.10 Solaris2.4的Slab分配器345

12.10.3 分配器footprint346

12.10.4 设计与接口346

12.10.5 实现347

12.10.6 分析348

12.11 小结349

12.12 练习349

12.13 参考文献350

第13章虚存352

13.1 简介352

13.1.1内存管理的石器时代353

13.2 分页355

13.2.1功能需求355

13.2.2 虚拟地址空间356

13.2.3 页面初始访问357

13.2.4 交换区357

13.2.5 转换映射图358

13.2.6 页面替换策略359

13.3 硬件需求360

13.3.1 MMU缓存361

13.3.2 Intel 80x86362

13.3.3 IBM RS/6000364

13.3.4 MIPS R3000367

13.4 4.3BSD实例研究368

13.4.1 物理内存369

13.4.2 地址空间370

13.4.3 页面在哪里371

13.4.4 交换区372

13.5 4.3BSD内存管理操作373

13.5.1 创建进程373

13.5.2 页面失效处理375

13.5.3 空闲页面链表376

13.5.4 交换377

13.6 分析379

13.7练习380

13.8 参考文献380

第14章SVR4 VM体系结构382

14.1 动机382

14.2 内存映射文件382

14.2.1 mmap及相关系统调382用384

14.3 VM设计原理385

14.4 基本抽象概念385

14.4.1 物理内存386

14.4.2 地址空间387

14.4.3 地址映射388

14.4.4 匿名页面389

14.4.5 硬件地址转换390

14.5 段驱动程序391

14.5.1 seg-vn391

14.5.2 seg-map392

14.5.3 seg-dev393

14.5.4 seg-kmem393

14.5.5 seg kp393

14.6 交换层393

14.7 VM操作395

14.7.1 创建一个新映射395

14.7.2 匿名页面处理396

14.7.3 创建进程397

14.7.4 共享匿名页面397

14.7.5 页面失效处理399

14.7.6 共享内存400

14.7.7 其他部件400

14.8 与v节点子系统的交互401

14.8.1 v节点接口变化402

14.8.2 统一的文件访问402

14.8.3 其他问题404

14.9 Solaris中的虚拟交换空间405

14.9.1 扩展交换空间405

14.9.2 虚交换管理405

14.10 分析407

14.9.3 讨论407

14.11 性能改进409

14.11.1 高失效率原因409

14.11.2 SVR4对SunOS VM实现的改进410

14.11.3 结果与讨论410

14.12 小结411

14.13 练习411

14.14 参考文献412

15.2.1 设计目标413

15.2 Mach的内存管理设计413

15.1 简介413

第15章进一步关于内存管理的主题413

15.2.2 编程接口414

15.2.3 基本抽象概念415

15.3 共享内存设施417

15.3.1 copy-on-write共享417

15.3.2 读写共享418

15.4 内存对象和Pager419

15.4.1 内存对象初始化419

15.4.2 内核与Pager间的接口421

15.5 外部Pager和内部Pager422

15.4.3 内核与Pager交互422

15.5.1 一个网络共享内存服务器423

15.6 页面替换425

15.7 分析426

15.8 4.4BSD的内存管理427

15.9 快表(TLB)一致性429

15.9.1 单处理机上的TLB一致性430

15.9.2 多处理机问题430

15.10 Mach的TLB击落算法431

15.10.1 同步和死锁避免432

15.11 SVR4和SVR4.2 UNIX中的TLB一致性433

15.10.2 讨论433

15.11.1 SVR4/MP434

15.11.2 SVR4.2/MP434

15.11.3 Lazy击落算法435

15.11.4 立即击落435

15.11.5 讨论437

15.12 其他TLB一致性算法437

15.13 虚地址缓存438

15.13.1 映射变化439

15.13.3 DMA操作440

15.13.2 地址别名440

15.13.4 维护缓存一致性441

15.13.5 分析442

15.14 练习442

15.15 参考文献443

第16章设备驱动程序I/O446

16.1 简介446

16.2 概述446

16.2.1硬件配置447

16.2.2 设备中断449

16.3 设备驱动程序框架450

16.3.1 设备和驱动程序分类450

16.3.2 调用驱动程序代码451

16.3.3 设备开关表451

16.3.4 驱动程序入口点453

16.4 I/O子系统454

16.4.1 主、次设备号454

16.4.2 设备文件455

16.4.3 specfs文件系统456

16.4.4 公共snode457

16.4.5 设备克隆458

16.4.6 字符设备I/O459

16.5 poll系统调用460

16.5.1 poll的实现460

16.5.2 4.3BSD select系统调用462

16.6 块I/O462

16.6.1 buf结构463

16.6.2 与v节点的交互464

16.6.3 设备访问方法465

16.6.4 到块设备的raw I/O466

16.7 DDI/DKI说明467

16.7.1 建议468

16.7.2 第三部分函数469

16.7.3 其他部分469

16.8 新的SVR4版本470

16.8.1 多处理器可靠驱动程序471

16.8.2 SVR4.1/ES的变化471

16.8.3 动态加载和卸载472

16.9 发展趋势474

16.10 小结475

16.11 练习475

16.12 参考文献476

17.1 目的477

17.2 概述477

第17章477

17.3 消息和队列479

17.3.1 消息480

17.3.2 虚拟拷贝481

17.3.3 消息类型482

17.3.4 队列和模块483

17.4 流I/O485

17.4.3 流量控制486

17.4.1 STREAMS调度程序486

17.4.2 优先带(Priority Bands)486

17.4.4 驱动程序尾488

17.4.5 流头488

17.5 配置和设置489

17.5.1 配置一个模块或驱动程序489

17.5.2 打开流491

17.5.3 插入(Pushing)模块492

17.5.4 克隆设备493

17.6 STREAMS ioctl493

17.6.1 I STR ioctl处理494

17.6.2 透明ioctl495

17.7 内存分配495

17.7.1 扩展STREAMS缓冲区496

17.8 多路复用497

17.8.1 上部多路复用器498

17.8.2 下部多路复用器498

17.8.3 链接流499

17.8.4 数据流500

17.9.1 STREAMS FIFO501

17.9 FIFO和管道501

17.8.5 普通链接和持久链接501

17.9.2 STREAMS管道502

17.10 网络接口503

17.10.1 传输供应者接口(TPI)504

17.10.2 传输层接口(TLI)504

17.10.3 sockets505

17.10.4 SVR4 Socket实现507

17.11 小结508

17.12 练习508

17.13 参考文献509

1999《UNIX高级教程 系统技术内幕》由于是年代较久的资料都绝版了,几乎不可能购买到实物。如果大家为了学习确实需要,可向博主求助其电子版PDF文件(由(美)(U.瓦哈利亚)Uresh Vahalia著;聊鸿斌等 1999 北京:清华大学出版社 出版的版本) 。对合法合规的求助,我会当即受理并将下载地址发送给你。

高度相关资料

UNIX系统(1989 PDF版)
UNIX系统
1989 北京:机械工业出版社
UNIX 技术——系统管理篇(1998 PDF版)
UNIX 技术——系统管理篇
1998
UNIX系统程序设计技术( PDF版)
UNIX系统程序设计技术
陕西电子编辑部
UNIX系统教程( PDF版)
UNIX系统教程
新闻出版局
UNIX初级教程( PDF版)
UNIX初级教程
北京科海培训中心
UNIX高级编程(1992 PDF版)
UNIX高级编程
1992 上海电子计算机厂科技服务部培训部
TURBO C2.0高级系统程序设计技术(1991 PDF版)
TURBO C2.0高级系统程序设计技术
1991 北京希望电脑公司
AIX/UNIX操作系统教程(1998 PDF版)
AIX/UNIX操作系统教程
1998 天津:南开大学出版社
UNIX/XENIX系统程序设计技术(1991 PDF版)
UNIX/XENIX系统程序设计技术
1991 西安:陕西科学技术出版社
UNIX系统高级编程指南(1991 PDF版)
UNIX系统高级编程指南
1991 中国科学院希望高级电脑技术公司
DOS汉字系统高级技术(1994 PDF版)
DOS汉字系统高级技术
1994 天津:天津科学技术出版社
实用UNIX系统教程(1997 PDF版)
实用UNIX系统教程
1997 长沙:国防科技大学出版社
UNIX操作系统教程(1985 PDF版)
UNIX操作系统教程
1985 西安:西安电子科技大学出版社
UNIX系统初级教程(1996 PDF版)
UNIX系统初级教程
1996 西安:西安电子科技大学出版社
技术大盗  苏联窃取美国高级技术内幕(1986 PDF版)
技术大盗 苏联窃取美国高级技术内幕
1986 北京:军事译文出版社