《大话计算机 计算机系统底层架构原理极限剖析 卷3》PDF下载

  • 购买积分:36 如何计算积分?
  • 作  者:冬瓜哥著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2019
  • ISBN:9787302526476
  • 页数:1510 页
图书介绍:现代计算机系统的软硬件架构十分复杂,是所有IT相关技术的根源。本书尝试从原始的零认知状态开始,逐步从最基础的数字电路一直介绍到计算机操作系统以及人工智能。本书用通俗的语言、恰到好处的疑问、符合原生态认知思维的切入点,来帮助读者洞悉整个计算机底层世界。本书在写作上遵循“先介绍原因,后思考,然后介绍解决方案,最终提炼抽象成概念”的原则。全书脉络清晰,带领读者重走作者的认知之路。本书集科普、专业一体,用通俗详尽的语言、图表、模型来描述专业知识。

第10章 计算机操作系统——舞台幕后的工作者 1068

10.1 内存布局与管理 1068

10.1.1 实模式与保护模式 1068

10.1.2 分区式内存管理 1070

10.1.3 8086分段+实模式 1071

10.1.4 80286分段+保护模式 1074

10.1.4.1 全局描述符表 1074

10.1.4.2 实现权限检查 1076

10.1.4.3 本地/局部描述符表 1076

10.1.5 80386分段+分页模式 1079

10.1.5.1 页目录/页表/页面 1079

10.1.5.2 比较分页和分段机制 1080

10.1.5.3 Flat分段模式 1081

10.1.5.4 分页的控制参数 1083

10.1.5.5 MMU和TLB 1086

10.1.6 DOS下的内存管理 1087

10.1.6.1 常规内存和上位内存 1088

10.1.6.2 EMS内存扩充卡 1089

10.1.6.3 上位内存块(UMB) 1090

10.1.6.4 高位内存区(HMA) 1090

10.1.6.5 扩展内存(XMS) 1090

10.1.6.6 用XMS顶替EMS 1090

10.1.7 后DOS时代x86内存布局 1091

10.1.7.1 E820表 1091

10.1.7.2 物理地址扩展(PAE) 1092

10.1.7.3 x86物理内存布局 1092

10.1.8 Linux下的内存管理 1094

10.1.8.1 32位Linux内存布局 1094

10.1.8.2 相关模块数据结构 1098

10.1.8.3 brk和mmap系统调用 1100

10.1.8.4 malloc/calloc/realloc函数 1104

10.1.8.5 buddy和slab算法 1105

10.2 任务创建与管理 1109

10.2.1 32位x86处理器任务管理支持 1110

10.2.1.1 用户栈与内核栈 1111

10.2.1.2 线程和中断上下文 1113

10.2.1.3 任务切换机制 1116

10.2.1.4 任务嵌套/任务链 1122

10.2.1.5 小结 1125

10.2.2 32位Linux的任务创建与管理 1126

10.2.2.1 PCB/task_struct{} 1127

10.2.2.2 Linux的任务软切换机制 1130

10.2.2.3 进程0的创建和运行 1132

10.2.2.4 进程1和2的创建和运行 1136

10.2.2.5 在用户态创建和运行任务 1148

10.2.2.6 fork()自测题及深入思考 1153

10.2.2.7 用户空间线程/协程 1155

10.2.2.8 任务状态 1158

10.3 任务间通信与同步 1159

10.3.1 信号及其处理 1159

10.3.2 等待队列与唤醒 1172

10.3.3 进程间通信 1177

10.3.4 锁和同步 1178

10.3.4.1 信号量(Semaphore) 1178

10.3.4.2 互斥量(Mutex) 1181

10.3.4.3 自旋锁(Spinlock) 1181

10.3.4.4 快速互斥量(Futex) 1184

10.3.4.5 条件量(Condition) 1186

10.3.4.6 完成量(Completion) 1187

10.3.4.7 读写锁(RWlock)和RCU锁 1188

