第一章 绪论
操作系统的定义
一般来说,操作系统是管理计算机系统中的软件与硬件资源,控制程序执行,改善人机界面,合理组织计算机工作流程和为用户使用计算机提供良好运行环境的一种系统软件。
先跳过
第二章 操作系统的结构
接口
现代操作系统至少会提供两种类型的接口供用户使用:命令接口与系统调用
命令接口
命令接口通常呈现给用户两种形态:命令行界面与图形用户界面
系统调用
系统调用把应用程序的请求传给内核,调用相应的内核函数完成所需的处理,将处理结果返回给应用程序。
处理器设有两种模式:
- “用户模式”:应用程序运行
- “内核模式”:核心操作系统组件多个驱动程序
系统调用与API的关系
API(Application Programming Interface):是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码。
- API 函数通常为应用程序员调用实际的系统调用。
- 应用程序员更喜欢根据 API 来编程
- 程序员根据 API 设计程序,以希望程序能在任何支持同一 API 的系统上编译并执行。
- 实际系统调用比 API 更为注重细节且更加难用。
系统调用向系统传递参数的方式
- 直接通过寄存器来传递参数。
- 参数存在内存中
- 参数通过程序压入堆栈,并通过操作系统弹出
操作系统结构
1.整体式结构(已经淘汰不用)
首先确定操作系统的总体功能,然后将总功能分解为若干个子功能,实现每个子功能的程序成为模块。再按照功能将上述每个大模块分解为若干个小模块,如此进行下去。
优点:
接口简单直接,系统效率高。
缺点:
没有可读性,也不具备可维护性。一旦某一个过程出了问题,凡是与之存在调用关系的过程都要修改,所以给调试和维护人员带来许多麻烦。
2.层次式结构
把操作系统所有的功能模块按照功能调用次序分别排成若干层,各层之间的模块只有单向调用关系(例如,只允许上层或外层模块调用下层或内层模块)。
优点:
(1)把功能实现的无序性改成有序性,可显著提高设计的准确性。
(2)把模块问的复杂依赖关系改为单向依赖关系,即高层软件依赖于低层软件。
缺点:
分层法的主要困难涉及对层的详细定义,这是因为一层只能使用其下的较低层。
3.微内核 ★
最基本的功能保留在内核,而将那些不需要在核心态执行的功能移到用户态执行,从而降低了内核的设计复杂性。而那些移出的操作系统代码根据分层的原则被划分成若干服务程序,它们的执行相互独立,交互则都借助于微内核进行通信。
微内核的功能
- 低级存储管理
- 进程间通信(IPC)
- I/O和中断管理
优点:
有效地分离了内核与服务、服务与服务,使得它们之间的接口更加清晰,维护的代价大大降低,各部分可以独立地优化和演进,从而保证了操作系统的可靠性。
缺点:
因为需要频繁地在核心态和用户态之间进行切换,操作系统的执行开销偏大
设计的思想
为了实现高可靠性,将操作系统划分成小的、良好定义的模块,只有其中一个模块–微内核–运行在内核态上,其余的模块,由于功能相对弱些,则作为普通用户进程运行
4.模块化结构
模块化结构是指利用面向对象编程技术来生成模块化的内核。其全称为动态可加载模块化结构。
优点:
1)将内核映象的尺寸保持在最小,并具有最大的灵活性;
2)便于检验新的内核代码,而不需重新编译内核并重新引导。
缺点:
1)差的内核模块会导致系统崩溃
2)内核必须维护符号表
3)内核要维护模块之间的依赖性
第三章 进程与线程
进程
1.进程基础
定义:
是并发执行的程序在一个数据集上的执行过程(是系统分配资源和调度的基本单位)
进程的特征:
- 动态性:一个进程有一个产生到消失的生命周期
- 并发性:没有并发就没有进程(并发可以理解为:具有同时处理多个任务的能力,任务可以交替进行,不一定要同时)
- 独立性:每个进程的实体都是一个能独立运行,独立获得资源,独立调度的基本单位
- 异步型:进程按照各自独立的,不可预知的速度向前推进,并按异步方式运行
- 结构特征:由程序段 、数据段、进程控制块三部分组成
与程序的区别
- 程序是一个静态的实体,是一组指令的有序集合,进程是一个动态的实体,有生命期
- 程序是不能并发执行的,但各进程的执行是独立的,执行速度是异步的
- 进程是一个能独立运行的基本单位。没有建立进程的程序是不能作为独立的单位参与运算的
进程控制块(PCB) ★
为了描述一个进程和其它进程以及系统资源的关系
为了刻画一个进程在各个不同时期所处的状态
进程描述信息
进程标识符(process ID):唯一地标识一个进程,通常是一个整数
进程名:通常基于可执行文件名(不唯一)
用户标识符(user ID):进程组关系
进程控制信息
当前状态
优先级(priority)
代码执行入口地址
程序的外存地址
运行统计信息(执行时间、页面调度)
进程间同步和通信;阻塞原因
★系统利用PCB来控制和管理进程,PCB是系统感知进程存在的唯一标志
进程是由一段可执行的程序、数据(程序数据、用户栈以及可修改的程序)、系统栈(用于保存参数、过程调用地址以及系统调用地址)、以及进程控制块PCB组成的集合,该集合称为进程映像。
进程的状态
初始态:进程刚被创建时,处于初始状态,系统已经为它创建了PCB,但还未加载到内存中。
终止态:进程执行结束或被取消,但其PCB等信息还未释放。
基本状态:
- 运行态:进程占有处理器,正在执行。
- 阻塞态:进程等待某个时间的发生。
- 就绪态:具备执行的所有条件,等待系统分配处理器后执行。
挂起态:进程被置换出磁盘,到外存中,等到时机重新激活进入内存
- 就绪挂起态:只要有机会被置换入内存就可以执行
- 阻塞挂起态:在外存中等待某个事件的产生
就
2.进程控制
2.1进程的执行模式
处理器的执行模式:
- 系统态:又叫控制态,或内核态,具有对处理器以及所有指令、寄存器和内存的控制能力。
- 用户态:只能执行规定的指令,访问指定的寄存器和存储区。
程序状态字中有一位表示处理器的执行模式,通过这一位的改变进行执行模式的设置。
2.2进程切换
定义:一个正在运行的进程被中断,操作系统指定另一个进程为运行态,并将控制权交给这个进程。
引起进程切换的事件
- 中断:时钟中断(基于时间片的调度)和I/O中断。
- 陷阱:与当前运行进程所产生的错误或异常有关。
- 系统调用:切换至操作系统进程,请求系统调用的进程转为阻塞态。
2.3进程管理
fork()函数功能: 该函数有两个返回值:子进程中返回0,父进程中返回进程id,出错时返回-1。
有关进程控制的系统调用
- fork,创建一个子进程,形成父子进程
- wait,等待一个子进程结束,父进程等待子进程终止
- exec,执行一个指定文件
- exit,终止子进程,把参数传递给父进程
父进程终止时,操作系统中止其所有后代进程。