展开全部

主编推荐语

全面讲解开发一个操作系统需要的技术和知识。

内容简介

本书共分16章,讲解了开发一个操作系统需要的技术和知识,主要内容有:操作系统基础、部署工作环境、编写MBR主引导记录、完善MBR错误、保护模式入门、保护模式进阶和向内核迈进、中断、内存管理系统、线程、输入输出系统、用户进程、完善内核、编写硬盘驱动程序、文件系统、系统交互等核心技术。本书适合程序员、系统底层开发人员、操作系统爱好者阅读,也可作为大专院校相关专业师生用书和培训学校的教材。

目录

  • 版权信息
  • 作者简介
  • 内容提要
  • 前言
  • 第0章 一些你可能正感到迷惑的问题
  • 0.1 操作系统是什么
  • 0.2 你想研究到什么程度
  • 0.3 写操作系统,哪些需要我来做
  • 0.4 软件是如何访问硬件的
  • 0.5 应用程序是什么,和操作系统是如何配合到一起的
  • 0.6 为什么称为“陷入”内核
  • 0.7 内存访问为什么要分段
  • 0.8 代码中为什么分为代码段、数据段?这和内存访问机制中的段是一回事吗
  • 0.9 物理地址、逻辑地址、有效地址、线性地址、虚拟地址的区别
  • 0.10 什么是段重叠
  • 0.11 什么是平坦模型
  • 0.12 cs、ds这类sreg段寄存器,位宽是多少
  • 0.13 什么是工程,什么是协议
  • 0.14 为什么Linux系统下的应用程序不能在Windows系统下运行
  • 0.15 局部变量和函数参数为什么要放在栈中
  • 0.16 为什么说汇编语言比C语言快
  • 0.17 先有的语言,还是先有的编译器,第1个编译器是怎么产生的
  • 0.18 编译型程序与解释型程序的区别
  • 0.19 什么是大端字节序、小端字节序
  • 0.20 BIOS中断、DOS中断、Linux中断的区别
  • 0.21 Section和Segment的区别
  • 0.22 什么是魔数
  • 0.23 操作系统是如何识别文件系统的
  • 0.24 如何控制CPU的下一条指令
  • 0.25 指令集、体系结构、微架构、编程语言
  • 0.26 库函数是用户进程与内核的桥梁
  • 0.27 转义字符与ASCII码
  • 0.28 MBR、EBR、DBR和OBR各是什么
  • 第1章 部署工作环境
  • 1.1 工欲善其事,必先利其器
  • 1.2 我们需要哪些编译器
  • 1.2.1 世界顶级编译器GCC
  • 1.2.2 汇编语言编译器新贵NASM
  • 1.3 操作系统的宿主环境
  • 1.3.1 什么是虚拟机
  • 1.3.2 盗梦空间般的开发环境,虚拟机中再装一个虚拟机
  • 1.3.3 virtualBox下载,安装
  • 1.3.4 Linux发行版下载
  • 1.3.5 Bochs下载安装
  • 1.4 配置bochs
  • 1.5 运行bochs
  • 第2章 编写MBR主引导记录,让我们开始掌权
  • 2.1 计算机的启动过程
  • 2.2 软件接力第一棒,BIOS
  • 2.2.1 实模式下的1MB内存布局
  • 2.2.2 BIOS是如何苏醒的
  • 2.2.3 为什么是0x7c00
  • 2.3 让MBR先飞一会儿
  • 2.3.1 神奇好用的$和$$,令人迷惑的section
  • 2.3.2 NASM简单用法
  • 2.3.3 请下一位选手MBR同学做准备
  • 第3章 完善MBR
  • 3.1 地址、section、vstart浅尝辄止
  • 3.1.1 什么是地址
  • 3.1.2 什么是section
  • 3.1.3 什么是vstart
  • 3.2 CPU的实模式
  • 3.2.1 CPU的工作原理
  • 3.2.2 实模式下的寄存器
  • 3.2.3 实模式下内存分段由来
  • 3.2.4 实模式下CPU内存寻址方式
  • 3.2.5 栈到底是什么玩意儿
  • 3.2.6 实模式下的ret
  • 3.2.7 实模式下的call
  • 3.2.8 实模式下的jmp
  • 3.2.9 标志寄存器flags
  • 3.2.10 有条件转移
  • 3.2.11 实模式小结
  • 3.3 让我们直接对显示器说点什么吧
  • 3.3.1 CPU如何与外设通信—IO接口
  • 3.3.2 显卡概述
  • 3.3.3 显存、显卡、显示器
  • 3.3.4 改进MBR,直接操作显卡
  • 3.4 bochs调试方法
  • 3.4.1 bochs一般用法
  • 3.4.2 bochs调试实例
  • 3.5 硬盘介绍
  • 3.5.1 硬盘发展简史
  • 3.5.2 硬盘工作原理
  • 3.5.3 硬盘控制器端口
  • 3.5.4 常用的硬盘操作方法
  • 3.6 让MBR使用硬盘
  • 3.6.1 改造MBR
  • 3.6.2 实现内核加载器
  • 第4章 保护模式入门
  • 4.1 保护模式概述
  • 4.1.1 为什么要有保护模式
  • 4.1.2 实模式不是32位CPU,变成了16位
  • 4.2 初见保护模式
  • 4.2.1 保护模式之寄存器扩展
  • 4.2.2 保护模式之寻址扩展
  • 4.2.3 保护模式之运行模式反转
  • 4.2.4 保护模式之指令扩展
  • 4.3 全局描述符表
  • 4.3.1 段描述符
  • 4.3.2 全局描述符表GDT、局部描述符表LDT及选择子
  • 4.3.3 打开A20地址线
  • 4.3.4 保护模式的开关,CR0寄存器的PE位
  • 4.3.5 让我们进入保护模式
  • 4.4 处理器微架构简介
  • 4.4.1 流水线
  • 4.4.2 乱序执行
  • 4.4.3 缓存
  • 4.4.4 分支预测
  • 4.5 使用远跳转指令清空流水线,更新段描述符缓冲寄存器
  • 4.6 保护模式之内存段的保护
  • 4.6.1 向段寄存器加载选择子时的保护
  • 4.6.2 代码段和数据段的保护
  • 4.6.3 栈段的保护
  • 第5章 保护模式进阶,向内核迈进
  • 5.1 获取物理内存容量
  • 5.1.1 学习Linux获取内存的方法
  • 5.1.2 利用BIOS中断0x15子功能0xe820获取内存
  • 5.1.3 利用BIOS中断0x15子功能0xe801获取内存
  • 5.1.4 利用BIOS中断0x15子功能0x88获取内存
  • 5.1.5 实战内存容量检测
  • 5.2 启用内存分页机制,畅游虚拟空间
  • 5.2.1 内存为什么要分页
  • 5.2.2 一级页表
  • 5.2.3 二级页表
  • 5.2.4 规划页表之操作系统与用户进程的关系
  • 5.2.5 启用分页机制
  • 5.2.6 用虚拟地址访问页表
  • 5.2.7 快表TLB(Translation Lookaside Buffer)简介
  • 5.3 加载内核
  • 5.3.1 用C语言写内核
  • 5.3.2 二进制程序的运行方法
  • 5.3.3 elf格式的二进制文件
  • 5.3.4 elf文件实例分析
  • 5.3.5 将内核载入内存
  • 5.4 特权级深入浅出
  • 5.4.1 特权级那点事
  • 5.4.2 TSS简介
  • 5.4.3 CPL和DPL入门
  • 5.4.4 门、调用门与RPL序
  • 5.4.5 调用门的过程保护
  • 5.4.6 RPL的前世今生
  • 5.4.7 IO特权级
  • 第6章 完善内核
  • 6.1 函数调用约定简介
  • 6.2 汇编语言和C语言混合编程
  • 6.2.1 浅析C库函数与系统调用
  • 6.2.2 汇编语言和C语言共同协作
  • 6.3 实现自己的打印函数
  • 6.3.1 显卡的端口控制
  • 6.3.2 实现单个字符打印
  • 6.3.3 实现字符串打印
  • 6.3.4 实现整数打印
  • 6.4 内联汇编
  • 6.4.1 什么是内联汇编
  • 6.4.2 汇编语言AT&T语法简介
  • 6.4.3 基本内联汇编
  • 6.4.4 扩展内联汇编
  • 6.4.5 扩展内联汇编之机器模式简介
  • 第7章 中断
  • 7.1 中断是什么,为什么要有中断
  • 7.2 操作系统是中断驱动的
  • 7.3 中断分类
  • 7.3.1 外部中断
  • 7.3.2 内部中断
  • 7.4 中断描述符表
  • 7.4.1 中断处理过程及保护
  • 7.4.2 中断发生时的压栈
  • 7.4.3 中断错误码
  • 7.5 可编程中断控制器8259A
  • 7.5.1 8259A介绍
  • 7.5.2 8259A的编程
  • 7.6 编写中断处理程序
  • 7.6.1 从最简单的中断处理程序开始
  • 7.6.2 改进中断处理程序
  • 7.6.3 调试实战:处理器进入中断时压栈出栈完整过程
  • 7.7 可编程计数器/定时器8253简介
  • 7.7.1 时钟—给设备打拍子
  • 7.7.2 8253入门
  • 7.7.3 8253控制字
  • 7.7.4 8253工作方式
  • 7.7.5 8253初始化步骤
  • 7.8 提高时钟中断的频率,让中断来得更猛烈一些
  • 第8章 内存管理系统
  • 8.1 makefile简介
  • 8.1.1 makefile是什么
  • 8.1.2 makefile基本语法
  • 8.1.3 跳到目标处执行
  • 8.1.4 伪目标
  • 8.1.5 make:递归式推导目标
  • 8.1.6 自定义变量与系统变量
  • 8.1.7 隐含规则
  • 8.1.8 自动化变量
  • 8.1.9 模式规则
  • 8.2 实现assert断言
  • 8.2.1 实现开、关中断的函数
  • 8.2.2 实现ASSERT
  • 8.2.3 通过makefile来编译
  • 8.3 实现字符串操作函数
  • 8.4 位图bitmap及其函数的实现
  • 8.4.1 位图简介
  • 8.4.2 位图的定义与实现
  • 8.5 内存管理系统
  • 8.5.1 内存池规划
  • 8.5.2 内存管理系统第一步,分配页内存
  • 第9章 线程
  • 9.1 实现内核线程
  • 9.1.1 执行流
  • 9.1.2 线程到底是什么
  • 9.1.3 进程与线程的关系、区别简述
  • 9.1.4 进程、线程的状态
  • 9.1.5 进程的身份证——PCB
  • 9.1.6 实现线程的两种方式——内核或用户进程
  • 9.2 在内核空间实现线程
  • 9.2.1 简单的PCB及线程栈的实现
  • 9.2.2 线程的实现
  • 9.3 核心数据结构,双向链表
  • 9.4 多线程调度
  • 9.4.1 简单优先级调度的基础
  • 9.4.2 任务调度器和任务切换
  • 第10章 输入输出系统
  • 10.1 同步机制——锁
  • 10.1.1 排查GP异常,理解原子操作
  • 10.1.2 找出代码中的临界区、互斥、竞争条件
  • 10.1.3 信号量
  • 10.1.4 线程的阻塞与唤醒
  • 10.1.5 锁的实现
  • 10.2 用锁实现终端输出
  • 10.3 从键盘获取输入
  • 10.3.1 键盘输入原理简介
  • 10.3.2 键盘扫描码
  • 10.3.3 8042简介
  • 10.3.4 测试键盘中断处理程序
  • 10.4 编写键盘驱动
  • 10.4.1 转义字符介绍
  • 10.4.2 处理扫描码
  • 10.5 环形输入缓冲区
  • 10.5.1 生产者与消费者问题简述
  • 10.5.2 环形缓冲区的实现
  • 10.5.3 添加键盘输入缓冲区
  • 10.5.4 生产者与消费者实例测试
  • 第11章 用户进程
  • 11.1 为什么要有任务状态段TSS
  • 11.1.1 多任务的起源,很久很久以前……
  • 11.1.2 LDT简介
  • 11.1.3 TSS的作用
  • 11.1.4 CPU原生支持的任务切换方式
  • 11.1.5 现代操作系统采用的任务切换方式
  • 11.2 定义并初始化TSS
  • 11.3 实现用户进程
  • 11.3.1 实现用户进程的原理
  • 11.3.2 用户进程的虚拟地址空间
  • 11.3.3 为进程创建页表和3特权级栈
  • 11.3.4 进入特权级3
  • 11.3.5 用户进程创建的流程
  • 11.3.6 实现用户进程—上
  • 11.3.7 bss简介
  • 11.3.8 实现用户进程—下
  • 11.3.9 让进程跑起来—用户进程的调度
  • 11.3.10 测试用户进程
  • 第12章 进一步完善内核
  • 12.1 Linux系统调用浅析
  • 12.2 系统调用的实现
  • 12.2.1 系统调用实现框架
  • 12.2.2 增加0x80号中断描述符
  • 12.2.3 实现系统调用接口
  • 12.2.4 增加0x80号中断处理例程
  • 12.2.5 初始化系统调用和实现sys_getpid
  • 12.2.6 添加系统调用getpid
  • 12.2.7 在用户进程中的系统调用
  • 12.2.8 系统调用之栈传递参数
  • 12.3 让用户进程“说话”
  • 12.3.1 可变参数的原理
  • 12.3.2 实现系统调用write
  • 12.3.3 实现printf
  • 12.3.4 完善printf
  • 12.4 完善堆内存管理
  • 12.4.1 malloc底层原理
  • 12.4.2 底层初始化
  • 12.4.3 实现sys_malloc
  • 12.4.4 内存的释放
  • 12.4.5 实现sys_free
  • 12.4.6 实现系统调用malloc和free
  • 第13章 编写硬盘驱动程序
  • 13.1 硬盘及分区表
  • 13.1.1 创建从盘及获取安装的磁盘数
  • 13.1.2 创建磁盘分区表
  • 13.1.3 磁盘分区表浅析
  • 13.2 编写硬盘驱动程序
  • 13.2.1 硬盘初始化
  • 13.2.2 实现thread_yield和idle线程
  • 13.2.3 实现简单的休眠函数
  • 13.2.4 完善硬盘驱动程序
  • 13.2.5 获取硬盘信息,扫描分区表
  • 第14章 文件系统
  • 14.1 文件系统概念简介
  • 14.1.1 inode、间接块索引表、文件控制块FCB简介
  • 14.1.2 目录项与目录简介
  • 14.1.3 超级块与文件系统布局
  • 14.2 创建文件系统
  • 14.2.1 创建超级块、i结点、目录项
  • 14.2.2 创建文件系统
  • 14.2.3 挂载分区
  • 14.3 文件描述符简介
  • 14.3.1 文件描述符原理
  • 14.3.2 文件描述符的实现
  • 14.4 文件操作相关的基础函数
  • 14.4.1 inode操作有关的函数
  • 14.4.2 文件相关的函数
  • 14.4.3 目录相关的函数
  • 14.4.4 路径解析相关的函数
  • 14.4.5 实现文件检索功能
  • 14.5 创建文件
  • 14.5.1 实现file_create
  • 14.5.2 实现sys_open
  • 14.5.3 在文件系统上创建第1个文件
  • 14.6 文件的打开与关闭
  • 14.6.1 文件的打开
  • 14.6.2 文件的关闭
  • 14.7 实现文件写入
  • 14.7.1 实现file_write
  • 14.7.2 改进sys_write及write系统调用
  • 14.7.3 把数据写入文件
  • 14.8 读取文件
  • 14.8.1 实现file_read
  • 14.8.2 实现sys_read与功能验证
  • 14.9 实现文件读写指针定位功能
  • 14.10 实现文件删除功能
  • 14.10.1 回收inode
  • 14.10.2 删除目录项
  • 14.10.3 实现sys_unlink与功能验证
  • 14.11 创建目录
  • 14.11.1 实现sys_mkdir创建目录
  • 14.11.2 创建目录功能验证
  • 14.12 遍历目录
  • 14.12.1 打开目录和关闭目录
  • 14.12.2 读取1个目录项
  • 14.12.3 实现sys_readdir及sys_rewinddir
  • 14.13 删除目录
  • 14.13.1 删除目录与判断空目录
  • 14.13.2 实现sys_rmdir及功能验证
  • 14.14 任务的工作目录
  • 14.14.1 显示当前工作目录的原理及基础代码
  • 14.14.2 实现sys_getcwd
  • 14.14.3 实现sys_chdir改变工作目录
  • 14.15 获得文件属性
  • 14.15.1 ls命令的幕后功臣
  • 14.15.2 实现sys_stat
  • 第15章 系统交互
  • 15.1 fork的原理与实现
  • 15.1.1 什么是fork
  • 15.1.2 fork的实现
  • 15.1.3 添加fork系统调用与实现init进程
  • 15.2 添加read系统调用,获取键盘输入
  • 15.3 添加putchar、clear系统调用
  • 15.4 实现一个简单的shell
  • 15.4.1 shell雏形
  • 15.4.2 添加Ctrl+u和Ctrl+l快捷键
  • 15.4.3 解析键入的字符
  • 15.4.4 添加系统调用
  • 15.4.5 路径解析转换
  • 15.4.6 实现ls、cd、mkdir、ps、rm等命令
  • 15.5 加载用户进程
  • 15.5.1 实现exec
  • 15.5.2 让shell支持外部命令
  • 15.5.3 加载硬盘上的用户程序执行
  • 15.5.4 使用户进程支持参数
  • 15.6 实现系统调用wait和exit
  • 15.6.1 wait和exit的作用
  • 15.6.2 孤儿进程和僵尸进程
  • 15.6.3 一些基础代码
  • 15.6.4 实现wait和exit
  • 15.6.5 实现cat命令
  • 15.7 管道
  • 15.7.1 管道的原理
  • 15.7.2 管道的设计
  • 15.7.3 管道的实现
  • 15.7.4 利用管道实现进程间通信
  • 15.7.5 在shell中支持管道
  • 参考文献
展开全部

评分及书评

评分不足
2个评分

出版方

人民邮电出版社

人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。