10.4 任务调度基本框架 1188

10.4.1 任务的调度时机 1189

10.4.2 用户态和内核态抢占 1190

10.4.3 中期小结 1196

10.4.4 实时与非实时内核 1198

10.4.5 任务调度基本数据结构 1201

10.4.5.1 任务优先级描述 1201

10.4.5.2 三大子调度器 1203

10.4.5.3 运行队列的组织 1204

10.5 任务调度核心方法 1211

10.5.1 简单粗暴的实时任务调度 1211

10.5.2 左右为难的普通任务调度 1213

10.5.3 2.4内核中的O(n)调度器 1214

10.5.4 2.5内核中的O(1)调度器 1215

10.5.5 未被接纳的RSDL普通任务调度器 1216

10.5.6 沿用至今的CFS普通任务调度器 1219

10.5.6.1 指挥棒变为运行时间 1219

10.5.6.2 weight/period/vruntime 1219

10.5.7 多处理器任务负载均衡 1221

10.5.8 任务的Affinity 1224

10.6 中断响应及处理 1224

10.6.1 中断相关基本知识 1224

10.6.1.1 Local和I/O APIC 1224

10.6.1.2 8259A (PIC)中断控制器 1229

10.6.1.3 MSI/MSI-X底层实现 1230

10.6.1.4 IPI处理器间中断 1231

10.6.1.5 可屏蔽/不可屏蔽中断 1232

10.6.1.6 中断的共享和嵌套 1233

10.6.1.7 中断内部/外部优先级 1234

10.6.1.8 中断Affinity及均衡 1234

10.6.2 中断相关数据结构 1238

10.6.2.1 中断描述符表IDT 1240

10.6.2.2 irq_desc[]和vector_irq[] 1243

10.6.2.3 相关数据结构的初始化 1246

10.6.3 中断基本处理流程 1255

10.6.4 80h号中断(系统调用) 1257

10.6.5 中断上半部和下半部 1260

10.6.5.1 softirq 1261

10.6.5.2 ksoftirqd线程 1262

10.6.5.3 softirq与preempt_count 1264

10.6.5.4 tasklet 1265

10.6.5.5 workqueue 1266

10.6.6 中断线程化 1271

10.6.7 系统的驱动力 1272

10.7 时间管理与时钟中断 1272

10.7.1 表哥的收藏 1273

10.7.1.1 RTC 1273

10.7.1.2 PIT 1273

10.7.1.3 HPET 1274

10.7.1.4 Local Timer 1275

10.7.1.5 TSC 1277

10.7.2 表哥的烦恼 1277

10.7.2.1 软计时 1277

10.7.2.2 软Timer 1277

10.7.2.3 软Tick 1278

10.7.2.4 单调时钟源 1278

10.7.2.5 中断广播唤醒 1279

10.7.2.6 强制周期性中断广播 1280

10.7.3 表哥的记忆 1280

10.7.3.1 Clocksource Device 1280

10.7.3.2 Clockevent Device 1281

10.7.3.3 Local/Global Device 1284

10.7.3.4 HZ/Jiffy/NOHZ 1284

10.7.3.5 各种时间种类 1284

10.7.3.6 低精度定时器时间轮 1285

10.7.3.7 高精度定时器红黑树 1287

10.7.4 表哥的思维 1289

10.7.4.1 tickinit() 1289

10.7.4.2 init_timers() 1290

10.7.4.3 hrtimers_init() 1291

10.7.4.4 timekeeping_init() 1291

10.7.4.5 time_init()/late_time_init() 1291

10.7.4.6 APIC_init_uniprocessor() 1299

10.7.4.7 do_basic_setup()/do_initcalls() 1299

10.7.4.8 初始化流程全局图 1299

10.7.5 表哥的行动 1299

10.7.5.1 初始的低精度+HZ模式 1299

10.7.5.2 切换到低精度+NOHZ模式 1302

10.7.5.3 切换到高精度+NOHZ模式 1305

