第2章: 操作系统结构 Operating System Concepts – 7th Edition, Jan 14, 2005 2.1 Silberschatz, Galvin and Gagne ©2005 目录 操作系统服务 操作系统的用户界面 系统调用 系统调用类型 系统程序 操作系统设计和实现 操作系统结构 虚拟机 系统生成 系统启动 Operating System Concepts – 7th Edition, Jan 14, 2005 2.2 Silberschatz, Galvin and Gagne ©2005 本章目标 介绍操作系统为用户、进程和其他系统提供的 服务 讨论组织操作系统的不同方法 解释如何安装、定制操作系统,以及如何启动 Operating System Concepts – 7th Edition, Jan 14, 2005 2.3 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7th Edition, Jan 14, 2005 2.4 Silberschatz, Galvin and Gagne ©2005 2.1 操作系统服务 操作系统向用户和程序提供一个环境以执行程 用户界面 程序执行 I/O 操作 文件系统操作 通信 安全与保护 错误检测 Operating System Concepts – 7th Edition, Jan 14, 2005 2.5 Silberschatz, Galvin and Gagne ©2005 2.1 操作系统服务 操作系统向程序和用户提供一个环境以执行程序 用户界面 – 命令行、图形、批界面 Operating System Concepts – 7th Edition, Jan 14, 2005 2.6 Silberschatz, Galvin and Gagne ©2005 操作系统服务 操作系统向程序和用户提供一个环境以执行程序 程序执行 -程序必须能结束执行,包括正常或不正常 结束(指明错误) Operating System Concepts – 7th Edition, Jan 14, 2005 2.7 Silberschatz, Galvin and Gagne ©2005 操作系统服务 操作系统向程序和用户提供一个环境以执行程序 I/O 操作 每个设备根据ICH的规范有专用I/O地址 用户不能直接控制I/O BIOS(Basic Input/Output System,基本输入输出系统), 提供最低级硬件控制的程序,是程序和备间的枢纽 CPU与外设的交互方式 – 中断处理方式 – io内存(设备寄存器参与内存统一编址) – io端口(独立地址空间,内存指令不能访问) Operating System Concepts – 7th Edition, Jan 14, 2005 2.8 Silberschatz, Galvin and Gagne ©2005 操作系统服务 操作系统向程序和用户提供一个环境以执行程序 文件系统操作 创建、删除、搜索、列出信息,访问权限 Operating System Concepts – 7th Edition, Jan 14, 2005 2.9 Silberschatz, Galvin and Gagne ©2005 操作系统服务 操作系统向程序和用户提供一个环境以执行程序 通信 – 进程间可能需要交换信息 (共享内存,消息交换) 同一台计算机运行的进程间 网络连接的不同计算机上的进程间 各并发进程之间并不是完全互相独立的 • 竞争共享资源 • 通过数据交换来协调、协作 Operating System Concepts – 7th Edition, Jan 14, 2005 2.10 Silberschatz, Galvin and Gagne ©2005 操作系统服务 操作系统向程序和用户提供一个环境以执行程序 错误检测 – OS 需要知道可能出现的错误 可能发生在CPU 或内存硬件(电源失败)、I/O设备(网络 磁盘、打印机)、用户程序(溢出、越界、超时)中 对于每种类型的错误,OS 应该采取适当的动作以确保正 确和一致的计算 调试工具可以在很大程度上加强用户和程序员有效使用 系统的能力 Operating System Concepts – 7th Edition, Jan 14, 2005 2.11 Silberschatz, Galvin and Gagne ©2005 操作系统服务 还有一组操作系统函数通过共享计算机资源提高效率 资源分配 – 当多个用户或多个作业并发运行时,系统必须 为它们中的每一个分配资源 统计 – 需要记录哪些用户使用了多少和什么类型的资源 保护和安全 – 对于保存在多用户或网络连接的计算机系统 中的信息,用户可能需要控制信息的使用 保护即确保所有对系统资源的访问是受控的 Security系统安全 不受外界侵犯,延伸到外部I/O设备不 受非法访问 如果一个系统需要保护和安全,那么系统中的所有部分 都要预防。一条链子的强度与其最弱的链环有关 Operating System Concepts – 7th Edition, Jan 14, 2005 2.12 Silberschatz, Galvin and Gagne ©2005 2.1 操作系统服务 操作系统向程序和用户提供一个环境以执行程 用户界面 程序执行 I/O 操作 文件系统操作 通信 安全与保护 错误检测 Operating System Concepts – 7th Edition, Jan 14, 2005 2.13 Silberschatz, Galvin and Gagne ©2005 2.2 操作系统用户界面 − 命令行界面 CLI − 图形界面 GUI Operating System Concepts – 7th Edition, Jan 14, 2005 2.14 Silberschatz, Galvin and Gagne ©2005 命令解释程序 CLI 允许用户直接输入操作系统完成的命令 主要作用是获取并执行用户指定的命令 有时有多种实现方式 – 外壳(shells) – 命令解释器 – Bourne shell,C Shell, Korn Shell... 内核实现:包含代码以执行命令 – rm file.txt – 跳转到相应的代码段(rm),设置参数、执行系统调用 系统程序实现:搜索rm文件,加载代码进内存 – 增加新命令通过创建文件实现,无需修改shell Operating System Concepts – 7th Edition, Jan 14, 2005 2.15 Silberschatz, Galvin and Gagne ©2005 操作系统用户界面 - GUI 用户界面友好的桌面接口 通常使用鼠标、键盘和监视器 图标代表文件、程序、系统功能等 不同对象上鼠标按钮导致不同的动作 GUI首次出现在 Xerox PARC 现在许多系统同时包含CLI和GUI界面 Microsoft Windows使用带有命令行的图形界面 Apple Mac OS X, Aqua, Tiger, Leopard, Lion, Mavericks... UNIX 使用命令行界面并有多个shell可用 Solaris 是 CLI 界面带有可选的图形界面 Operating System Concepts – 7th Edition, Jan 14, 2005 2.16 Silberschatz, Galvin and Gagne ©2005 2.3 系统调用 操作系统提供的编程接口(面向程序) 常用高级语言编写 (C or C++) 大部分程序通过高层应用程序接口(API)访问,不直接 使用系统调用 三种常用 APIs: 用于Windows 的Win32 API, 适用于POSIX的系统 (包括几乎所有版本的UNIX, Linux, 和Mac OS X)的POSIX API 用于 Java 虚拟机 (JVM) 的Java API Operating System Concepts – 7th Edition, Jan 14, 2005 2.17 Silberschatz, Galvin and Gagne ©2005 函数库调用 系统调用 在所有的ANSI C编译器版本中,C库 各操作系统的系统调用是不同的 函数是相同的 它调用函数库中的一段程序(或函数)它调用系统内核的服务 与用户程序相联系 是操作系统的一个入口点 在用户地址空间执行 在内核地址空间执行 它的运行时间属于“用户时间” 它的运行时间属于“系统”时间 需要在用户空间和内核上下文环境间 属于过程调用,调用开销较小 切换,开销较大 在C函数库libc中有大约300个函数 在UNIX中大约有90个系统调用 典型的C函数库调用:system fprintf 典型系统调用:chdir fork write brk malloc 内核态(内核模式) 用户态(用户模式) Operating System Concepts – 7th Edition, Jan 14, 2005 2.18 Silberschatz, Galvin and Gagne ©2005 系统调用举例 拷贝一个文件的内容到另一个文件的系统调用序列 Operating System Concepts – 7th Edition, Jan 14, 2005 2.19 Silberschatz, Galvin and Gagne ©2005 标准 API的例子 可考虑Win32 API中ReadFile()方法 ,从文件中读取内容 ReadFile()函数的参数描述如下: HANDLE file—所要读取的文件 LPVOID buffer—读进写出的数据缓冲 DWORD bytesToRead—将要读入缓冲区的字节数 LPDWORD bytesRead—上次读操作读的字节数 LPOVERLAPPED ovl—指示是否使用重叠 I/O,异步读取? Operating System Concepts – 7th Edition, Jan 14, 2005 2.20 Silberschatz, Galvin and Gagne ©2005 系统调用实现 每个系统调用对应一个与其相关的数字 系统调用接口根据这些数字维护一个列表索引 系统调用接口调用所需的系统调用(操作系统内 核中),并返回系统调用状态及其他返回值 调用者不需要知道系统调用具体实现 只需遵循API并了解执行系统调用后系统做了什么 通过API操作系统接口,大部分细节对程序员都隐藏起来, 并由执行支持库所管理 Operating System Concepts – 7th Edition, Jan 14, 2005 2.21 Silberschatz, Galvin and Gagne ©2005 API – 系统调用 – OS 之间的关系 只能受限的访问内存, 不允许访问外围设备 陷阱指令 用户程序不能控制在内核态中执行的指令 内核代码 CPU可以访问所有内存数据 CPU可以访问外围设备 Operating System Concepts – 7th Edition, Jan 14, 2005 2.22 Silberschatz, Galvin and Gagne ©2005 标准的C库例子 C 程序库调用 printf(), 其调用了write()系统调用 printf() putc() int write(int,void*,int) 宏STUB Operating System Concepts – 7th Edition, Jan 14, 2005 2.23 user.h 找不到具体实现 Silberschatz, Galvin and Gagne ©2005 系统调用参数传递(略) 通常,要提供比所需系统调用识别符更多的信息 信息的类型和数量根据操作系统和调用有所不同 向操作系统传递参数有三种方法 通过寄存器传递参数 (最简单的) 一些情况下,参数数量比寄存器多 参数存在内存的块和表中,并将块的地址通过寄存器传递 Linux 和 Solaris 采用这种方法 参数也可通过程序放在或压入堆栈中,通过操作系统弹出 块或堆栈方法不限制所传递参数的数量或长度 Operating System Concepts – 7th Edition, Jan 14, 2005 2.24 Silberschatz, Galvin and Gagne ©2005 通过表传递参数(略) Operating System Concepts – 7th Edition, Jan 14, 2005 2.25 Silberschatz, Galvin and Gagne ©2005 2.4 系统调用类型 进程控制 文件管理 设备管理 信息维护 通信 Operating System Concepts – 7th Edition, Jan 14, 2005 2.26 Silberschatz, Galvin and Gagne ©2005 MS-DOS 执行状态 (a) 系统启动时 Operating System Concepts – 7th Edition, Jan 14, 2005 (b) 执行程序时 2.27 Silberschatz, Galvin and Gagne ©2005 FreeBSD 运行多个程序 Operating System Concepts – 7th Edition, Jan 14, 2005 2.28 Silberschatz, Galvin and Gagne ©2005 dtrace 如何找出系统运行瓶颈? dtrace:动态跟踪系统性能及其他问题的工具 Solaris中分散着30,000多的位置指针,也叫探测器probes ,DTrace可激活成千上万的探测器,记录所关注的位 置指定的数据.如命中,即可从该地址显示用户进程或 系统内核的数据,从而了解系统,包括: 任何函数的参数 内核的任何全局变量 函数调用的时间(NS,十亿分之一秒,无任何其他PC/Unix在 ns一级精度) 跟踪堆栈,包括指明函数调用的代码 函数调用时运行的进程 产生函数调用的线程 统计调用次数、磁盘占用等信息 Operating System Concepts – 7th Edition, Jan 14, 2005 2.29 Silberschatz, Galvin and Gagne ©2005 Solaris 10 dtrace 动态跟踪工具 begin{ trace("now begin\n"); } pid$1::Function:{ ustack(); } end{ trace("now end\n"); } Concepts – 7th Edition, Jan 14, 2005 Operating System 2.30 Silberschatz, Galvin and Gagne ©2005 2.5 系统程序 提供开发和执行程序的环境 文件管理 – 创建、删除、复制、重命名、打印、 转储、列出和操作文件和目录 状态信息 一些程序从系统那里得到状态信息 – 日期、时间、可用 内存、磁盘空间和用户数等 另一些需要提供详细的性能、登录和调试信息 这些信息经格式化后打印到终端、输出设备或文件 有些系统支持注册表 –用于存储和检索配置信息, regedit Operating System Concepts – 7th Edition, Jan 14, 2005 2.31 Silberschatz, Galvin and Gagne ©2005 系统程序 文件修改 有多个文件编辑器创建和修改文件 也有特殊命令用于查找文件内容或完成文本转换 程序语言支持 常用程序设计语言的编译程序、汇编程序、调试程 序和解释程序 程序装入和执行 加载程序、重定位加载程序、链接编辑器和覆盖式 加载程序,还有高级语言或机器语言的调试程序 通信 提供在进程、用户和计算机系统之间创建虚拟链接 的机制。浏览网页、电子邮件、远程登录 Operating System Concepts – 7th Edition, Jan 14, 2005 2.32 Silberschatz, Galvin and Gagne ©2005 2.6 操作系统设计和实现 OS的设计和实现没有完整的解决方案,但有些方 法还是成功的 不同操作系统的内部结构也有很大不同 从定义系统的目标和规格开始 系统设计受到硬件选择和系统类型的影响 用户目标 和系统目标 用户目标 – 系统应该方便和容易使用、易学、可靠、 安全和快速 系统目标 – 系统应该容易设计、实现和维护,也应该 灵活、可靠、高效且没有错误 Operating System Concepts – 7th Edition, Jan 14, 2005 2.33 Silberschatz, Galvin and Gagne ©2005 操作系统设计和实现 区分的重要原则 策略(Policy): case sensitive 机制(Mechanism): case independent 机制决定如何做, 策略决定做什么 策略与机制的区分对于灵活性来说很重要 策略可能会随时间或位置而有所改变 实现 高级语言 vs. 汇编 : 性能 vs. 通用性 Operating System Concepts – 7th Edition, Jan 14, 2005 2.34 Silberschatz, Galvin and Gagne ©2005 2.7 系统结构 MS-DOS 分层 微内核 模块 源代码(万行) 9000 8000 7000 6000 5000 4000 3000 2000 1000 0 Unix V1.0 Operating System Concepts – 7th Edition, Jan 14, 2005 Linux 2.2.0 2.35 Windows 7 Windows VistaSilberschatz, Mac OS XGalvin and Gagne ©2005 2.7.1 简单结构 无结构 早期操作系统:规模小,简单,功能有限 问题 混乱 难以维护和更新 易受错误或恶意代码伤害 不适合大规模系统开发 Operating System Concepts – 7th Edition, Jan 14, 2005 2.36 Silberschatz, Galvin and Gagne ©2005 MS-DOS 层次结构 不划分模块 尽管MS-DOS有某种 结构,其接口和功能 层没有划分清楚 程序错误导致整个系统崩溃 Operating System Concepts – 7th Edition, Jan 14, 2005 2.37 Silberschatz, Galvin and Gagne ©2005 早期 UNIX UNIX – 受到硬件功能的限制,原始的UNIX操作系统为 受限结构。 UNIX OS 由两个独立部分组成 系统程序: 用户界面,编译器,系统库... 内核 接口和驱动程序,硬件上和系统调用接口下的所有部分 文件系统、CPU调度、内存管理和其他操作系统功能 越来越大,难以管理 Operating System Concepts – 7th Edition, Jan 14, 2005 2.38 Silberschatz, Galvin and Gagne ©2005 2.7.2 层次结构 操作系统划分为若干层,在低层上构建高层。底层(0层)为硬 件;最高层( N层)为用户层 考虑模块化,每层只使用低层次的功能和服务 THE 操作系统 (By Edsger Wybe Dijkstra) 优点: 更灵活、维护效率低 缺点: 影响效率、分层不是普适思想 * File <--> I/O 调用关系 Operating System Concepts – 7th Edition, Jan 14, 2005 2.39 Silberschatz, Galvin and Gagne ©2005 Dijkstra Edsger Wybe Dijkstra − 提出信号量和PV原语 − 解决了“哲学家聚餐”问题 − 最短路径算法(SP)和银行家算法的创造者 − 结构程序设计之父 − THE操作系统的设计者和开发者 与D.E. Knuth并成为当代最伟大的计算机科学家 Operating System Concepts – 7th Edition, Jan 14, 2005 2.40 Silberschatz, Galvin and Gagne ©2005 2.7.3 微内核 Fact 1: 服务器对系统稳定性和安全性要求更高 Fact 2: 代码运行总会出错 Operating System Concepts – 7th Edition, Jan 14, 2005 2.41 Silberschatz, Galvin and Gagne ©2005 2.7.3 微内核 从核内移出尽可能多的部分到用户空间 发生在用户模块间的通信使用消息传递形式 好处: 便于扩充OS 用户空间,不改变内核 内核修改所做的改变小 便于移植操作系统到新架构系统上 更稳定 (更少的代码运行在核心态) 更安全 多数服务是用户态执行 坏处: 用户空间和内核空间通信的系统开销增加 Operating System Concepts – 7th Edition, Jan 14, 2005 2.42 Silberschatz, Galvin and Gagne ©2005 微内核系统 第一个微内核系统:CMU的Mach Tru64 Unix使用Mach内核 QNX-基于微内核的实时操作系统 Windows NT,2000,2003等 Operating System Concepts – 7th Edition, Jan 14, 2005 2.43 Silberschatz, Galvin and Gagne ©2005 2.7.4 模块 大部分现代操作系统用内核模块来实现 使用面向对象方法 每个核心部件是分开的 每个与其他组件的会话被称为接口 每个组件在需要时被加载到内核 总体而言,类似于分层方法,但更灵活 Operating System Concepts – 7th Edition, Jan 14, 2005 2.44 Silberschatz, Galvin and Gagne ©2005 Solaris 模块 类似微内核,核心模块提供核心功能及其他模块加载和 通信的相关信息,模块不需要调用消息来通信 Operating System Concepts – 7th Edition, Jan 14, 2005 2.45 Silberschatz, Galvin and Gagne ©2005 Mac OS X 结构 混合结构 Operating System Concepts – 7th Edition, Jan 14, 2005 2.46 Silberschatz, Galvin and Gagne ©2005 iOS 基于Mac OS X, 增加部分功能性部件 − Cocoa Touch:提供Objective C API用于开发apps − Media Services:图像/音视频服务 − Core Services:提供云计算、数据 库等服务 Cocoa Touch Media Service Core Services Core OS − Core OS: Mac OS X内核 Operating System Concepts – 7th Edition, Jan 14, 2005 2.47 Silberschatz, Galvin and Gagne ©2005 2.8 虚拟机 Virtual Machines 虚拟机:一种通过软件模拟实现,具有完整硬件 系统功能,并运行在一个完全隔离环境中的完整 计算机系统 物理计算机资源共享以创建虚拟机 每个虚拟机同其他虚拟机隔离 由于需要对物理机器进行精确复制,虚拟机实现 困难 上个世纪60年代,虚拟机用于大型机 IBM VM操作系统 Operating System Concepts – 7th Edition, Jan 14, 2005 2.48 Silberschatz, Galvin and Gagne ©2005 虚拟机实现 高级语言虚拟机 模拟代码执行 目的:跨平台 工作站虚拟机 Guest OS 面向工作站、PC 目的:多个操作系统可以同时在一个计算机上使用 服务器虚拟机 多用户、多操作系统并存 目的:把一个物理计算机虚拟化为多个虚拟机 Operating System Concepts – 7th Edition, Jan 14, 2005 2.49 Silberschatz, Galvin and Gagne ©2005 高级语言虚拟机 目前,有上百种不同的高级语言虚拟机 JAVA虚拟机-JVM JAVA VM Oracle Hotspot VM IBM J9 VM Zing VM CLDC-HI Dalvik VM 50 Operating System Concepts – 7th Edition, Jan 14, 2005 2.50 Silberschatz, Galvin and Gagne ©2005 Java 虚拟机 Java虚拟机(JVM):JAVA语言的解释器 可运行Java代码的假想计算机 只要根据JVM规格将解释器移植到特定的操作系统上, 就能运行经过编译的任何Java代码 特点:平台无关性 Operating System Concepts – 7th Edition, Jan 14, 2005 2.51 Silberschatz, Galvin and Gagne ©2005 工作站虚拟机 工作站虚拟机:操作系统上的虚拟机 宿主操作系统(Host OS):安装在硬件上的OS 客户操作系统(Guest OS)安装在操作系统上的操 作系统 工作站虚拟机安装在宿主操作系统上,在工作站虚拟 机中可以安装客户操作系统 好处 同时在一个计算机上使用多个操作系统 一个宿主操作系统,若干个客户操作系统 52 Operating System Concepts – 7th Edition, Jan 14, 2005 2.52 Silberschatz, Galvin and Gagne ©2005 虚拟机工作站软件 VMWare Station Virtual Box Virtual PC Parallels Desktop 53 Operating System Concepts – 7th Edition, Jan 14, 2005 2.53 Silberschatz, Galvin and Gagne ©2005 VMware Station Operating System Concepts – 7th Edition, Jan 14, 2005 2.54 Silberschatz, Galvin and Gagne ©2005 运行例子 Windows 7 Mac OS X Operating System Concepts – 7th Edition, Jan 14, 2005 2.55 Silberschatz, Galvin and Gagne ©2005 服务器虚拟机 服务器虚拟化:将服务器物理资源抽象成逻辑资源 ,让一台服务器变成几台甚至上百台相互隔离的虚 拟服务器 常用模式: 一虚多:一台服务器虚拟成多台服务器虚拟机 多虚一:多个独立物理服务器虚拟为一个服务器虚拟机 VM1 优点 安全性好 资源共享 可扩展性好 便于隔离 相价比高 Operating System Concepts – 7th Edition, Jan 14, 2005 VM2 VM3 VM4 VM5 2.56 Silberschatz, Galvin and Gagne ©2005 服务器虚拟机架构 57 Operating System Concepts – 7th Edition, Jan 14, 2005 2.57 Silberschatz, Galvin and Gagne ©2005 Vmware vSphere Operating System Concepts – 7th Edition, Jan 14, 2005 2.58 Silberschatz, Galvin and Gagne ©2005 使用例子 Operating System Concepts – 7th Edition, Jan 14, 2005 2.59 Silberschatz, Galvin and Gagne ©2005 虚拟机(续) 物理计算机的资源被共享,以创建虚拟机 CPU调度使得用户好像有自己的处理器 Spooling和文件系统提供了虚拟卡片阅读机和打印机 普通用户终端成为虚拟机操作员的控制台 Operating System Concepts – 7th Edition, Jan 14, 2005 2.60 Silberschatz, Galvin and Gagne ©2005 虚拟机(续) Non-virtual Machine Operating System Concepts – 7th Edition, Jan 14, 2005 Virtual Machine 2.61 Silberschatz, Galvin and Gagne ©2005 虚拟机的优缺点 虚拟机概念提供对系统资源的完全保护,因为每个虚拟 机同其他虚拟机隔离。当然,隔离不允许直接共享资源 虚拟机是研发操作系统的完美载体。系统开发在虚拟机 上而不是在物理硬件上完成,从而不会打扰正常系统运 行 由于需要对下面的机器进行精确的复制,所以虚拟机的 概念实现困难 Operating System Concepts – 7th Edition, Jan 14, 2005 2.62 Silberschatz, Galvin and Gagne ©2005 VMware 结构 Operating System Concepts – 7th Edition, Jan 14, 2005 2.63 Silberschatz, Galvin and Gagne ©2005 Java 虚拟机 Operating System Concepts – 7th Edition, Jan 14, 2005 2.64 Silberschatz, Galvin and Gagne ©2005 系统生成 操作系统被设计成能运行在一类计算机上;系统必须 为每个特定的计算机场所进行配置 SYSGEN 程序获得硬件系统特定配置的相关信息 引导(Booting) – 通过装载内核启动计算机 引导程序(Bootstrap program) –存在ROM中的代码,这 段能够定位内核,将它装入内存并运行 Operating System Concepts – 7th Edition, Jan 14, 2005 2.65 Silberschatz, Galvin and Gagne ©2005 系统启动 操作系统必须被硬件所用,使硬件可以启动它 一小块代码 – 引导转载程序,定位内核,将它装入内 存,并运行 有时采用两步完成:在固定位置加载引导程序的引导块 当电源初始化系统时,开始在一个固定的内存位置执行 固件用于保存初始引导代码 Operating System Concepts – 7th Edition, Jan 14, 2005 2.66 Silberschatz, Galvin and Gagne ©2005 End of Chapter 2 Operating System Concepts – 7th Edition, Jan 14, 2005 2.67 Silberschatz, Galvin and Gagne ©2005