ch2 操作系统结构
2.1 操作系统服务
- 对用户
- 用户界面:命令行界面(CLI)、批界面、图形用户界面(GUI)
- 程序执行
- I/O操作
- 文件系统操作
- 通信
- 错误检测
- 对系统
- 资源分配
- 统计
- 保护和安全
2.2 操作系统的用户界面
- 命令解释程序
- 执行命令的两种常见的方法:
- 命令函解释程序本身包含代码以执行命令
- 由系统程序实现绝大多数命令(UNIX)
- 执行命令的两种常见的方法:
- 图形用户界面(占空间多一点)
2.3 系统调用(system call)
- 系统调用
- 操作系统提供一系列的预定功能,通过一组称为系统调用接口呈现给编程人员
- 系统调用把应用程序的请求传给内核,系统调用相应的内核函数完成所需的处理,将处理结果返回给应用程序
- C/C++编写
- 系统调用是内核的一部分
- 如何寻找相应的内核函数?
- 实际上每一个系统调用都和一个数相关联,通过索引表找到相应的内核函数,类似于中断向量表,本质上也是一种软中断(trap)
- 三种常用应用程序接口(API,Application Programming Interface)
- 适用于Windows系统的Win32 API
- 适用于POSIX系统的POSIX API(UNIX,Linux,Mac OS)
- 适用于Java虚拟机程序的Java API
- 使用API而不是用系统调用的原因
- 如果说系统调用是内核和应用程序之间信息交流的通道,那么API就是程序和开发人员之间交流的通道,为开发人员隐藏了系统调用的实现细节,提供访问操作硬件的权力
- 原因:API的可移植性强,系统调用操作难度较大(细节和困难)
- 向操作系统传递参数的三种方法
- 通过寄存器
- 将参数存在内存和表中,将块的地址通过寄存器来传递
- 参数通过程序压入堆栈,通过操作系统弹出
2.4 系统调用类型
- 分为五类
- 进程控制
- 文件管理
- 设备管理
- 信息维护
- 通信
2.5 系统程序
- 系统程序提供了一个方便的环境,以开发程序和执行程序
- 一小部分的系统程序只是系统调用的简单接口,其他的可能是相当复杂的。分为如下的几类
- 文件管理
- 状态信息
- 文件修改
- 程序语言支持和装入
- 通信
2.6 操作系统设计和实现
- 策略与机制
- 策略决定做什么(what)
- 机制决定如何做(how)
2.7 操作系统结构
- 四种结构
- 简单结构(Simple Structure):早期的操作系统并没有很好的架构,有些甚至没有区分核心态和用户态,导致系统的不稳定性
- 分层结构(Layered Structure):将操作系统分为多个层次,最底层的是硬件(层0),最高层的为用户接口(层N),每一层都只依靠更底层的功能来实现,这样形成一个层次化结构。
- 优点:简化了构造和调试
- 弊端:耦合性高,层次之间很难界定;效率较低,一个系统调用可能要陷入多个层再返回,增加开销
- 微内核(Microkernels)
- 模块(Module):使用面对对象的特点,将各个功能模块化,每个模块之间采用接口进行通讯,必要的时候可以将一部分的内容加载到内核之中进行操作。类似于层次结构,但是模块之间没有上下层依赖关系,模块之间可以相互调用,更加灵活;类似于微内核,但必要的时候会将内容加载到内核之中,比微内核更有效率。 许多操作系统采用混合架构
- 微内核
- 将所有非基本的部分从内核中移走,并将他们实现为系统程序或用户程序,从而得到更小的内核
- 微内核通常包括最小的进程和内存管理以及通信功能
- 用户程序和系统服务(运行在用户空间的)通过微内核以消息传递的形式进行通信,并不会直接交互
- 微内核的优缺点
- 优点:便于扩充操作系统;操作系统给容易移植;更好的安全性和可靠性
- 缺点:由于系统功能总开销的增加二导致系统性能的下降(各个服务之间缺少通信,只能依靠微内核的信息传递,导致效率下降)
2.8 虚拟机
- 核心思想
- 虚拟机的核心思想就是将一套硬件设备抽象成多套。采用CPU调度和虚拟内存的技术,制造每一个进程都有自己的处理器和内存的假象。
- 虚拟机的优点
- 对于操作系统设计员,可以在虚拟机上进行系统开发,而不必进行中断,停止当前操作系统;对于用户来说,每个虚拟机完全独立于其他虚拟机,所以不同系统资源有完全的保护,没有安全问题
- 虚拟机资源共享的两种实现方法
- 可以通过共享小型磁盘来共享文件(模拟共享物理磁盘,但通过软件实现)
- 可以通过定义一个虚拟机的网络(模拟物理通信网络,但通过软件实现)
- 虚拟机实例 JVM,VMware,VirtualBox,Cygwin(基于Windows的Unix模拟环境)
2.9 系统,启动!(系统启动
- 生成操作系统以后,它必须要为硬件所使用
- 绝大多数的计算机系统都有一小块代码,称为引导程序或者引导装载程序,这段代码能定位操作系统内核,将他装入内存,开始执行