10.7.5.4 idle与NOHZ 1305

10.7.5.5 切换高精度模式流程图 1306

10.8 VFS与本地FS 1310

10.8.1 VFS目录层 1310

10.8.1.1 目录与VFS 1310

10.8.1.2 目录承载者 1311

10.8.2 本地FS相关数据结构 1313

10.8.3 VFS相关数据结构及初始化 1314

10.8.3.1 Mount流程 1315

10.8.3.2 Open流程 1319

10.8.4 从read到Page Cache 1319

10.8.5 从Page Cache到通用块层 1320

10.8.6 Linux下的异步I/O 1322

10.8.6.1 基于glibc的异步I/O 1324

10.8.6.2 基于libaio的异步I/O 1324

10.9 块I/O协议栈 1327

10.9.1 从通用块层到I/O调度层 1327

10.9.1.1 块设备与buffer page 1327

10.9.1.2 bio 1328

10.9.2 从I/O调度层到块设备驱动 1329

10.9.2.1 Request与Request Queue 1329

10.9.2.2 堵盖儿和掀盖儿 1331

10.9.2.3 _make_request主流程 1333

10.9.2.4 I/O Schedule 1335

10.9.3 相关数据结构的初始化 1335

10.9.3.1 request_queue初始化 1336

10.9.3.2 gendisk/scsi_disk/block_device初始化 1337

10.9.4 从块设备驱动到SCSI中间层 1338

10.9.5 从SCSI中间层到通道控制器驱动 1339

10.10 网络I/O协议栈 1339

10.10.1 socket的初始化 1342

10.10.2 socket的创建和绑定 1342

10.10.3 发起TCP连接 1343

10.13 小结 1347

第11章 现代计算机系统——形态与生态 1350

11.1 工业级相关计算机产品 1350

11.1.1 工业控制 1350

11.1.2 军工和航空航天 1351

11.2 企业级相关计算机产品 1352

11.2.1 芯片与板卡 1354

11.2.2 服务器 1356

11.2.2.1 塔式服务器 1356

11.2.2.2 机架式服务器 1357

11.2.2.3 刀片服务器 1359

11.2.2.4 模块化服务器 1362

11.2.2.5 整机柜服务器 1366

11.2.2.6 关键应用主机 1369

11.2.3 网络系统 1369

11.2.3.1 以太网卡 1369

11.2.3.2 以太网交换机和路由器 1370

11.2.4 存储系统 1372

11.2.4.1 机械磁盘 1375

11.2.4.2 固态硬盘 1387

11.2.4.3 SAN存储系统 1393

11.2.4.4 分布式存储系统 1402

11.2.4.5 数据恢复 1404

11.2.5 超融合系统 1407

11.2.6 数据备份和容灾系统 1411

11.2.7 云计算和云存储 1416

11.2.8 自主可控系统 1423

11.3 消费级相关计算机产品 1425

11.3.1 智能手机 1426

11.3.2 电视盒/智能电视 1426

11.3.3 摄像机 1427

11.3.4 玩具 1427

第12章 机器学习与人工智能 1430

12.1 回归分析:愚者千虑必有一得 1430

12.2 逻辑分类:不是什么都能一刀切 1433

12.3 神经网络:竟可万能拟合 1436

12.4 深度神经网络:四两拨千斤 1448

12.5 对象检测:先抠图后识别 1454

12.6 卷积神经网络:图像识别利器 1455

12.7 可视化展现:盲人真的摸出了象 1466

12.8 具体实现:搭台唱戏和硬功夫 1479

12.9 人工智能:本能、智能、超能 1491

尾声 狂想计算机——以创造者的名义 1494

1.狂想计算机 1494

2.狂想组合逻辑电路与通用代码 1495

3.狂想分子逻辑门与光逻辑门计算机 1495

4.狂想生物分子计算机 1497

5.狂想模拟信号计算机 1502

6.狂想空间场计算机 1504

7.狂想计算机世界的时空 1505