Untitled

操作系统的服务

  • 从用户角度,操作系统有一组服务用于提供用户功能:
    • 用户界面:命令行界面(Command-Line Interface, CLI)、批处理界面(batch interface)、图形用户界面(Graphical User Interface, GUI)
    • 程序执行:系统加载程序到内存并运行
    • I/O 操作
    • 文件系统操作
    • 通信:通信实现可以通过共享内存或消息传递
    • 错误检测:操作系统需要不断检测错误和更正错误,错误可能源于 CPU 或内存硬件(如内存错误或电源故障)、I/O 设备(如磁盘奇偶检验出错、网络连接故障)、用户程序(如算术溢出、企图非法访问内存地址、占用 CPU 时间过长)等
  • 从系统角度,有一组操作系统服务通过共享计算机资源确保系统本身运行高效:
    • 资源分配
    • 记账:记录用户使用资源的类型和数量
    • 保护和安全

中断和异常的概念

中断和异常的定义

中断(Interruption)也称外中断,指来自 CPU 执行指令以外的事件的发生,如设备发出的 I/O 结束中断、时钟中断。

异常(Exception)也称内中断,指源自 CPU 执行指令内部的事件,如程序的非法操作码、地址越界、算术溢出、虚存系统的缺页及专门的陷入指令等引起的事件。

中断处理的过程

  • 中断各阶段处理流程如下:
    • 关中断
    • 保存断点
    • 中断服务程序寻址
    • 保存现场和屏蔽字
    • 开中断
    • 执行中断服务程序
    • 关中断
    • 恢复现场和屏蔽字
    • 开中断、中断返回

系统调用

系统调用(system call)提供操作系统服务的接口,这些调用通常以 C 或 C++ 编写,某些底层任务(如需直接访问硬件的任务)可能以汇编语言编写。

应用程序开发人员根据应用编程接口(Application Programming Interface, API)来设计程序

系统调用的样子

Untitled

Untitled

系统调用的实现

Untitled

系统调用的过程

Untitled

系统调用的参数传递

  • 向操作系统传递参数有三种常用方法:
    • 通过寄存器传递参数
    • 参数存在内存的块或表中,而块或表的地址通过寄存器传递(传递参数的数量或长度没有限制)
    • 参数可以通过程序放在或压入到堆栈,并通过操作系统弹出

系统调用的类型

  • 系统调用可大致分为六大类:
    • 进程控制(Process control)
    • 文件管理(File management)
    • 设备管理(Device management)
    • 信息维护(Information maintenance)
    • 通信(Communications)
    • 保护(Protection)

系统程序

系统程序(system program),也称为系统工具(system utility),为程序开发和执行提供了一个方便的环境。

  • 系统程序可分为以下几类
    • 文件管理
    • 状态信息
    • 文件修改
    • 程序语言支持
    • 程序加载与执行
    • 通信
    • 后台服务

操作系统的设计与实现

设计目标

Untitled

机制与策略

Untitled

一个重要的原则是把策略(policy)和机制(mechanisim)进行分离

策略是可以做什么,即具体实现

机制是如何做,即实现方式

策略可随时间或地点而改变,对策略改变不敏感的通用机制将是更可取的。

实现

操作系统的结构

简单结构

分层方法

微内核

微内核体系结构将内核中最基本的功能(如进程管理等)保留在内核,而将那些不需要再核心态执行的功能移到用户态执行。

移出内核的操作系统代码根据分层的原则被划分为若干服务程序,执行相互独立,交互则都借助于微内核进行通信。

微内核结构有效分离了内核与服务、服务与服务,使它们之间的接口更清晰,维护的代价大大降低,各部分可以独立优化和演进,从而保证操作系统的可靠性。

微内核结构的最大问题时性能问题,因为需要频繁地在核心态和用户态之间进行切换,操作系统的执行开销偏大。

模块

内核模块是可加载的,在操作系统启动时或启动后手动态加载,也可以删除

模块化决定配置灵活、动态

内核提供核心服务,其他服务可在内核运行时动态实现

混合系统

组合不同的结构从而形成混合系统,以便解决性能、安全性和可用性等问题

虚拟机

宿主操作系统:真实硬件

客户端操作系统:虚拟硬件,本质上是有模拟能力的软件

操作系统的生成

编译后产生一个在磁盘上的镜像文件

启动时将镜像文件加载到内存中运行

系统引导(System Boot)

bootstrap program/bootstrap loader:定位内核病假子啊到内存开始执行

Grub: Linux 的一种 bootstrap loader,能管理多个内核镜像,选择启动哪一个

Loadlin: Linu 的一种更轻量级的 bootstrap loader

bootstrap loader 通常存放在硬盘上的引导记录中,ROM 加电后会指示计算机去加载 bootstrap loader