图书介绍
操作系统原理·技术与编程2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载

- 蒋静,徐志伟著 著
- 出版社: 北京市:机械工业出版社
- ISBN:7111131606
- 出版时间:2004
- 标注页数:502页
- 文件大小:39MB
- 文件页数:519页
- 主题词:Linux操作系统-高等学校-教材
PDF下载
下载说明
操作系统原理·技术与编程PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
1.1 操作系统的定义2
1.1.1 计算机系统层次结构图2
目录2
第一部分 操作系统初始化2
第1章 操作系统概述2
1.1.2 操作系统的定义3
1.2.1 没有操作系统的第一代计算机4
1.2 操作系统发展过程中的设计需求分析4
1.2.2 具有简单批处理操作系统的第二代计算机5
1.2.3 简单批处理操作系统功能分析6
1.2.4 多道程序设计的批处理操作系统7
1.2.6 其他操作系统8
1.2.5 多道程序设计的分时操作系统8
1.3.1 大型系统软件分析方法9
1.3 内核体系结构模型9
1.3.2 操作系统结构模型10
1.3.3 UNLX内核系统结构模型11
1.4 Linux操作系统的出现12
1.5.1 操作系统运行的全过程13
1.5 操作系统如何运行一个用户程序13
1.5.2 客户/服务器工作流程14
1.5.3 客户/服务器实例15
1.6.1 重要思想19
1.6 重要思想和理论19
1.6.2 重要理论21
1.7 小结23
1.9 参考文献24
1.8 练习题24
2.1.1 微型计算机基本组成26
2.1 微型计算机硬件组成26
第2章 i386硬件与软件接口技术26
2.1.2 微处理器分类27
2.1.4 微型计算机总线结构28
2.1.3 微处理器结构的发展28
2.2.1 实模式下软件组织29
2.2 实模式软件结构29
2.2.3 实模式输入/输出地址空间31
2.2.2 实模式主存储器地址的产生31
2.3.1 描述符寄存器32
2.3 保护模式下存储器管理单元MMU32
2.3.2 描述符34
2.3.3 虚拟地址和虚拟地址空间36
2.3.4 虚实地址转换37
2.3.5 保护模式指令集38
2.4.1 多任务与分时系统39
2.4 保护模式和保护39
2.4.4 保护性检查40
2.4.3 保护机制40
2.4.2 保护环40
2.4.5 越级访问存储器的代码段和数据段41
2.5 任务切换机制43
2.6 小结44
2.8 参考文献45
2.7 练习题45
3.1 BIOS启动过程46
第3章 Linux系统引导过程46
3.1.1 i386芯片的启动状态47
3.1.2 BIOS加载操作系统引导程序48
3.2.1 软盘引导过程50
3.2 引导过程50
3.2.2 硬盘引导过程53
3.2.3 LILO运行过程分析55
3.3 实模式下的系统初始化setup()函数56
3.3.3 准备进入保护模式57
3.3.2 设置参数57
3.3.1 setup.S代码签名检查57
3.3.4 setup.S程序流程图59
3.3.6 setup.S中全局描述符表分析63
3.3.5 执行setup.S程序后内存分配图63
3.4 内核解压缩过程startup_32()65
3.5 保护模式下的系统初始化startup_32()67
3.5.2 设置全局描述符表70
3.5.1 在startup_32中完成临时页表的初始化70
3.7 练习题72
3.6 小结72
3.8 参考文献73
4.1.1 初始化与体系结构相关的硬件数据结构74
4.1 初始化系统内核74
第4章 启动Linux内核74
4.1.2 解析内核选项80
4.2 init()函数与init进程81
4.3.1 继续初始化系统内核82
4.3 init()函数执行流程82
4.3.3 init进程84
4.3.2 系统进程的生成84
4.4.1 执行脚本文件/etc/rc.d/rc.sysinit87
4.4 Shell命令文本的执行87
4.4.2 执行脚本文件/etc/rc.d/rcN.d目录中的各个命令88
4.5 小结89
4.4.3 各终端进程的生成89
4.6 练习题91
4.7 参考文献92
5.1.1 多道程序设计与分时共享94
5.1 并发控制94
第二部分 并发控制原理及其实现94
第5章 程序和进程94
5.1.2 并发控制的硬件支持95
5.2.1 程序与进程96
5.2 进程的定义和特征96
5.2.2 从并发机制理解进程98
5.3 线程99
5.2.3 进程的特征99
5.3.2 内核线程和用户线程100
5.3.1 多线程100
5.4 操作系统控制进程的基本方法101
5.5.1 进程控制块PCB102
5.5 内核中进程的实现102
5.5.2 进程状态104
5.5.3 Linux进程控制块105
5.5.4 Linux系统O号进程的控制块107
5.5.5 Linux进程状态108
5.6 进程的组织109
5.6.2 pidhash链表110
5.6.1 进程链表和运行队列链表110
5.7 内核创建新进程111
5.6.3 如何寻址当前进程的PCB111
5.8 Linuxfork的编程实现112
5.8.1 内核函数do_fork113
5.8.2 调用fork()的编程实例117
5.9.1 运行新程序的do_execve()118
5.9 Linuxexee的编程实现118
5.8.3 内核怎样运行一个新程序118
5.9.3 使用fork_exec组合的编程实例121
5.9.2 二进制处理程序load_binary()完成的工作121
5.10 从程序到进程123
5.10.1 文件系统中可执行文件的一般格式124
5.10.2 shell进程执行用户程序的过程125
5.12 编程实例——Linux守护进程的编程方法126
5.11 进程的终止126
5.12.1 进程组、会话和控制终端127
5.12.2 Linux守护进程编程细则129
5.12.3 Linux守护进程实例131
5.13 小结132
5.14 练习题133
5.15 参考文献134
6.1.1 竞争条件135
6.1 并发进程控制的基本原理135
第6章 互斥与同步135
6.1.2 同步与互斥136
6.1.3 对互斥操作的要求137
6.2.1 原子操作138
6.2 竞争条件产生的原因138
6.3 基于共享变量的同步操作139
6.2.2 原子操作的实例139
6.3.2 锁变量140
6.3.1 忙等待140
6.3.3 TestAndSet与Swap指令141
6.4 信号量142
6.5.1 DOWN操作146
6.5 内核使用的P、V操作实例146
6.5.2 UP操作149
6.5.5 同步索引节点的信号量151
6.5.4 同步内存描述符的信号量151
6.5.3 同步slab高速缓存的信号量151
6.6.2 关中断152
6.6.1 内核是不可强占的152
6.6 内核采用的其他同步技术152
6.7 等待对列及其操作153
6.8 小结155
6.9 练习题156
6.1 0参考文献157
7.1.1 可剥夺资源与不可剥夺资源158
7.1 死锁分析158
第7章 死锁与饥饿158
7.1.4 资源分配模型图159
7.1.3 死锁的条件159
7.1.2 死锁定义159
7.3.1 系统资源分配的表示方法160
7.3 死锁避免160
7.2 死锁预防160
7.3.2 系统拒绝启动进程161
7.3.3 系统拒绝分配资源162
7.4.1 死锁检测算法163
7.4 死锁检测和恢复163
7.4.3 从死锁中恢复164
7.4.2 死锁检测的时机164
7.6 饥饿165
7.5 最简单的死锁策略165
7.7 小结166
7.8 练习题167
7.9 参考文献168
8.1.1 调度程序的设计目标169
8.1 进程调度的基本原理169
第8章 进程调度169
8.1.2 选择合适的调度策略170
8.1.3 时间测度指标171
8.2.1 先来先服务172
8.2 非强占方式调度算法172
8.2.2 最短作业优先173
8.3.1 轮转法174
8.3 强占式调度算法174
8.2.3 优先级调度174
8.3.3 反馈调度算法175
8.3.2 多级队列175
8.4.1 在PCB中与调度有关的数据成员176
8.4 Linux进程调度的实现176
8.4.2 Linux调度策略177
8.4.3 Linux调度函数schedule()179
8.4.4 Linux调度机制183
8.5 调度程序的编程实例185
8.6 小结187
8.7 练习题188
8.8 参考文献189
9.1.1 Intel80386芯片的中断接口190
9.1 基于IBMPC机的中断接口电路190
第9章 中断技术190
9.1.2 使用82C59芯片连结外围设备的中断接口电路191
9.2.1 异常193
9.2 中断和异常193
9.2.2 中断和异常的优先级195
9.3.1 中断和异常向量196
9.3 中断向量表和中断描述符表196
9.4 Linux中断系统的初始化过程197
9.3.2 中断门和陷阱门的区别197
9.4.2 第二次初始化中断描述符表198
9.4.1 第一次初始化中断描述符表198
9.5.1 异常处理过程200
9.5 异常处理200
9.5.2 异常处理程序201
9.6.1 硬件设备使用的中断向量202
9.6 中断处理202
9.5.3 内核管理硬件资源的两种异常202
9.6.2 中断处理使用的数据结构203
9.6.3 中断系统初始化函数init_IRQ205
9.6.4 中断处理程序的执行过程206
9.6.6 执行所有的中断服务例程208
9.6.5 保存断点现场208
9.6.7 内核模式的设备驱动程序209
9.7 下半部分210
9.7.1 Linux对下半部分的组织211
9.7.2 执行do_bottom_half()函数212
9.8 动态安装和释放中断处理程序213
9.7.3 调度do_bottom_half()函数运行的时机213
9.9 从中断和异常返回215
9.10 一个中断处理实例218
9.10.2 定时器中断的下半部219
9.10.1 定时器中断的上半部219
9.10.3 预定义的任务队列220
9.11 小结222
9.12 练习题223
9.13 参考文献224
10.1 标准C函数库和系统调用225
第10章 系统调用接口225
10.2.1 陷阱门处理的模式转换226
10.2 模式转换的硬件处理226
10.2.2 调用门处理的模式转换227
10.3.1 内核对系统调用的初始化229
10.3 系统调用接口229
10.3.2 系统调用的执行流程230
10.3.3 封装例程231
10.3.4 系统调用号与系统调用表232
10.3.5 system_call的执行过程233
10.4 lcall7的执行过程234
10.5 内核中添加新系统调用的实例235
10.6 小结238
10.8 参考文献239
10.7 练习题239
11.1 存储器功能需求分析242
第11章 存储器管理及Linux实现242
第三部分 OS资源管理及其实现242
11.1.3 共享243
11.1.2 保护243
11.1.1 重定位243
11.3 内存管理244
11.2.2 物理组织244
11.2 存储器的组织方式244
11.2.1 逻辑组织244
11.3.1 固定分区245
11.3.2 动态分区246
11.4 位图247
11.5 伙伴系统248
11.6.2 固定分区使用的重定位技术250
11.6.1 存储器管理使用的地址类型250
11.6 重定位技术250
11.6.3 分页使用的重定位技术251
11.6.4 分段使用的重定位技术252
11.7 虚拟存储器管理技术253
11.7.2 虚拟存储器管理软件254
11.7.1 局部性原理254
11.7.3 交换区256
11.8 通用存储器管理模型256
11.9 Linux在i386中的分段和分页257
11.9.1 Linux使用的分段258
11.9.2 Linux使用的分页260
11.9.3 Linux在i386平台上定义的页表项格式261
11.10 Linux内存管理262
11.10.1 描述内存页框的page数据结构263
11.10.2 基于buddy算法的内存页框管理264
11.11 基于slab算法的内存区管理266
11.11.1 slab分配器的组成267
11.11.2 slab分配器与页框级分配器的接口和实现269
11.11.3 连续内存区的分配和释放函数270
11.12.1 描述非连续内存区的数据结构271
11.12 非连续内存区的分配和释放271
11.12.2 分配和释放非连续内存区的函数272
11.13.1 structmm_struct和structvm_area_struct结构274
11.13 进程的地址空间274
11.13.2 进程地址空间的存取权限276
11.13.3 对线性区进行处理的底层函数277
11.13.4 进程线性地址空间的映射do_mmap()279
11.14.1 缺页异常处理程序do_page_fault()281
11.14 页面失效处理281
11.13.5 释放进程线性地址空间do_munmap()281
11.14.2 请求调页286
11.14.4 调用sys_brk动态增长内存288
11.14.3 写时拷贝288
11.15 交换289
11.15.1 描述交换空间的数据结构290
11.15.2 页面替换策略291
11.16.1 页交换守护进程kswapd292
11.16 页换出操作292
11.16.2 kswapd()的执行流程293
11.16.3 页换入do_swap_page()294
11.16.4 页换出295
11.18 小结297
11.17 对交换区数据结构进行操作的函数297
11.19 练习题299
11.20 参考文献300
12.1.2 磁盘的逻辑组织302
12.1.1 磁盘结构302
第12章 文件管理及Linux实现302
12.1 磁盘的物理组织与调度302
12.1.3 磁盘性能参数303
12.1.4 磁盘调度算法304
12.2.1 文件管理的设计目标305
12.2 文件管理需求分析305
12.1.5 磁盘纠错305
12.2.2 文件管理系统结构模型306
12.3.3 文件属性307
12.3.2 文件类型和存取方式307
12.3 文件307
12.3.1 文件结构307
12.4.1 目录结构308
12.4 目录308
12.5 文件系统的组织309
12.4.3 目录操作309
12.4.2 路径名309
12.5.2 目录表表项的格式310
12.5.1 文件组织310
12.5.5 文件系统的一致性311
12.5.4 磁盘空间管理311
12.5.3 共享文件311
12.6 文件系统的保护机制312
12.7.1 虚拟文件系统的设计思路313
12.7 虚拟文件系统VFS313
12.7.2 虚拟文件系统VFS框架314
12.8.1 VFS超级块数据结构315
12.8 Linux虚拟文件系统的数据结构315
12.8.2 VFS的目录项数据结构317
12.8.3 VFS的inode节点数据结构319
12.8.4 VFS中数据结构之间的关系321
12.9.1 文件系统注册链表322
12.9 对虚拟文件系统的管理322
12.9.3 根文件系统的安装323
12.9.2 文件系统安装注册链表323
12.10.1 安装一个文件系统sys_mount()325
12.10 对文件系统模块的安装和卸载325
12.11 进程与文件系统的联系326
12.10.2 卸载一个文件系统sys_umount()326
12.11.1 文件对象327
12.11.2 用户打开文件表328
12.11.3 根目录和当前工作目录329
12.12 文件加锁331
12.13 磁盘数据的内存高速缓冲区332
12.13.1 缓冲区高速缓存的数据结构333
12.13.2 buffercache的组织335
12.13.3 对buffercache的基本操作337
12.13.4 把脏缓冲区写入磁盘338
12.14 EXT2文件系统339
12.14.2 EXT2减少碎片的方案340
12.14.1 EXT2对物理磁盘的组织340
12.15 EXT2磁盘重要数据结构341
12.14.3 EXT2对磁盘块的分配原则341
12.15.1 EXT2的目录项数据结构342
12.5.2 EXT2的磁盘i节点结构343
12.15.3 EXT2磁盘上的超级块346
12.15.5 EXT2的块位图和索引节点位图347
12.15.4 EXT2的组描述符347
12.16.1 EXT2的内存超级块348
12.16 EXT2的内核组织348
12.15.6 EXT2存放文件的数据块348
12.16.3 磁盘i节点读入高速缓存的过程350
12.16.2 EXT2的内存i节点350
12.17 如何通过路径名找到索引节点352
12.18.2 EXT2文件系统的不足354
12.18.1 关于日志式文件系统354
12.18 EXT3文件系统354
12.18.3 日志文件系统的工作原理355
12.18.4 EXT3日志文件系统的具体实现356
12.19 小结357
12.18.5 EXT3文件系统的额外开销357
12.20 练习题358
12.21 参考文献359
13.1.2 内核对设备的分类360
13.1.1 I/O设备的分类360
第13章 I/O设备管理与设备驱动程序360
13.1 I/O系统的基本组成360
13.1.3 I/O接口功能361
13.1.4 CPU与I/O设备交互的控制方式362
13.2 I/O系统管理软件的设计原理363
13.4.1 设备命名方法364
13.4 逻辑I/O管理364
13.3 用户程序364
13.4.3 为设备分配和释放缓冲区366
13.4.2 访问设备的权限和设备保护366
13.5 设备驱动程序和中断控制层367
13.6 设备驱动程序的组织实例368
13.6.1 设备驱动程序的工作原理369
13.6.2 逻辑I/O与设备驱动程序接口370
13.6.3 系统调用与驱动程序接口373
13.7 设备驱动程序模块374
13.6.4 安装中断处理程序374
13.7.2 可动态加载和卸载的设备驱动程序模块375
13.7.1 静态链接的设备驱动程序模块375
13.8 了解系统基本配置376
13.7.3 用户空间的设备驱动程序376
13.8.2 内核中驱动程序清单377
13.8.1 I/O端口377
13.9 设备驱动程序中使用的内核函数378
13.8.3 内核的中断报告显示378
13.9.2 分配和释放内存的函数379
13.9.1 操作I/O端口的函数379
13.9.4 同步和计时要使用的内核函数380
13.9.3 访问设备卡上内存的函数380
13.9.5 中断管理内核函数381
13.10.1 设备驱动程序与内核383
13.10 编制设备驱动程序的基本方法383
13.9.6 注册和注销设备的内核函数383
13.9.7 其他内核函数383
13.10.3 驱动程序与引导388
13.10.2 驱动程序与硬件388
13.11.1 编程用到的硬件389
13.11 内核级设备驱动程序编程实例389
13.11.2 上半部与下半部各自的功能390
13.11.3 内核驱动程序的上半部编程391
13.11.4 内核驱动程序的下半部编程395
13.11.5 模块的安装与卸载398
13.11.6 访问设备驱动程序的用户程序399
13.11.7 编译设备驱动程序400
13.12 小结401
13.11.8 使用内核设备驱动程序模块401
13.13 练习题402
13.14 参考文献403
14.2 信号机制406
14.1 进程间通信的设计目标406
第四部分 IPC和网络编程接口406
第14章 最早的IPC方法:信号与管道406
14.2.2 信号的产生与处理407
14.2.1 什么是信号407
14.3 发送信号409
14.3.1 信号操作用到的数据结构410
14.3.2 数据结构sigset_t上的一组简单操作函数411
14.3.3 传送信号412
14.4 接收信号414
14.4.2 忽略信号415
14.4.1 分析do_signal()函数415
14.4.4 捕获一个信号416
14.4.3 执行一个默认操作416
14.5 捕获一个信号的编程实例418
14.4.7 被中断的系统调用获得重新执行418
14.4.5 执行信号处理程序418
14.4.6 终止信号处理程序418
14.6 管道420
14.6.2 do_pipe()——创建一个管道421
14.6.1 structpipe_inode_info数据结构421
14.6.3 读管道422
14.6.4 写管道423
14.7 无名管道的编程实例424
14.6.5 撤销管道424
14.8.2 打开FIFO425
14.8.1 创建一个FTFO425
14.8 有名管道FIFO425
14.9 编写有名管道的实用程序426
14.8.3 读写FlFO426
14.10 小结427
14.12 参考文献428
14.11 练习题428
15.1.2 控制IPC资源的系统调用429
15.1.1 创建IPC资源的系统调用429
第15章 SystemV进程间通信429
15.1 与IPC相关的系统调用429
15.2 IPC资源中的公共元素及属性430
15.1.4 IPC系统调用在i386体系结构中的实现430
15.1.3 操作IPC资源的系统调用430
15.3.1 与信号量操作相关的数据结构432
15.3 IPC信号量432
15.3.2 sys_semop()函数的功能435
15.4 IPC信号量的编程示例436
15.3.3 sys_semctl()函数的功能436
15.6 IPC消息队列438
15.5 信号量小结438
15.6.1 与消息队列操作相关的数据结构439
15.6.2 发送一个消息440
15.6.3 接收消息和释放消息队列441
15.7 IPC消息队列的编程示例442
15.9.1 IPC共享内存的数据结构443
15.9 共享内存443
15.8 消息队列小结443
15.9.2 连接IPC共享内存445
15.9.4 剥离和释放IPC共享内存段446
15.9.3 IPC共享内存请求调页的过程446
15.10 IPC共享内存编程示例447
15.12 练习题451
15.11 小结451
15.13 参考文献452
16.1.1 OSI模型和网际协议族453
16.1 Linux网络系统分层结构453
第16章 Linux网络接口及内核实现453
16.1.2 Linux网络协议族分层结构454
16.2.1 传输控制协议——TCP455
16.2 TCP和UDp455
16.3.1 套接口地址结构456
16.3 内核中与发送/接收相关的数据结构456
16.2.2 用户数据报协议——UDP456
16.3.2 数据包结构457
16.3.3 建立网络连接的数据结构461
16.3.4 协议操作函数使用的数据结构464
16.4 网络连接的建立和关闭465
16.4.1 网络连接的建立466
16.4.2 关闭网络连接470
16.5 发送数据471
16.5.1 发送数据的系统调用接口472
16.5.2 从INET协议层到IP层473
16.5.3 IP层到硬件层的数据发送过程474
16.5.4 硬件层的数据发送过程475
16.6.1 接收数据的系统调用接口476
16.6 接收数据476
16.6.2 硬件层接收数据分析477
16.6.3 从IP层接收数据478
16.6.4 从INET层接收数据479
16.7 小结480
16.9 参考文献481
16.8 练习题481
17.1.1 socket()函数482
17.1 套接口函数482
第17章 TCP套接口编程的基本方法482
17.1.2 其他套接口函数483
17.2.1 建立TCF连接的过程485
17.2 TCP连接的建立和终止过程485
17.2.2 终止TCP连接的过程486
17.3.2 TCP客户程序的实现487
17.3.1 TCP客户程序设计方法487
17.3 编制TCP客户程序487
17.4.2 一个简单TCF服务器的实现489
17.4.1 一个简单TCP服务器的编程方法489
17.4 编制TCP服务器程序489
17.4.3 TCP并发服务器的实现491
17.7 参考文献493
17.6 练习题493
17.5 小结493
18.1 UDP程序使用的套接口函数494
第18章 UDP套接口编程的基本方法494
18.2 发送UDP数据报的编程实例495
18.3 接收UDP数据报的编程实例496
18.5 练习题498
18.4 小结498
18.6 参考文献499
附录 Linux源代码目录结构与内容500
热门推荐
- 3390810.html
- 1248769.html
- 3036948.html
- 1313881.html
- 2618750.html
- 3810749.html
- 2245109.html
- 3447202.html
- 1554416.html
- 2021900.html
- http://www.ickdjs.cc/book_1447842.html
- http://www.ickdjs.cc/book_1358874.html
- http://www.ickdjs.cc/book_591083.html
- http://www.ickdjs.cc/book_2607724.html
- http://www.ickdjs.cc/book_1324560.html
- http://www.ickdjs.cc/book_46714.html
- http://www.ickdjs.cc/book_2806351.html
- http://www.ickdjs.cc/book_576353.html
- http://www.ickdjs.cc/book_3382536.html
- http://www.ickdjs.cc/book_2300805.html