描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111689973
内容简介
本书由FreeBSD系统的三位引领者撰写,在上一版基础上做了大幅更新,涵盖FreeBSD 5和FreeBSD 11之间的所有重大改进,如使用FreeBSD Jail的高度可扩展和轻量级虚拟化、使用Xen和Virtio设备半虚拟化的虚拟机加速、Capsicum沙箱和GELI加密磁盘保护以及DTrace内核调试技巧等。全书从接口到内核再到硬件逐层深入,详细阐述实现每个重要系统组件——进程管理、安全、虚拟内存、I/O系统、文件系统、socket IPC和网络等——所使用的概念、数据结构和算法。本书可以作为高等院校操作系统相关课程的教材或参考书,也可以作为系统开发人员和管理人员的学习指南。
目 录
译者序
前言
作者简介
部分 概述
第1章 BSD系统的历史和目标2
1.1 UNIX系统的历史2
1.1.1 UNIX系统的起源2
1.1.2 Research小组的UNIX系统3
1.1.3 AT&T UNIX System Ⅲ和System V4
1.1.4 伯克利软件发布5
1.1.5 UNIX无处不在6
1.2 BSD和其他系统6
1.3 BSD向开放源代码的转变8
1.3.1 Networking Release 28
1.3.2 法律诉讼10
1.3.3 4.4BSD11
1.3.4 4.4BSD-Lite Release 211
1.4 FreeBSD的开发模式12
第2章 FreeBSD设计概述16
2.1 FreeBSD的功能和内核16
2.2 内核结构17
2.3 内核服务20
2.4 进程管理21
2.4.1 信号22
2.4.2 进程组和会话23
2.5 安全23
2.5.1 进程凭证24
2.5.2 特权模型25
2.5.3 自主访问控制25
2.5.4 能力模型25
2.5.5 Jail轻型虚拟化26
2.5.6 强制访问控制27
2.5.7 事件审计27
2.5.8 密码学与随机数生成器28
2.6 内存管理28
2.6.1 BSD内存管理设计要点29
2.6.2 内核中的内存管理30
2.7 I/O系统概述31
2.7.1 描述符与I/O31
2.7.2 描述符管理33
2.7.3 设备34
2.7.4 套接字IPC34
2.7.5 分散-收集I/O35
2.7.6 多文件系统支持35
2.8 设备36
2.9 快速文件系统36
2.10 Zettabyte文件系统40
2.11 网络文件系统41
2.12 进程间通信41
2.13 网络层协议42
2.14 传输层协议43
2.15 系统启动和停止43
习题44
第3章 内核服务45
3.1 内核结构45
3.1.1 系统进程45
3.1.2 系统入口46
3.1.3 运行时的内核结构46
3.1.4 内核的入口48
3.1.5 从内核返回49
3.2 系统调用49
3.2.1 调用结果的处理49
3.2.2 从系统调用返回50
3.3 陷阱和中断51
3.3.1 I/O设备中断51
3.3.2 软件中断51
3.4 时钟中断52
3.4.1 统计和进程调度53
3.4.2 超时54
3.5 内存管理服务55
3.6 时间服务58
3.6.1 真实时间59
3.6.2 外部表示59
3.6.3 调整时间59
3.6.4 时间间隔60
3.7 资源服务60
3.7.1 进程优先级60
3.7.2 资源利用61
3.7.3 资源限制61
3.7.4 文件系统配额62
3.8 内核跟踪工具62
3.8.1 系统调用跟踪62
3.8.2 DTrace63
3.8.3 内核跟踪66
习题68
第二部分 进程
第4章 进程管理70
4.1 进程管理概述70
4.1.1 多道程序设计71
4.1.2 调度72
4.2 进程状态73
4.2.1 进程结构75
4.2.2 线程结构78
4.3 上下文切换79
4.3.1 线程状态79
4.3.2 底层上下文切换80
4.3.3 主动上下文切换80
4.3.4 同步84
4.3.5 互斥锁同步85
4.3.6 互斥锁接口87
4.3.7 锁同步88
4.3.8 死锁预防89
4.4 线程调度91
4.4.1 低级调度器91
4.4.2 线程运行队列和上下文切换92
4.4.3 分时线程调度93
4.4.4 多处理器调度98
4.4.5 自适应空闲100
4.4.6 传统的分时线程调度100
4.5 创建进程101
4.6 终止进程102
4.7 信号103
4.7.1 发送信号106
4.7.2 传输信号108
4.8 进程组和会话110
4.8.1 进程组110
4.8.2 会话111
4.8.3 作业控制112
4.9 进程的调试114
习题116
第5章 安全性118
5.1 操作系统安全119
5.2 安全模型120
5.2.1 进程模型120
5.2.2 自主与强制访问控制120
5.2.3 可信计算基121
5.2.4 其他内核安全特性121
5.3 进程凭证121
5.3.1 凭证结构122
5.3.2 凭证内存模型123
5.3.3 访问控制校验124
5.4 用户和组124
5.5 特权模型126
5.5.1 隐式特权127
5.5.2 显式特权127
5.6 进程间访问控制128
5.6.1 可见性129
5.6.2 信号129
5.6.3 调度控制129
5.6.4 等待进程终止130
5.6.5 调试130
5.7 自主访问控制130
5.7.1 虚拟文件系统接口与DAC131
5.7.2 对象属主与组132
5.7.3 UNIX权限132
5.7.4 访问控制列表134
5.7.5 POSIX.1e访问控制列表136
5.7.6 NFSv4访问控制列表138
5.8 Capsicum能力模型141
5.8.1 Capsicum应用体系结构142
5.8.2 能力系统142
5.8.3 能力143
5.8.4 能力模型145
5.9 Jail146
5.10 强制访问控制框架151
5.10.1 强制策略151
5.10.2 设计的指导原则152
5.10.3 MAC框架的体系结构153
5.10.4 启动框架154
5.10.5 策略注册155
5.10.6 框架入口点设计考量155
5.10.7 策略入口点设计考量156
5.10.8 内核服务入口点调用157
5.10.9 策略组合158
5.10.10 给对象打标签159
5.10.11 标签的生命周期与存储管理159
5.10.12 标签同步162
5.10.13 从用户空间进行策略无关的标签管理163
5.11 安全事件审计163
5.11.1 审计事件与记录164
5.11.2 BSM审计记录与审计跟踪165
5.11.3 内核审计的实现166
5.12 加密服务168
5.12.1 加密框架168
5.12.2 随机数生成器170
5.13 GELI全磁盘加密173
5.13.1 机密性和完整性保护173
5.13.2 密钥管理174
5.13.3 启动GELI174
5.13.4 加密块保护175
5.13.5 I/O模型176
5.13.6 不足176
习题177
第6章 存储管理178
6.1 术语178
6.1.1 进程与内存179
6.1.2 调页机制180
6.1.3 替换算法180
6.1.4 工作集模型181
6.1.5 交换机制181
6.1.6 虚拟内存的优点182
6.1.7 虚拟内存的硬件要求182
6.2 FreeBSD 虚拟内存系统概述183
6.3 内核的存储管理185
6.3.1 内核映射和子映射186
6.3.2 内核地址空间的分配188
6.3.3 slab分配器190
6.3.4 keg分配器191
6.3.5 zone分配器192
6.3.6 内核malloc194
6.3.7 内核zone分配器196
6.4 进程独立拥有的资源197
6.4.1 FreeBSD的进程虚拟地址空间197
6.4.2 缺页处理199
6.4.3 映射到vm_object199
6.4.4 vm_object201
6.4.5 vm_object到页面201
6.5 共享内存202
6.5.1 mmap模型203
6.5.2 共享映射205
6.5.3 私有映射205
6.5.4 压缩影子链207
6.5.5 私有快照208
6.6 创建新进程209
6.6.1 预留内核资源210
6.6.2 复制用户地址空间211
6.6.3 不通过复制创建新进程211
6.7 执行一个文件212
6.8 操作进程地址空间213
6.8.1 改变进程大小213
6.8.2 文件映射214
6.8.3 改变保护权限215
6.9 终止进程215
6.10 调页器接口216
6.10.1 vnode调页器218
6.10.2 设备调页器219
6.10.3 物理内存调页器220
6.10.4 交换调页器221
6.11 调页机制224
6.11.1 硬件高速缓存的设计228
6.11.2 硬件内存管理229
6.11.3 超级页231
6.12 页面替换235
6.12.1 调页参数237
6.12.2 pageout守护进程237
6.12.3 交换机制240
6.12.4 换入进程242
6.13 可移植性243
6.13.1 pmap模块的作用243
6.13.2 初始化和启动245
6.13.3 分配和释放映射248
6.13.4 改变映射的访问和wiring属性249
6.13.5 物理页面使用信息的维护251
6.13.6 初始化物理页面251
6.13.7 管理内部数据结构252
习题252
第三部分 I/O系统
第7章 I/O系统概述256
7.1 描述符管理和服务257
7.1.1 打开文件条目258
7.1.2 描述符管理260
7.1.3 异步I/O261
7.1.4 文件描述符锁261
7.1.5 描述符的多路I/O复用263
7.1.6 select的实现265
7.1.7 kqueue和kevent267
7.1.8 数据在内核中的迁移269
7.2 本地进程间交互270
7.2.1 信号量272
7.2.2 消息队列273
7.2.3 共享内存274
7.3 虚拟文件接口275
7.3.1 vnode的内容275
7.3.2 vnode的操作277
7.3.3 路径名的转换278
7.3.4 导出文件系统服务278
7.4 独立于文件系统的服务279
7.4.1 名字缓存281
7.4.2 缓冲区管理282
7.4.3 缓冲区管理的实现284
7.5 可堆叠的文件系统285
7.5.1 简单的文件系统层287
7.5.2 联合文件系统288
7.5.3 其他文件系统290
习题291
第8章 设备292
8.1 设备概述292
8.1.1 PC I/O体系结构293
8.1.2 FreeBSD大容量存储I/O子系统的结构295
8.1.3 设备命名和访问296
8.2 从用户到设备的I/O映射297
8.2.1 设备驱动程序298
8.2.2 I/O队列299
8.2.3 中断处理299
8.3 字符设备299
8.3.1 原始设备和物理I/O301
8.3.2 面向字符的设备302
8.3.3 字符设备驱动程序入口点302
8.4 磁盘设备303
8.4.1 磁盘设备驱动程序入口点303
8.4.2 磁盘I/O请求排序303
8.4.3 磁盘标签304
8.5 网络设备305
8.5.1 网络设备驱动程序入口点306
8.5.2 配置与控制306
8.5.3 数据包接收307
8.5.4 数据包传输309
8.6 终端处理309
8.6.1 终端处理模式310
8.6.2 用户接口312
8.6.3 进程组、会话和终端控制313
8.6.4 终端操作313
8.6.5 终端输出(上半部分)314
8.6.6 终端输出(下半部分)315
8.6.7 终端输入315
8.6.8 关闭终端设备316
8.7 GEOM层316
8.7.1 术语和拓扑规则317
8.7.2 改变拓扑318
8.7.3 操作320
8.7.4 拓扑灵活性321
8.8 CAM层322
8.8.1 通过CAM子系统的SCSI I/O请求的路径323
8.8.2 ATA磁盘325
8.9 设备配置325
8.9.1 设备标识327
8.9.2 自动配置数据结构329
8.9.3 资源管理333
8.10 设备虚拟化334
8.10.1 与虚拟机监控程序的交互335
8.10.2 Virt
前言
作者简介
部分 概述
第1章 BSD系统的历史和目标2
1.1 UNIX系统的历史2
1.1.1 UNIX系统的起源2
1.1.2 Research小组的UNIX系统3
1.1.3 AT&T UNIX System Ⅲ和System V4
1.1.4 伯克利软件发布5
1.1.5 UNIX无处不在6
1.2 BSD和其他系统6
1.3 BSD向开放源代码的转变8
1.3.1 Networking Release 28
1.3.2 法律诉讼10
1.3.3 4.4BSD11
1.3.4 4.4BSD-Lite Release 211
1.4 FreeBSD的开发模式12
第2章 FreeBSD设计概述16
2.1 FreeBSD的功能和内核16
2.2 内核结构17
2.3 内核服务20
2.4 进程管理21
2.4.1 信号22
2.4.2 进程组和会话23
2.5 安全23
2.5.1 进程凭证24
2.5.2 特权模型25
2.5.3 自主访问控制25
2.5.4 能力模型25
2.5.5 Jail轻型虚拟化26
2.5.6 强制访问控制27
2.5.7 事件审计27
2.5.8 密码学与随机数生成器28
2.6 内存管理28
2.6.1 BSD内存管理设计要点29
2.6.2 内核中的内存管理30
2.7 I/O系统概述31
2.7.1 描述符与I/O31
2.7.2 描述符管理33
2.7.3 设备34
2.7.4 套接字IPC34
2.7.5 分散-收集I/O35
2.7.6 多文件系统支持35
2.8 设备36
2.9 快速文件系统36
2.10 Zettabyte文件系统40
2.11 网络文件系统41
2.12 进程间通信41
2.13 网络层协议42
2.14 传输层协议43
2.15 系统启动和停止43
习题44
第3章 内核服务45
3.1 内核结构45
3.1.1 系统进程45
3.1.2 系统入口46
3.1.3 运行时的内核结构46
3.1.4 内核的入口48
3.1.5 从内核返回49
3.2 系统调用49
3.2.1 调用结果的处理49
3.2.2 从系统调用返回50
3.3 陷阱和中断51
3.3.1 I/O设备中断51
3.3.2 软件中断51
3.4 时钟中断52
3.4.1 统计和进程调度53
3.4.2 超时54
3.5 内存管理服务55
3.6 时间服务58
3.6.1 真实时间59
3.6.2 外部表示59
3.6.3 调整时间59
3.6.4 时间间隔60
3.7 资源服务60
3.7.1 进程优先级60
3.7.2 资源利用61
3.7.3 资源限制61
3.7.4 文件系统配额62
3.8 内核跟踪工具62
3.8.1 系统调用跟踪62
3.8.2 DTrace63
3.8.3 内核跟踪66
习题68
第二部分 进程
第4章 进程管理70
4.1 进程管理概述70
4.1.1 多道程序设计71
4.1.2 调度72
4.2 进程状态73
4.2.1 进程结构75
4.2.2 线程结构78
4.3 上下文切换79
4.3.1 线程状态79
4.3.2 底层上下文切换80
4.3.3 主动上下文切换80
4.3.4 同步84
4.3.5 互斥锁同步85
4.3.6 互斥锁接口87
4.3.7 锁同步88
4.3.8 死锁预防89
4.4 线程调度91
4.4.1 低级调度器91
4.4.2 线程运行队列和上下文切换92
4.4.3 分时线程调度93
4.4.4 多处理器调度98
4.4.5 自适应空闲100
4.4.6 传统的分时线程调度100
4.5 创建进程101
4.6 终止进程102
4.7 信号103
4.7.1 发送信号106
4.7.2 传输信号108
4.8 进程组和会话110
4.8.1 进程组110
4.8.2 会话111
4.8.3 作业控制112
4.9 进程的调试114
习题116
第5章 安全性118
5.1 操作系统安全119
5.2 安全模型120
5.2.1 进程模型120
5.2.2 自主与强制访问控制120
5.2.3 可信计算基121
5.2.4 其他内核安全特性121
5.3 进程凭证121
5.3.1 凭证结构122
5.3.2 凭证内存模型123
5.3.3 访问控制校验124
5.4 用户和组124
5.5 特权模型126
5.5.1 隐式特权127
5.5.2 显式特权127
5.6 进程间访问控制128
5.6.1 可见性129
5.6.2 信号129
5.6.3 调度控制129
5.6.4 等待进程终止130
5.6.5 调试130
5.7 自主访问控制130
5.7.1 虚拟文件系统接口与DAC131
5.7.2 对象属主与组132
5.7.3 UNIX权限132
5.7.4 访问控制列表134
5.7.5 POSIX.1e访问控制列表136
5.7.6 NFSv4访问控制列表138
5.8 Capsicum能力模型141
5.8.1 Capsicum应用体系结构142
5.8.2 能力系统142
5.8.3 能力143
5.8.4 能力模型145
5.9 Jail146
5.10 强制访问控制框架151
5.10.1 强制策略151
5.10.2 设计的指导原则152
5.10.3 MAC框架的体系结构153
5.10.4 启动框架154
5.10.5 策略注册155
5.10.6 框架入口点设计考量155
5.10.7 策略入口点设计考量156
5.10.8 内核服务入口点调用157
5.10.9 策略组合158
5.10.10 给对象打标签159
5.10.11 标签的生命周期与存储管理159
5.10.12 标签同步162
5.10.13 从用户空间进行策略无关的标签管理163
5.11 安全事件审计163
5.11.1 审计事件与记录164
5.11.2 BSM审计记录与审计跟踪165
5.11.3 内核审计的实现166
5.12 加密服务168
5.12.1 加密框架168
5.12.2 随机数生成器170
5.13 GELI全磁盘加密173
5.13.1 机密性和完整性保护173
5.13.2 密钥管理174
5.13.3 启动GELI174
5.13.4 加密块保护175
5.13.5 I/O模型176
5.13.6 不足176
习题177
第6章 存储管理178
6.1 术语178
6.1.1 进程与内存179
6.1.2 调页机制180
6.1.3 替换算法180
6.1.4 工作集模型181
6.1.5 交换机制181
6.1.6 虚拟内存的优点182
6.1.7 虚拟内存的硬件要求182
6.2 FreeBSD 虚拟内存系统概述183
6.3 内核的存储管理185
6.3.1 内核映射和子映射186
6.3.2 内核地址空间的分配188
6.3.3 slab分配器190
6.3.4 keg分配器191
6.3.5 zone分配器192
6.3.6 内核malloc194
6.3.7 内核zone分配器196
6.4 进程独立拥有的资源197
6.4.1 FreeBSD的进程虚拟地址空间197
6.4.2 缺页处理199
6.4.3 映射到vm_object199
6.4.4 vm_object201
6.4.5 vm_object到页面201
6.5 共享内存202
6.5.1 mmap模型203
6.5.2 共享映射205
6.5.3 私有映射205
6.5.4 压缩影子链207
6.5.5 私有快照208
6.6 创建新进程209
6.6.1 预留内核资源210
6.6.2 复制用户地址空间211
6.6.3 不通过复制创建新进程211
6.7 执行一个文件212
6.8 操作进程地址空间213
6.8.1 改变进程大小213
6.8.2 文件映射214
6.8.3 改变保护权限215
6.9 终止进程215
6.10 调页器接口216
6.10.1 vnode调页器218
6.10.2 设备调页器219
6.10.3 物理内存调页器220
6.10.4 交换调页器221
6.11 调页机制224
6.11.1 硬件高速缓存的设计228
6.11.2 硬件内存管理229
6.11.3 超级页231
6.12 页面替换235
6.12.1 调页参数237
6.12.2 pageout守护进程237
6.12.3 交换机制240
6.12.4 换入进程242
6.13 可移植性243
6.13.1 pmap模块的作用243
6.13.2 初始化和启动245
6.13.3 分配和释放映射248
6.13.4 改变映射的访问和wiring属性249
6.13.5 物理页面使用信息的维护251
6.13.6 初始化物理页面251
6.13.7 管理内部数据结构252
习题252
第三部分 I/O系统
第7章 I/O系统概述256
7.1 描述符管理和服务257
7.1.1 打开文件条目258
7.1.2 描述符管理260
7.1.3 异步I/O261
7.1.4 文件描述符锁261
7.1.5 描述符的多路I/O复用263
7.1.6 select的实现265
7.1.7 kqueue和kevent267
7.1.8 数据在内核中的迁移269
7.2 本地进程间交互270
7.2.1 信号量272
7.2.2 消息队列273
7.2.3 共享内存274
7.3 虚拟文件接口275
7.3.1 vnode的内容275
7.3.2 vnode的操作277
7.3.3 路径名的转换278
7.3.4 导出文件系统服务278
7.4 独立于文件系统的服务279
7.4.1 名字缓存281
7.4.2 缓冲区管理282
7.4.3 缓冲区管理的实现284
7.5 可堆叠的文件系统285
7.5.1 简单的文件系统层287
7.5.2 联合文件系统288
7.5.3 其他文件系统290
习题291
第8章 设备292
8.1 设备概述292
8.1.1 PC I/O体系结构293
8.1.2 FreeBSD大容量存储I/O子系统的结构295
8.1.3 设备命名和访问296
8.2 从用户到设备的I/O映射297
8.2.1 设备驱动程序298
8.2.2 I/O队列299
8.2.3 中断处理299
8.3 字符设备299
8.3.1 原始设备和物理I/O301
8.3.2 面向字符的设备302
8.3.3 字符设备驱动程序入口点302
8.4 磁盘设备303
8.4.1 磁盘设备驱动程序入口点303
8.4.2 磁盘I/O请求排序303
8.4.3 磁盘标签304
8.5 网络设备305
8.5.1 网络设备驱动程序入口点306
8.5.2 配置与控制306
8.5.3 数据包接收307
8.5.4 数据包传输309
8.6 终端处理309
8.6.1 终端处理模式310
8.6.2 用户接口312
8.6.3 进程组、会话和终端控制313
8.6.4 终端操作313
8.6.5 终端输出(上半部分)314
8.6.6 终端输出(下半部分)315
8.6.7 终端输入315
8.6.8 关闭终端设备316
8.7 GEOM层316
8.7.1 术语和拓扑规则317
8.7.2 改变拓扑318
8.7.3 操作320
8.7.4 拓扑灵活性321
8.8 CAM层322
8.8.1 通过CAM子系统的SCSI I/O请求的路径323
8.8.2 ATA磁盘325
8.9 设备配置325
8.9.1 设备标识327
8.9.2 自动配置数据结构329
8.9.3 资源管理333
8.10 设备虚拟化334
8.10.1 与虚拟机监控程序的交互335
8.10.2 Virt
前 言
本书遵循早期权威的、完整的关于UNIX系统4.3BSD和4.4BSD版本的设计和实现的描述,这些UNIX系统是由加州大学伯克利分校开发的。自从伯克利在1994年发布终版本以来,几个团队一直在开发BSD。本书详细介绍了FreeBSD,这个系统拥有的开发人员团体且发行为广泛。尽管FreeBSD发行版在其基本系统中包含了近1000个实用程序,在其ports集合中包含了近25 000个可选实用程序,但本书几乎完全集中在内核上。
类UNIX系统
类UNIX系统包括:传统的供应商系统,如Solaris和HP-UX;基于Linux的发行版,如Red Hat、Debian、Suse和Slackware;基于BSD的发行版,如FreeBSD、NetBSD、OpenBSD和Darwin。它们可以在从智能手机到的超级计算机的各种计算机上运行。它们是大多数多处理器、图形和向量处理系统选择的操作系统,并被广泛用于分时这一初目的。作为Internet上提供网络服务(从FTP到WWW)的常用平台,它们是有史以来开发的可移植性的操作系统。这种可移植性既归功于它们的实现语言C [Kernighan & Ritchie, 1989](它本身就是一种广泛移植的语言),又归功于系统的优雅设计。
自1969年创始以来[Ritchie & Thompson, 1978],UNIX系统在几个分分合合的支流中不断发展。初的开发人员继续在AT&T贝尔实验室开发第9版和第10版UNIX,以及UNIX第9版的后继版本。与此同时,AT&T在将UNIX System V与Sun Microsystems的基于BSD的SunOS合并以生产Solaris之前,授权将UNIX System V作为产品。第9版UNIX、System V和Solaris都受到了加州大学伯克利分校计算机系统研究小组(CSRG)推出的伯克利软件发行版的强烈影响。尽管Linux操作系统是独立于其他UNIX变体开发的,但它实现了UNIX接口。因此,在其他基于UNIX的平台上开发的应用程序很容易移植到Linux上运行。
伯克利软件发行版(BSD)
BSD系统是个基于UNIX系统并引入许多重要功能的发行版。这些重要功能包括:
按需分页的虚拟内存支持。
硬件、I/O系统的自动配置。
快速、可恢复的文件系统。
基于套接字的进程间通信(IPC)原语。
TCP/IP的相关实现。
伯克利发行版进入了许多供应商的UNIX系统,并被许多其他供应商的开发团队在内部使用。TCP/IP网络协议套件在4.2BSD和4.3BSD中的实现以及这些系统的应用,在推动TCP/IP网络协议套件成为世界标准方面发挥了关键作用。甚至像微软这样的非UNIX供应商也在自己的Winsock IPC接口中采用了伯克利套接字设计。
BSD的发布对POSIX(IEEE std1003.1)操作系统接口标准和相关标准也有很大的影响。这在一些特性上尤为明显,如可靠信号、作业控制、每个进程的多个访问组以及目录操作的例程,都是从BSD中改编后应用于POSIX的。
早期的BSD版本包含UNIX许可证代码,因此要求接收者拥有AT&T源代码许可证才能获得和使用BSD。1988年,伯克利把它的发行版分为AT&T授权的和可自由再发行的代码。可自由再发行的代码是单独授权的,任何人都可以获得、使用和重新分发。1994年伯克利发布的后一个可自由再发行的4.4BSD-Lite2版本包含了几乎整个内核以及所有重要的库和实用程序。
NetBSD和FreeBSD两个小组萌芽于1993年,并开始支持和分发由伯克利开发的免费可再发行与构建的系统。NetBSD小组强调可移植性和极简主义的方法,将系统移植到近60个平台上,他们决心保持系统的精简以易于兼容嵌入式应用程序。FreeBSD小组强调限度地支持PC体系结构,推动其系统易于安装,并向尽可能广泛的用户进行推广。
1995年,OpenBSD组从NetBSD组中分离出来,开发了一个强调安全性的发行版。2003年,Dragonfly组从FreeBSD组中分离出来,开发了一种轻量级的机制来支持多处理的发行版。多年来,BSD发行版之间处于良性竞争状态,许多想法和大量代码之间经常互通有无。
本书内容
本书介绍FreeBSD 11内核的内部结构以及实现FreeBSD系统功能所涉及的概念、数据结构和算法,从系统调用层向下(从接口到内核,再到硬件本身)涵盖FreeBSD的内容。该内核包括进程管理、内核安全、虚拟内存、I/O系统、文件系统、套接字IPC机制和网络协议实现等系统模块。除了与终端接口、系统启动有关的内容,系统调用层之上的知识,例如与库、Shell、命令行、编程语言和其他用户接口有关的内容都不在本书范围之内。本书沿袭了Organick在编写Multics操作系统书籍时首次采用的组织结构[Organick, 1975],是对现代操作系统的深入研究。
在涉及特定硬件时,本书参考了Intel 32位体系结构和类似的AMD 64位体系结构。由于FreeBSD加强了在这些体系结构上的开发,它们是获得FreeBSD全面支持的体系结构,因此十分便于参考。
计算机专业人士阅读指南
FreeBSD被广泛应用于全球许多公司的核心基础体系结构。由于构建过程占用空间较小,它在嵌入式程序中的应用场景也越来越多。FreeBSD的授权条款不要求对发生变更或功能增强的系统进行发布,而Linux则要求以源代码形式提供对内核的所有更改和增强。因此,需要控制其知识产权发布的公司会使用FreeBSD构建产品。
本书主要针对使用FreeBSD系统工作的专业人员
类UNIX系统
类UNIX系统包括:传统的供应商系统,如Solaris和HP-UX;基于Linux的发行版,如Red Hat、Debian、Suse和Slackware;基于BSD的发行版,如FreeBSD、NetBSD、OpenBSD和Darwin。它们可以在从智能手机到的超级计算机的各种计算机上运行。它们是大多数多处理器、图形和向量处理系统选择的操作系统,并被广泛用于分时这一初目的。作为Internet上提供网络服务(从FTP到WWW)的常用平台,它们是有史以来开发的可移植性的操作系统。这种可移植性既归功于它们的实现语言C [Kernighan & Ritchie, 1989](它本身就是一种广泛移植的语言),又归功于系统的优雅设计。
自1969年创始以来[Ritchie & Thompson, 1978],UNIX系统在几个分分合合的支流中不断发展。初的开发人员继续在AT&T贝尔实验室开发第9版和第10版UNIX,以及UNIX第9版的后继版本。与此同时,AT&T在将UNIX System V与Sun Microsystems的基于BSD的SunOS合并以生产Solaris之前,授权将UNIX System V作为产品。第9版UNIX、System V和Solaris都受到了加州大学伯克利分校计算机系统研究小组(CSRG)推出的伯克利软件发行版的强烈影响。尽管Linux操作系统是独立于其他UNIX变体开发的,但它实现了UNIX接口。因此,在其他基于UNIX的平台上开发的应用程序很容易移植到Linux上运行。
伯克利软件发行版(BSD)
BSD系统是个基于UNIX系统并引入许多重要功能的发行版。这些重要功能包括:
按需分页的虚拟内存支持。
硬件、I/O系统的自动配置。
快速、可恢复的文件系统。
基于套接字的进程间通信(IPC)原语。
TCP/IP的相关实现。
伯克利发行版进入了许多供应商的UNIX系统,并被许多其他供应商的开发团队在内部使用。TCP/IP网络协议套件在4.2BSD和4.3BSD中的实现以及这些系统的应用,在推动TCP/IP网络协议套件成为世界标准方面发挥了关键作用。甚至像微软这样的非UNIX供应商也在自己的Winsock IPC接口中采用了伯克利套接字设计。
BSD的发布对POSIX(IEEE std1003.1)操作系统接口标准和相关标准也有很大的影响。这在一些特性上尤为明显,如可靠信号、作业控制、每个进程的多个访问组以及目录操作的例程,都是从BSD中改编后应用于POSIX的。
早期的BSD版本包含UNIX许可证代码,因此要求接收者拥有AT&T源代码许可证才能获得和使用BSD。1988年,伯克利把它的发行版分为AT&T授权的和可自由再发行的代码。可自由再发行的代码是单独授权的,任何人都可以获得、使用和重新分发。1994年伯克利发布的后一个可自由再发行的4.4BSD-Lite2版本包含了几乎整个内核以及所有重要的库和实用程序。
NetBSD和FreeBSD两个小组萌芽于1993年,并开始支持和分发由伯克利开发的免费可再发行与构建的系统。NetBSD小组强调可移植性和极简主义的方法,将系统移植到近60个平台上,他们决心保持系统的精简以易于兼容嵌入式应用程序。FreeBSD小组强调限度地支持PC体系结构,推动其系统易于安装,并向尽可能广泛的用户进行推广。
1995年,OpenBSD组从NetBSD组中分离出来,开发了一个强调安全性的发行版。2003年,Dragonfly组从FreeBSD组中分离出来,开发了一种轻量级的机制来支持多处理的发行版。多年来,BSD发行版之间处于良性竞争状态,许多想法和大量代码之间经常互通有无。
本书内容
本书介绍FreeBSD 11内核的内部结构以及实现FreeBSD系统功能所涉及的概念、数据结构和算法,从系统调用层向下(从接口到内核,再到硬件本身)涵盖FreeBSD的内容。该内核包括进程管理、内核安全、虚拟内存、I/O系统、文件系统、套接字IPC机制和网络协议实现等系统模块。除了与终端接口、系统启动有关的内容,系统调用层之上的知识,例如与库、Shell、命令行、编程语言和其他用户接口有关的内容都不在本书范围之内。本书沿袭了Organick在编写Multics操作系统书籍时首次采用的组织结构[Organick, 1975],是对现代操作系统的深入研究。
在涉及特定硬件时,本书参考了Intel 32位体系结构和类似的AMD 64位体系结构。由于FreeBSD加强了在这些体系结构上的开发,它们是获得FreeBSD全面支持的体系结构,因此十分便于参考。
计算机专业人士阅读指南
FreeBSD被广泛应用于全球许多公司的核心基础体系结构。由于构建过程占用空间较小,它在嵌入式程序中的应用场景也越来越多。FreeBSD的授权条款不要求对发生变更或功能增强的系统进行发布,而Linux则要求以源代码形式提供对内核的所有更改和增强。因此,需要控制其知识产权发布的公司会使用FreeBSD构建产品。
本书主要针对使用FreeBSD系统工作的专业人员
评论
还没有评论。