1、第3章 操作系统结构,操作系统与用户接口 系统调用 操作系统结构 操作系统特征,3.0用户与操作系统的接口,1. 命令接口 联机接口(交互式):使用系统提供的操作命令,交互地控制程序执行和管理计算机系统。如系统管理、环境设置、权限管理、文件管理等 脱机接口:以作业说明书的方式提交给系统(批的方式);执行过程中,用户无法干涉 2.程序接口(系统调用) 系统调用是操作系统提供给编程人员的唯一接口,编程人员利用系统调用,完成与机器硬件部分相关的工作。用户就可以在程序中调用操作系统所提供的一些子功能。,命令解释系统,命令解释系统(外壳,shell):是OS的重要组件之一,是用户和OS的接口 作用:读入
2、用户的输入或者文件中的命令,并运行它(们);通常转换为一个或者多个系统调用 位置: 有的是在内核中 有的如MS-DOS和Unix,则将它作为一个特殊程序(它易变,因此更灵活),当一个作业开始或者分时系统中用户登陆时,它运行,命令解释系统的工作流程,首先读入键盘缓冲区中的命令,判别其文件名、扩展名及驱动器名是否正确。 若发现有错,在给出出错信息后返回; 若无错,再识别该命令: 基于表格的方法: 从对应表项中获得该命令处理程序的入口地址,然后把控制权交给该处理程序去执行该命令。 表格其中的每一表目都是由命令名及其处理程序的入口地址两项所组成。,3.1 系统调用-功能,系统调用(SYSTEM CAL
3、L) : OS核心中都有一组实现系统功能的过程(子程序),系统调用就是对上述过程的调用。编程人员利用系统调用,向OS提出服务请求,由OS代为完成。 每个系统都有上百种系统调用,涉及进程、文件和设备控制等。 系统调用运行于核心态;而普通的函数调用由函数库或用户自己提供,运行于用户态。,例1: 文件管理:文件读写和文件控制(高级语言); Open 文件打开 Close 文件关闭 Read 读文件 Write 写文件 Creat 文件创建,3.1 系统调用-举例,例2. 利用系统调用实现硬盘文件内容读写,MOVE DX,OFFSETBUFF MOVE CX,BYTE MOVE BX,HANDLE M
4、OVE AH,3FH INT 21H,当编程人员给定了系统调用名和参数之后,由一个类似于硬件中断处理的中断处理机构完成陷入处理机构。它是在系统中为控制系统调用服务的机构。 当用户使用系统调用时,产生一条相应的指令(陷入指令,trap指令),CPU在执行到该指令时发生相应的中断,发出有关信号给该处理机构,并启动相应的处理程序来完成该系统调用所要求的功能。 陷入指令(或称访管指令):由于系统调用引起处理机中断的指令 在陷入中断发生时,从用户态系统态。这一转换在发生访管中断时由硬件自动实现。,3.1 系统调用实现过程,3.1 系统调用实现过程,系统调用语句本身是硬件提供的(机器指令),但其所调用的功
5、能是操作系统提供的。每种机器的机器指令集中都有一条系统调用指令。,系统调用与返回,设置系统调用号和参数。 调用号作为指令的一部分(如早期UNIX),或装入到特定寄存器里(如:DOS的 int 21H,AH=调用号。) 参数装入到特定寄存器里,或内存区域 执行trap(INT)指令:入口的一般性处理,查入口跳转表,跳转到相应功能的过程。 保护CPU现场(将PC与PSW入栈),改变CPU执行状态(处理机状态字PSW切换,地址空间表切换) 将参数取到核心空间 执行操作系统内部代码; 执行iret指令:将执行结果装入适当位置(类似于参数带入),恢复CPU现场(以栈顶内容置PSW和PC)。,3.1 系统
6、调用实现过程,系统调用表/调用号,Linux为每个系统调用都进行了编号(最大为NR_syscall),同时在内核中保存了一张系统调用表,该表中保存了系统调用编号和其对应的服务例程地址。第n个表项包含系统调用号为n的服务例程的地址。 系统调用时需要把系统调用号一起传入内核。在x86上,这个传递动作是通过在执行int $0x80前把调用号装入eax寄存器实现。 这样系统调用处理程序一旦运行,就可以从eax中得到数据,然后再去系统调用表中寻找相应服务例程了。,现在的系统提供了许多库函数,用户编程时也许就是用上层的库函数,而不是直接使用系统调用。 Win32 API:如微软提供了一个Win32 API
7、函数集合,它实质上就是一些库函数。在这些函数执行时,往往会再去调用系统的系统调用。该库函数提供了更易用的界面。因此,通过Win32 API程序员就能够得到操作系统的服务。 如write(,) 教材P49:文件复制,3.1 系统调用-库函数,陷入与中断的比较,相同点:它们都是由相同的硬件机构处理的事件,陷入是指CPU内部事件产生的中断,它包括程序运算引起的各种错误,如地址非法,效验错,页面失效,存取控制错,从用户态到核心态的切换等都是陷阱的例子 中断和陷入不同点: 陷入通常由处理机正在执行的现行指令引起,而中断则是由与现行指令无关 的中断源引起; 陷入处理程序提供的服务为当前进程所用,而中断处理
8、程序提供的服务则不是为了当前进程的 中断只能在指令之间被响应,而陷入可以在一条指令执行中被响应 陷入处理程序在各自的堆栈上进行,中断处理程序则在系统堆栈环境中进行,软中断是通信进程之间用来模拟硬中断的一种信号通信方式,处理机处理的时机决定于接受软中断信号的进程,如果占有处理机,与中断处理相同,否则相应的处理必须等到接收进程得到处理机才能响应。,3.2.1 整体或模块结构 3.2.2 分层结构 3.2.3微内核结构(客户服务器结构) 3.2.4 虚拟机,3.2、操作系统结构,整体或模块结构 整个系统按功能进行设计和模块划分。系统是一个单一的、庞大的的软件系统。由众多服务过程(模块)组成,可以随意
9、调用其他模块中的服务过程 评价 优点:具有一定灵活性,模块之间转接的灵活性使运行中的高效率;结构紧密,接口简单直接 缺点:功能划分和模块接口难保正确和合理;模块之间的依赖关系(功能调用关系)复杂(调用深度和方向),3.2、操作系统结构-(1)整体或模块结构,3.2.1 整体或模块结构,3.2.2 分层结构,按此模型构造的第一个操作系统是E.W.Dijkstra和他的学生在荷兰开发的THE系统(1968年),该系统分为六层: 层次 功能 5 操作员 4 用户程序 3 输入/输出管理 2 操作员-进程通信 1 内存和磁盘管理 0 处理器分配和多道程序,从资源管理观点出发,将OS划分为若干层次。在某
10、一层次上代码只能调用低层次上的代码,使模块间的调用变为有序性。有利于系统的维护性和可靠性。,3.2.2 分层结构,3.2.2 分层结构特点,分层原则 被调用功能在低层:如文件系统管理设备管理设备驱动程序 活跃功能在低层:提高运行效率 资源管理的公用模块放在最低层:如缓冲区队列、堆栈操作 最低层的硬件抽象层:与机器特点紧密相关的软件放在最低层。如Windows NT中的HAL单处理、多处理 资源分配策略放在最外层,便于修改或适应不同环境 优点: 功能明确,调用关系清晰(高层对低层单向依赖),有利于保证设计和实现的正确性 低层和高层可分别实现(便于扩充);高层错误不会影响到低层 缺点: 效率低。层
11、次之间的调用开销。,3.2.3微内核结构(客户服务器结构),趋势:从操作系统中去掉尽可能多的东西,而只留一个最小的核心 微内核(micro-kernel): 只给内核分配一些最基本的功能,运行在内核模式。 (如:内存、进程间通信、基本调度等)。 其它的OS服务都是由运行在用户模式下的进程完成,可作为独立的应用进程,称为服务进程。 微内核提供客户程序和运行在用户空间的各种服务之间的通信能力。 如Mach Unix。而Windows NT采用了混合结构。(分层结构微内核结构),3.2.3微内核结构,3.2.3微内核结构,优点: 良好的扩充性:只需添加支持新功能的服务进程即可。而且所有新服务被增加到
12、用户空间中,不需要修改内核。 可靠性好:所有服务器以用户进程的形式运行,而不是运行在核心态,所以它们不直接访问硬件。假如在文件服务器中发生错误,文件服务器可能崩溃,但不会导致整个系统的崩溃 便于网络服务,实现分布式处理:微内核可以以相同的方式与本地和远程的服务进程交互(远程过程调用 RPC, Remote Procedure Call) 缺点: 消息传递比直接调用效率要低一些 (但可以通过提高硬件性能来补偿 ),3.2.3 微内核结构,3.2.4 虚拟机,3.2.4 虚拟机,虚拟机:通过某种技术,使物理计算机作为共享资源从而创建虚拟机。 利用CPU调度、虚拟内存技术,OS能创建一种幻觉,从而使
13、进程认为有自己的处理器和自己的内存。 每台虚拟机都与裸机相同,所以每台虚拟机可以运行一台裸机所能够运行的任何类型的操作系统。不同的虚拟机可以运行不同的操作系统。,3.2.4 虚拟机,使用虚拟机的好处 通过完成保护系统资源,虚拟机提供了一个安全层,每个虚拟机完全与其它虚拟机隔开,从而使系统资源被完全保护 虚拟机允许进行系统开发而不必中断正常的系统操作:系统程序员有自己的虚拟机,系统开发可在虚拟机而不是真实的物理机器上进行。 虚拟机的应用:作为解决系统兼容性问题的一种方法,虚拟机的应用程序不断增加。 例如在Sun的处理器上运行微软开发的基于Intel CPU的系统:解决方法是在Sun的处理器上创建
14、虚拟Intel机,其Intel指令被转换为本机指令。 允许windows程序运行在基于Linux的机器上,该虚拟机可以运行Windows应用程序和Windows操作系统。,虚拟机结构(续1),虚拟机思想的应用:在奔腾CPU上运行老的MS-DOS程序 Intel在奔腾芯片上提供了一个虚拟8086模式,在此模式下,奔腾机就像一台8086计算机一样,包括1M字节内的16位寻址方式,虚拟机结构(续2),虚拟8086模式被Windows、OS/2及其他操作系统用于运行MS-DOS程序。程序在虚拟8086模式下启动,执行一般的指令时它们在裸机上运行。但是,当一个程序试图陷入系统来执行一条系统调用时,或者试
15、图执行受保护的I/O操作时,将发生一条虚拟机监控程序的陷入,虚拟机结构(续3),IBM390与Linux: Linux在S/390下有三种实现模式: 本地运行模式:即独立运行模式,Linux可以不依赖S/390自己的任何操作系统完整地运行 逻辑分区运行模式:Linux在S/390的硬件逻辑分区内运行,S/390最大支持15个独立的逻辑分区 VM/ESA模式:把Linux当成一个虚拟机来运行,VM提供虚拟的CPU、I/O子系统和内存资源用户既可以选择把OS/390与Linux共存,只是简单地共享硬件,也可以将两者设置成客户/服务器模式来应用,非常灵活,3.2.5 系统设计与实现,设计目标 硬件
16、系统类型:批处理、分时、分布式。 用户目标: 使用人员:使用方便、可靠、快速 设计与维护人员:容易设计、实现和维护。 系统目标 区分机制与策略(细读P65页) 机制:决定如何来做 策略:决定做什么 如定时器结构。策略可能会随地点或时间而概念,系统更需要通用机制。 系统实现 传统OS是用汇编语言写的,如MSDOS使用Intel8088 汇编语言写的 现在的OS都是用高级语言如C或者C来写的:使代码编写更快,容易理解和调试,OS更容易移植。但可能降低速度,提高存储要求。 对于关键子程序,可用汇编语言编写。,3.3 现代操作系统的特征,并发(concurrency) 共享(sharing) 虚拟(v
17、irtual) 异步性(asynchronism),并发(concurrency),在多道程序处理时,宏观上并发,微观上交替执行(在单处理器情况下)。 程序的静态实体是可执行文件,而动态实体是进程(或称作任务),并发指的是进程间的并发。,并发指:多个事件在同一时间段内发生。操作系统是一个并发系统,各进程间的并发,系统与应用间的并发。操作系统要完成这些并发过程的管理。 并行(parallel)是指在同一时刻发生。,共享(sharing),互斥共享(如音频设备):资源分配后到释放前,不能被其他进程所用。 同时访问(如可重入代码,磁盘文件) 资源分配难以达到最优化,多个进程共享有限的计算机系统资源。
18、操作系统要对系统资源进行合理分配和使用。资源在一个时间段内交替被多个进程所用。,虚拟(virtual),CPU每个用户(进程)的“虚处理机“ 存储器每个进程都占有的地址空间(指令数据堆栈) 显示设备多窗口或虚拟终端(virtual terminal),一个物理实体映射为若干个对应的逻辑实体分时或分空间。虚拟是操作系统管理系统资源的重要手段,可提高资源利用率。,异步性(asynchronism),进程的运行速度不可预知:分时系统中,多个进程并发执行,“时走时停“,不可预知每个进程的运行推进快慢 判据:无论快慢,应该结果相同通过进程互斥和同步手段来保证 难以重现系统在某个时刻的状态(包括重现运行中的错误),也称不确定性,指进程的执行顺序和执行时间的不确定性;,作业,思考题:3.1,3.2,3.3,3.4 作业: 3.5 3.7 3.11 3.12 3.13 3.15,