操作系统提供的服务
用户界面(UI)有两种基本方法:提供命令行界面或命令中断,允许用户直接输入操作系统完成的命令,如命令行界面(command-line interface, CLI)、批界面;允许用户通过图形用户界面与操作系统交互多种形式,如图形用户界面(GUI)等。
Shell:有的操作系统在内核中包含的命令解释程序,用于获取并执行用户执行的下一条命令。
操作系统的系统调用system call提供了有效的服务界面。一般应用程序开发人员选择根据API设计程序,组成API的函数通常为应用程序员调用实际的系统调用。(如用于生成新进程的Win32函数CreateProcess()实际调用Windows内核中的NTCreateProcess()系统调用)好处在于:
1. 程序的可移植性,使得程序能够在支持同样API的系统上编译执行。
2. 实际的系统调用比API更为注重细节和困难。
系统调用接口:由绝大多数程序设计语言的支持系统提供,作为应用程序与系统调用的链接。
系统调用接口截取API的系统调用,维护一个系统调用列表索引,调用所需的操作系统内核中的系统调用,不能够返回系统调用状态和其它返回值。
系统调用大致分为五大类:进程控制、文件管理、设备管理、信息维护和通信。
有两种通信模型:
1. 消息传递模型(message-passing model):通信进程彼此交换消息——已知另一个通信实体的名称,打开连接,交换消息,终止通信。(对交换少量数据很有用,不比避免冲突,对于计算机间通信【分布式环境】更容易实现)。
2. 共享内存模型(shared-memory model):两个或多个进程统一取消“阻止另一进程访问内存”限制,通过读写公共区域来交换数据。(因为能在计算机内以内存速度进行,十分方便且允许最大速度通信,但在保护和同步方面存在一些问题)。
自底向上计算机逻辑层次:硬件->操作系统->系统程序->应用程序
系统程序分为几类:文件管理、状态信息、文件修改、程序语言支持。程序装入和执行、通信。
绝大多数用户所看到的操作系统是由应用和系统程序而不是系统调用所决定的。
使用高级语言实现操作系统的优点:编写更快、更为紧凑、容易理解和调试,编译技术的改进使得只要通过重新编译就可改善整个操作系统的生成代码,操作系统更容易移植到不同的平台上。
缺点:仅仅在于降低速度和增加存储要求,如今不再是主要问题。
分层法:系统模块化的方法之一,将操作系统分为若干层,最底层(层0)为硬件,最高层(层N)为用户接口。层可作为抽象对象,由数据结构和一组可为上层所调用的子程序集合所组成,能调用底层的操作。
优点:构造和调试简单化。
缺点:因为当前层只能使用其下较低层,主要困难在于对层的详细定义;效率较差,每层参数修改和传递为系统调用增加了额外开销。
微内核:将所有非基本部分从内核中移到系统程序或用户程序得到更小的内核,微内核同行包括最小的进程和内存管理以及通信功能。
微内核的主要功能是使客户程序和运行在用户空间的各种服务之间进行通信,通信以消息传递形式提供。
微内核的优点:便于于扩充操作系统,所有新服务可以在用户空间增加而并不需要修改内核;当内核确实需要改变时,改变也会很小;容易从一种硬件平台设计移植到另一种硬件平台设计;因为绝大多数服务是作为用户而不是内核进程运行的,因此也提供了更好的安全性和可靠性。
微内核的缺点:必须忍受由于系统功能总开销增加而导致系统性能的下降。
现代UNIX如Solaris、Linux和Mac OS X常用方法:用面向对象编程技术生成模块化内核,由可加载的内核模块围绕核心内核,在启动或运行时动态加载模块。这种设计允许内核提供核心服务,也能动态实现特定功能。
比分层系统更为灵活,任一模块都能调用任何其它模块。
类似于微内核方法,核心模块只有核心功能以及其他模块加载和通信的相关信息,但因为模块不需要调用消息传递来通信,更为高效。
虚拟机:利用CPU调度和虚拟内存技术,操作系统造成一种进程有自己的处理器和虚拟内存的“幻觉”。虚拟机除提供与基本硬件相同的接口外不提供额外功能,每隔进程都有一个与基本计算机一样的虚拟副本。
创建虚拟机的原因:在并行运行几个不同的操作系统时能够共享相同的硬件。
虚拟机的主要困难:虚拟机数量多于磁盘驱动器时难以为每个虚拟机分配一个磁盘驱动器。
解决方法:通过在物理磁盘上为虚拟磁盘分配所需的磁道数提供虚拟磁盘(IBM的VM操作系统:小型磁盘),所有虚拟磁盘的大小总和必须比可用的物理磁盘小。
虚拟机没有直接资源共享,提供共享的两种实现方法:
1. 通过软件共享小型磁盘来模拟共享物理磁盘;
2. 通过软件定义虚拟机网络模拟物理网络,,通过虚拟通信网络传递消息。
实现:与物理机器一样,必须有虚拟用户模式和虚拟内核模式,都运行在物理用户模式。在物理机器上引起用户模式到内核模式转换的动作也必须在虚拟机上因此从虚拟用户模式到虚拟内核模式的转换。
优点:
1. 虚拟机之间完全独立,不同系统资源具有完全保护,没有安全问题。
2. 用于研究和开发操作系统的好工具,可在虚拟机上进行系统开发而无须中断正常的系统操作。
虚拟机实例:
1. VMware
虚拟层是VMware的核心。VMware运行在主操作系统之上,将物理硬件抽象为独立的虚拟机,每个虚拟机都有自己的虚拟CPU、内存、磁盘驱动、网络接口等,允许主操作系统将几个不同的客户操作系统作为独立虚拟机并行运行。
2. Java虚拟机(JVM)
JVM是一个抽象计算机规范,包括类加载器和Java解释器。对于每个Java类,Java编译器会生成与平台无关的字节码(bytecode)输出文件.class,可运行在任何JVM上。
类加载器从Java程序和Java API中加载编译过的.class文件;
加载类后,验证器检查.class文件是否为有效的Java字节码,有无堆栈溢出和下溢,确保字节码不进行指针操作(因为可能会提供非法内存访问);
如果类通过验证,Java解释器进行执行;
JVM通过垃圾收集(garbage collection,回收不再使用的内存并返回给系统)来自动管理内存,垃圾收集算法的研究能提高虚拟机中Java程序性能。
JVM可在1. 主操作系统的上层软件(解释器一次只能执行一个字节码)2. Web浏览器3. 为Java特别设计的芯片硬件上实现。
JIT(just-in-time)编译器:第一次调用Java方法时字节码被转换成本地及其语言,随后的调用采用本地机器指令和字节码操作完成,不需要全部重新解释。(速度更快)
.NET框架:允许基于.NET框架编程,不需要担心平台和底层操作系统特性,提供了一个介于底层体系结构和被运行程序之间的虚拟机CLR(公共语言运行时间)。
将C#或VB.NET源代码编译为平台无关的中间语言MS-IL;
编译好的.dll或.exe文件assembly包含MS-IL指令和元数据;
运行程序时CLR将assembly加载进应用程序域(Application Domain);
程序要求执行指令时,CLR将MS-IL指令编译为特定底层体系结构的本地代码;
指令编译为本地代码后保存下来以便CPU执行。
系统生成(system generation,SYSGEN):对某个特定的计算机场所配置和生成系统的过程。
引导程序(或引导装载程序):绝大多数计算机系统都有的一小块代码,用于定位内核,装入内存以启动计算机,该程序为ROM形式。
引导系统的过程:CPU接收到重置事件时,具有预先定义内存位置(引导程序所在位置)的指令寄存器被重新装载,并开始执行。