顶部
收藏

操作系统原理、实现与实践


作者:
李治军 刘宏伟
定价:
45.00元
ISBN:
978-7-04-049245-3
版面字数:
470.000千字
开本:
16开
全书页数:
暂无
装帧形式:
平装
重点项目:
暂无
出版时间:
2018-06-28
读者对象:
高等教育
一级分类:
计算机/教育技术类
二级分类:
计算机类专业核心课程
三级分类:
操作系统

本书充分突出操作系统作为一个系统保证整体高速运转的理念,同时亦强调各个组成部分必须有机、协调地分工协作,旨在让读者能真正理解操作系统的整体运转原理。

本书从硬件管理这个基本功能出发,依次对操作系统的 CPU 管理、内存管理、外设管理、文件管理等进行了详细的阐述;从上层应用提供的接口出发,对系统接口设计、进程管理、文件接口等内容进行了详细阐述。在单独模块阐述的基础上,深入地阐述了这些模块之间的关系,即这些模块是如何合作成为一个整体系统的。

为避免单纯的原理阐述让读者感到空泛、浮于表面,同时加强操作系统原理和实现的有机融合,本书设计了 12 个实践项目,其中包括 8 个初级认知型实践项目和 4 个高级综合型实践项目,几乎涵盖了操作系统的全部内容。

