内容简介
《Linux操作系统原理与应用(第2版)》是Linux内核及动手实践的入门教程。在庞大的Linux内核中,选取*基本的内容——进程管理、中断、内存管理、系统调用、内核同步、文件系统、I/O设备管理等进行阐述。从原理出发,基于Linux内核源代码但又不局限于代码,分析原理如何落实到代码,并通过简单有效的实例说明如何调用Linux内核提供的函数进行内核级程序的开发。
目录
第1章 概述
1.1 认识操作系统
1.1.1 从使用者角度看
1.1.2 从程序开发者的角度看
1.1.3 从操作系统在整个计算机系统所处位置看
1.1.4 从操作系统设计者的角度看
1.1.5 操作系统组成
1.2 开放源代码的UNIX/Linux操作系统
1.2.1 UNIX诞生和发展
1.2.2 Linux诞生
1.2.3 操作系统标准POSIX
1.2.4 GNU和Linux
1.2.5 Linux的开发模式
1.3 Linux内核
1.3.1 Linux内核的技术特点
1.3.2 Linux内核的位置
1.3.3 Linux内核体系结构
1.4 Linux内核源代码
1.4.1 Linux内核版本
1.4.2 Linux内核源代码的结构
1.4.3 Linux内核源代码分析工具
1.5 Linux内核模块编程入门
1.5.1 模块的定义
1.5.2 编写一个简单的模块
1.5.3 应用程序与内核模块的比较
1.6 Linux内核中链表的实现及应用
1.6.1 链表的演化
1.6.2 链表的定义和操作
1.6.3 链表的应用
1.7 小结
习题
第2章 内存寻址
2.1 内存寻址
2.1.1 Intelx86CPU寻址的演变
2.1.2 80x86寄存器简介
2.1.3 物理地址、虚拟地址及线性地址
2.2 段机制
2.2.1 段描述符
2.2.2 地址转换及保护
2.2.3 Linux中的段
2.3 分页机制
2.3.1 页与页表
2.3.2 线性地址到物理地址的转换
2.3.3 分页举例
2.3.4 页面高速缓存
2.4 Linux中的分页机制
2.5 LinuX中的汇编语言
2.5.1 AT&T;与Intel汇编语言的比较
2.5.2 AT&T;汇编语言的相关知识
2.5.3 GCC嵌人式汇编
2.6 Linux系统地址映射举例
2.7 小结
习题
第3章 进程
3.1 进程介绍
3.1.1 程序和进程
3.1.2 进程的层次结构
3.1.3 进程状态
3.1.4 进程举例
3.2 Linux系统中的进程控制块
3.2.1 进程状态
3.2.2 进程标识符
3.2.3 进程之间的亲属关系
3.2.4 进程控制块的存放
3.2.5 当前进程
3.3 Linux系统中进程的组织方式
3.3.1 进程链表
3.3.2 哈希表
3.3.3 就绪队列
3.3.4 等待队列
3.4 进程调度
3.4.1 基本原理
3.4.2 时间片
3.4.3 Linux进程调度时机
3.4.4 进程调度的依据
3.4.5 调度函数schedule()的实现
3.4.6 Linux2.6 调度程序的改进
3.5 进程的创建
3.5.1 创建进程
3.5.2 线程及其创建
3.6 与进程相关的系统调用及其应用
3.6.1 fork系统调用
3.6.2 exec系统调用
3.6.3 wait系统调用
3.6.4 exit系统调用
3.6.5 进程的一生
3.7 系统调用及应用
3.8 小结
习题
第4章 内存管理
4.1 Linux的内存管理概述
4.1.1 虚拟内存、内核空间和用户空间
4.1.2 虚拟内存实现机制间的关系
4.2 进程的用户空间管理
4.2.1 进程用户空间的描述
4.2.2 进程用户空间的创建
4.2.3 虚存映射
4.2.4 进程的虚存区举例
4.2.5 与用户空间相关的系统调用
4.3 请页机制
4.3.1 缺页异常处理程序
4.3.2 请求调页
4.3.3 写时复制
4.4 物理内存分配与回收
4.4.1 页描述符
4.4.2 伙伴算法
4.4.3 物理页面的分配
4.4.4 物理页面的回收
4.4.5 Slab分配机制
4.4.6 内核空间非连续内存区的分配
4.4.7 物理内存分配举例
4.5 交换机制
4.5.1 交换的基本原理
4.5.2 页面交换守护进程kswapd
4.6 内存管理实例
4.6.1 相关背景知识
4.6.2 代码体系结构介绍
4.6.3 实现过程
4.6.4 程序代码
4.7 小结
习题
第5章 中断和异常
5.1 中断是什么
5.1.1 中断向量
5.1.2 外设可屏蔽中断
5.1.3 异常及非屏蔽中断
5.1.4 中断描述符表
5.1.5 相关汇编指令
5.2 中断描述符表的初始化
5.2.1 IDT表项的设置
5.2.2 对陷阱门和系统门的初始化
5.2.3 中断门的设置
5.2.4 中断处理程序的形成
5.3 中断处理
5.3.1 中断和异常的硬件处理
5,3.2 中断请求队列的建立
5.3.3 中断处理程序的执行
5.3.4 从中断返回
5.3.5 中断的简单应用
5.4 中断的下半部处理机制
5.4.1 为什么把中断分为两部分来处理
5.4.2 小任务机制
5.4.3 工作队列
5.5 中断应用——时钟中断
5.5.1 时钟硬件
5.5.2 时钟运作机制
5.5.3 Linux时间系统
5.5.4 时钟中断
5.5.5 定时器及应用
5.6 小结
习题
……
第6章 系统调用
第7章 内核中的同步
第8章 文件系统
第9章 设备驱动
参考文献
精彩书摘
《Linux操作系统原理与应用(第2版)》:
3.4.1基本原理
从前面可以看到,进程运行时需要各种各样的系统资源,如内存、文件、打印机和最宝贵的CPU等,所以说,调度的实质就是资源的分配。系统通过不同的调度算法来实现这种资源的分配。通常来说,选择什么样的调度算法取决于资源的分配策略,一个好的调度算法应当考虑以下几个方面。
(1)公平:保证每个进程得到合理的CPU时间。
(2)高效:使CPU保持忙碌状态,即总是有进程在CPU上运行。
(3)响应时间:使交互用户的响应时间尽可能短。
(4)周转时间:使批处理用户等待输出的时间尽可能短。
(5)吞吐量:使单位时间内处理的进程数量尽可能多。
很显然,这5个目标不可能同时达到,所以,不同的操作系统会在这几个方面作出相应的取舍,从而确定自己的调度算法,例如UNIX采用动态优先数词度、BSD采用多级反馈队列调度、Windows采用抢先式多任务调度等。
下面来了解一下主要的调度算法及其基本原理。
1.时间片轮转调度算法
时间片(Time Slice)就是分配给进程运行的一段时间。
在分时系统中,为了保证人机交互的及时性,系统使每个进程依次地按时间片轮流地执行,此时应采用时间片轮转法进行调度。在通常的轮转法中,系统将所有的可运行(即就绪)进程按先来先服务的原则,排成一个队列,每次调度时把CPU分配给队首进程,并令其执行一个时间片。时间片的大小从几毫秒到几百毫秒不等。当执行的时间片用完时,系统发出信号,通知调度程序,调度程序便根据此信号来停止该进程的执行,并将它送到运行队列的末尾,等待下一次执行;然后,把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程,在一个给定的时间(人所能接受的等待时间)内,均能获得一个时间片的处理机执行时间。
2.优先权调度算法
为了照顾到紧迫型进程在进入系统后便能获得优先处理,引入了最高优先权调度算法。当将该算法用于进程调度时,系统将把处理机分配给运行队列中优先权最高的进程,这时,又可进一步把该算法分成两种方式。
……
Linux操作系统原理与应用(第2版) 下载 mobi epub pdf txt 电子书 格式