本书可作为理工科本科生操作系统课程教材或参考书,也可供操作系统开发以及在操作系统上进行相关研究的人员参考。

  • 前辅文
  • 第一章 系统启动------ 打开电源以后发生的故事
    • 1.1 什么是操作系统
    • 1.2 操作系统历史概述
      • 1.2.1 简单的批处理系统
      • 1.2.2 OS/360 的出现
      • 1.2.3 UNIX、Linux 的诞生
      • 1.2.4 操作系统历史的另一个分支------ 人机交互
    • 1.3 操作系统核心轮廓
      • 1.3.1 多进程视图
      • 1.3.2 文件视图
      • 1.3.3 学习操作系统从动手实践开始
    • 1.4 操作系统启动过程
      • 1.4.1 计算机工作机理
      • 1.4.2 操作系统启动过程实例------ 第一阶段
      • 1.4.3 操作系统镜像的生成------ Makefile
      • 1.4.4 操作系统启动过程实例------ 第二阶段
      • 1.4.5 操作系统启动过程实例------ 第三阶段
      • 1.4.6 操作系统启动过程实例------ 第四阶段
    • 1.5 实践项目1: 控制操作系统启动
    • 习题一
  • 第二章 系统接口------ 通向操作系统内核的大门
    • 2.1 用户使用计算机系统的基本形式
    • 2.2 基本系统调用及其应用
      • 2.2.1 fork、exec、wait、exit
      • 2.2.2 open、read、write
      • 2.2.3 printf、scanf
    • 2.3 系统调用的实现机理
      • 2.3.1 内核态与用户态
      • 2.3.2 系统调用与int 0x8
      • 2.3.3 printf 的完整故事
    • 2.4 通过系统调用窥见操作系统的基本脉络
    • 2.5 实践项目2: 添加系统调用
    • 习题二
  • 第三章 多进程------ 操作系统最核心的视图
    • 3.1 如何使用CPU?
      • 3.1.1 CPU 工作机理与使用CPU 的直观想法
      • 3.1.2 问题的引出与并发
    • 3.2 进程概念与多进程视图
      • 3.2.1 进程与程序
      • 3.2.2 CPU 管理与多进程视图
    • 3.3 多进程引起的基本问题
      • 3.3.1 多个进程的组织与进程状态
      • 3.3.2 多个进程的切换和调度
      • 3.3.3 进程间的影响分离
      • 3.3.4 进程间的通信与合作
    • 3.4 实践项目3: 打印进程日志
    • 习题三
  • 第四章 线程切换与调度------ 操作系统的发动机
    • 4.1 线程与进程
      • 4.1.1 线程概念的引入
      • 4.1.2 一个多线程实例
      • 4.1.3 线程与进程
    • 4.2 用户级线程的切换与创建
      • 4.2.1 用户级线程之间的切换
      • 4.2.2 用户级线程的创建
    • 4.3 内核级线程的切换与创建
      • 4.3.1 内核级线程的引出
      • 4.3.2 内核级线程之间的切换
      • 4.3.3 内核级线程的创建
    • 4.4 创建0 号/1 号进程------ 多进程视图的起点
    • 4.5 CPU 调度
      • 4.5.1 CPU 调度的含义与算法准则
      • 4.5.2 若干CPU 调度的基本算法
      • 4.5.3 多级反馈队列调度算法的一个具体实现
    • 4.6 实践项目4: 基于内核栈完成进程切换
    • 习题四
  • 第五章 进程同步------ 让多个进程的推进合理有序
    • 5.1 进程同步问题与睡眠/唤醒
    • 5.2 从信号到信号量
      • 5.2.1 利用信号解决同步问题
      • 5.2.2 将信号扩展为信号量
      • 5.2.3 生产者-- 消费者同步问题的信号量解法
    • 5.3 临界区------ 对信号量的保护
      • 5.3.1 临界区的引出
      • 5.3.2 临界区的软件实现
      • 5.3.3 Lamport 面包店算法
      • 5.3.4 临界区的硬件实现
    • 5.4 信号量的实现与使用
      • 5.4.1 信号量的使用
      • 5.4.2 有正有负信号量的实现
      • 5.4.3 只有正数的信号量的实现
    • 5.5 死锁现象及死锁处理
      • 5.5.1 死锁现象的出现
      • 5.5.2 死锁出现的条件与死锁预防
      • 5.5.3 死锁避免
      • 5.5.4 死锁检测/恢复与死锁忽略
    • 5.6 实践项目5: 信号量的实现与应用
    • 习题五
  • 第六章 内存管理------ 给程序执行提供一个舞台
    • 6.1 内存使用与程序重定位
      • 6.1.1 从取指--- 执行到内存使用
      • 6.1.2 程序重定位
    • 6.2 分段
      • 6.2.1 段的概念
      • 6.2.2 分段机制下的地址转换
    • 6.3 内存分区
      • 6.3.1 可变分区与适配算法
      • 6.3.2 内存碎片
    • 6.4 分页
      • 6.4.1 分页机制
      • 6.4.2 多级页表与快表
    • 6.5 段页式内存管理与虚拟内存
      • 6.5.1 如何将段和页结合在一起
      • 6.5.2 段、页结合时进程对内存的使用
      • 6.5.3 一个真实的段页式内存机制
      • 6.6 实践项目6: 地址映射与共享
    • 习题六
  • 第七章 换入/换出------ 用磁盘和时间来换取一个规整的虚拟内存
    • 7.1 规整的虚拟内存
      • 7.1.1 虚拟内存与换入/换出
      • 7.1.2 请求调页
      • 7.1.3 页面调入的具体实现
    • 7.2 页面换出
      • 7.2.1 基本的页面换出算法
      • 7.2.2 LRU 算法的准确实现
      • 7.2.3 clock 算法
      • 7.2.4 页框个数分配与全局置换
    • 习题七
  • 第八章 设备驱动------ 从文件视图到out 指令
    • 8.1 设备驱动的基本原理
      • 8.1.1 外设的工作原理
      • 8.1.2 文件视图
    • 8.2 显示器的驱动
      • 8.2.1 从printf 开始
      • 8.2.2 文件视图中的大量分支
      • 8.2.3 最终到达mov ax, [pos]
    • 8.3 键盘的驱动
      • 8.3.1 从键盘中断开始
      • 8.3.2 从缓冲队列最终到scanf
    • 8.4 实践项目7: 终端设备字符显示的控制
    • 习题八
  • 第九章 文件系统------ 一个从磁盘到文件再到文件系统的漫长抽象
    • 9.1 磁盘工作的基本原理
      • 9.1.1 磁盘工作的原理
      • 9.1.2 磁盘工作的过程
      • 9.1.3 使用磁盘的直观方法
    • 9.2 生磁盘的使用
      • 9.2.1 第一层抽象: 从扇区到磁盘块请求
      • 9.2.2 第二层抽象: 多个进程产生的磁盘请求队列
      • 9.2.3 第三层抽象: 从磁盘请求到高速缓存
    • 9.3 基于文件的磁盘使用
      • 9.3.1 第四层抽象: 引出文件
      • 9.3.2 文件的实现
      • 9.3.3 第五层抽象: 将整个磁盘抽象成一个文件系统
      • 9.3.4 目录解析的代码实现
    • 9.4 实践项目8: proc 文件的实现
    • 习题九
  • 第十章 大型实践项目一------ 内核级线程的设计与实现
    • 10.1 项目的主旨和基本任务
      • 10.1.1 项目主旨
      • 10.1.2 项目基本任务
    • 10.2 TCB 与PCB
    • 10.3 创建线程与创建进程
      • 10.3.1 对fork 的改造
      • 10.3.2 pthread_create 的实现机理分析
      • 10.3.3 pthread_create 中的用户栈创建
      • 10.3.4 pthread_create 处理start_routine 的参数
      • 10.3.5 内核级线程中的TCB 创建与内核栈创建
    • 10.4 以TCB 为单位进行CPU 调度
    • 10.5 引入TCB 以后的其他修改
      • 10.5.1 进程退出(exit)
      • 10.5.2 进程状态、时间片等内容的操作
    • 10.6 主线程与工作线程的设计与实现
    • 习题十
  • 第十一章 大型实践项目二------ 虚拟内存与交换分区的设计与实现
    • 11.1 项目的主旨和基本任务
      • 11.1.1 项目主旨
      • 11.1.2 项目的基本任务
    • 11.2 交换分区的驱动
      • 11.2.1 给Bochs 增加一块硬盘
      • 11.2.2 交换分区的结构设计
      • 11.2.3 交换分区的初始化
    • 11.3 进程页面的换出
      • 11.3.1 clock 算法的设计
      • 11.3.2 页面环形链表的建立和维护
      • 11.3.3 扫描动作和换出动作的实现
      • 11.3.4 交换分区的写出
    • 11.4 进程页面的换入
    • 11.5 交换分区使用情况的监控
    • 习题十一
  • 第十二章 大型实践项目三------ 鼠标驱动和简单的图形接口实现
    • 12.1 项目的主旨和基本任务
      • 12.1.1 项目主旨
      • 12.1.2 项目的基本任务
    • 12.2 鼠标的驱动
      • 12.2.1 鼠标中断的捕获
      • 12.2.2 键盘控制器i8042 和中断控制器8259A
      • 12.2.3 鼠标输入数据的解码
    • 12.3 显示器的图形工作模式
      • 12.3.1 启动图形模式
      • 12.3.2 建立像素点阵与显存之间的映射
      • 12.3.3 设置屏幕分辨率
      • 12.3.4 开始绘制屏幕
    • 12.4 消息驱动框架
    • 12.5 可视化应用程序的设计与实现
      • 12.5.1 定义图形对象
      • 12.5.2 创建一个定时器
      • 12.5.3 应用程序的核心结构
    • 习题十二
  • 第十三章 大型实践项目四------ 网卡驱动与网络协议的设计与实现
    • 13.1 项目的主旨和基本任务
      • 13.1.1 项目主旨
      • 13.1.2 项目的基本任务
    • 13.2 网卡驱动
      • 13.2.1 给Bochs 安装网卡
      • 13.2.2 网卡驱动的基本原理
      • 13.2.3 读出网卡的MAC 地址
      • 13.2.4 网卡初始化
    • 13.3 ARP 协议的设计与实现
      • 13.3.1 ARP 协议的基本原理
      • 13.3.2 ARP 数据包以及以太网物理帧的形成
      • 13.3.3 利用网卡发送物理帧
      • 13.3.4 利用网卡接收物理帧
      • 13.3.5 ARP 数据包解析与ARP 缓存表
    • 13.4 ICMP 协议及ping 命令
      • 13.4.1 本项目涉及的协议栈结构
      • 13.4.2 ICMP 协议的设计与实现
      • 13.4.3 利用ICMP 协议实现ping 命令
    • 习题十三
  • 参考文献

本数字课程是《操作系统原理、实现与实践》纸质教材的配套资源,是利用数字化技术整合优质教学资源的出版形式,可扩展纸质材料内容,为读者提供电子课件、重难点视频、思考题讲解等内容,供读者完善学习内容。

相关图书