2.1操作系统服务
用户界面:命令行界面(command-line interface,CLI)、批界面、图形用户界面
2.2操作系统的用户界面
有的操作系统在其内核部分包括命令解释程序。其他操作系统,如windows、linux等将命令解释程序作为一个特殊 程序,当任务开始或用户首次登录(分时系统)时,改程序就会运行。在具有多个命令解释程序选择的系统中,解释程序被称为外壳(shell),如linux中的Bourne Shell、C Shell等。
命令解释程序的主要作用是获取并执行用户指定的下一条命令。这一层提供的命令都是操作文件的如创建、删除、复制,linux和MS-DOS的shell就是这样工作的。执行这些命令有两种方法;一种是命令解释程序本身包含代码以执行这些命令。另一种是由系统程序实现绝大多数命令,这样,命令解释程序不必理解什么命令,他只要用命令来识别文件以装入内存并执行,如UINX删除文件的命令rm file.txt
会搜索名为rm的文件,装入内存,并用参数file.txt来执行。与rm命令相关的功能完全由文件rm的代码决定。
2.3系统调用
system call,通常用c或c++编写,对底层任务可能以汇编语言指令的形式提供。
程序开发人员根据应用程序接口设计程序,有三种常用的API:win32 API,适用于POSIX系统的POSIX API(包括UNIX、MAC OS)以及设计运行于java虚拟机程序的java API
向操作系统传递参数有三种方法。最简单的是通过寄存器来传递参数,不过有时参数数量会比寄存器多。这时,这些参数通常存在内存的块和表中,并将块的地址通过寄存器来传递。linux采用这样的方法。参数还可压入堆栈中,并通过操作系统弹出。
2.4系统调用类型
系统调用大致可分五类:进程控制、文件管理、、设备管理、信息维护、通信。
进程控制
如果一个系统调用被用来非正常的中断执行程序,或者程序运行碰到问题引起错误陷阱,那么可能会有内存信息转储并产生一个错误信息。内存信息转储通常写到磁盘上,并被调试器(帮助程序员发现和检查错误的系统程序)检查和确定问题原因。操作系统必须将控制权转交给命令解释器。命令解释器紧接着读取下一个命令。
交互系统:命令解释器简单的读取下一个命令,因为假定用户会采取合适的命令处理错误
GUI 系统:一个弹出窗口提醒错误并提个建议
批处理系统:命令解释器终止整个作业并继续下一个作业。
出现错误时,有的系统允许控制卡指出一个具体的恢复动作。控制卡是一个批处理概念,他是一个管理进程执行的命令。可定义一个错误级别。更加严重的错误可用更高级的错误参数来表示。命令解释器和下一个程序能利用错误级别自动决定下一个动作。
执行一个程序或作业可能需要装入另一个程序。这一点允许命令解释器来执行一个程序,该命令可通过用户命令,鼠标单机和批处理命令来表示。当装入程序终止时:如果新程序终止时控制权返回到现有程序,那么必须保存现有程序的内存映像。因此,实际上建立一个机制以便一个程序调用另一个程序。如果两个程序并发继续,那么创建了一个新作业和进程以便多道执行。
如果创建新作业和进程,那么应该能够控制他的执行。这种控制要求能决定和重置进程或作业的属性,包括优先级、最大允许执行时间等。必要时也要能终止它。
另一组系统调用有助于调试程序,许多系统提供转储内存信息的系统调用,这有助于调试程序trace在执行时能列出所用的每条执行的指令,但是只有少数积累由系统提供。
许多操作系统提供时间表来表示一个程序在某个位置执行的时间。时间表要求具有跟踪功能或定时 时间中断。每次定时中断,会记录计数器的值。
文件管理
创建删除文件
系统程序被其他程序调用,可视为API
设备管理
程序需要一些资源才能继续运行,如内存、磁盘驱动
信息维护
许多系统调用用来在用户程序和操作系统间传递信息,调用返回的信息可能是系统版本、空闲内存、进程信息等
通信。
有两种模型:消息传递模型和共享内存模型。对于message-passing model,通信进程彼此交换消息来交换信息。shared-memory model系统调用来获得其他进程所拥有的内存区域的访问权。
2.5系统程序
系统程序提供了一个方便的环境,以开发程序和执行程序。它们可分为:文件管理、状态信息、文件修改、程序语言支持、程序装入和执行、通信。
2.6操作系统的设计和实现
操作系统设计的重要原理是策略(policy)和机制(mechanism)的区别。机制决定如何做,策略决定做什么。策略可能会随着时间或位置而有所改变,每次改变都可能需要底层机制的改变。系统更需要通用机制。
设计完后,就必须实现它。现在可用高级语言来编写。操作系统重要功能的改善可能是由于更好的数据结构和算法。
2.7操作系统结构
1.简单结构
MS-DOS系统是用汇编编写的,只适用于intel 8088的cpu,未能提供双模式和硬件保护。
2.分层方法
采用适当硬件支持,操作系统可以分成比MS_DOS所允许的更小和更合适的模块。
系统模块化有许多方法,一种是分层法,最底层(0层)为硬件,最顶层(N层)为用户接口。操作系统的层可以作为抽象对象来实现。一个典型的操作系统的层(M)由数据结构和一组可为上层所调用的子程序集合所组成。层M能调用底层的操作。
系统分层简化了系统的设计和实现。每层都能利用较低层所提供的功能来实现。
3.微内核
20世界80年代中期,卡内基-梅隆大学开发了一个Mach的操作系统,该系统采用微内核技术模块化内核。这种方法将所有非基本部分从内核移走,并将它们实现为系统或用户程序。从而得到了更小的内核。
微内核的主要功能是使客户程序和运行在用户空间的各种服务之间进行通信。好处之一是便于扩充操作系统,所有新服务可以在用户空间增加,因此并不需要更改内核。这样操作系统容易移植到其他硬件平台。由于绝大数服务是作为用户可不是内核进程来运行,因此微内核也就提供了更好的安全性和可靠性。
4.模块
面向对象编程来生成模块式的内核。这里,内核只有一组核心部件,以及在启动或运行时对附加任务的动态链接。这种方法使用动态加载模块。如Solaris操作系统被组织为7个可加载的内核模块围绕一个核心内核构成:
这样的设计允许内核提供核心服务,也能动态的实现特定功能。例如:特定硬件的设备和总线驱动程序可加载给内核,而对各种文件系统的支持也可作为可加载的模块加入其中,所得的结果就好像一个分层系统,他的每个内核部分都有被定义和保护的接口。但它比分层系统更灵活,他的每一模块均可调用其他任何模块。
2.8虚拟机
分层方法逻辑可延伸为虚拟机概念,虚拟机的基本思想是单个计算机的硬件抽象为几个不同的执行部件从而造成仿佛每个独立的执行环境都在自己的计算机运行一样。通过cpu调度和虚拟内存技术,操作系统能带来一种幻觉,即进程认为有自己的处理器和内存。
非虚拟机:进程→内核-硬件 虚拟机:不同的进程→内核→虚拟机实现-硬件
创建虚拟机的原因:最根本的是,在并行运行几个不同的执行环境(即不同的操作系统)能共享相同的硬件。
1实现
底层机器有两种模式:用户模式和内核模式。虚拟机本身就是操作系统,所以它运行在内核模式,虚拟机本身只能运行在用户模式,但他必须有虚拟用户模式和虚拟内核模式。虚拟模式的转换可按下述方法实现。例如,当以一个虚拟用户模式而在虚拟机上运行的程序执行系统调用时,他会在真正机器上引起一个到虚拟机监控器的转换。当虚拟机监控器获得控制,他能改变虚拟机的寄存器内容和程序计数器以模拟系统调用的效果。接着他能重新启动虚拟机,注意他现在是在虚拟机内核模式下执行。虚拟机的理念具有很多优点,虚拟机相互独立,因此木有安全问题,但同时也没有直接资源共享。两种方法提供共享:一为共享小磁盘来共享文件,二是通过虚拟通信网络来传递消息。
2实例
虚拟机成为一种解决系统兼容性的流行方法
一、VMware
他是一个流行的商业应用程序,他将intel 80*86硬件抽象为独立的虚拟机,运行于windows 和linux之上。
程序员可以在主操作系统和几个个客户操作系统上测试应用程序。每个客户操作系统都作为一个独立的虚拟机运行。
虚拟层是VMware的核心,因为他将硬件抽象为独立的作为客户操作系统的虚拟机运行。每个虚拟机都有他自己的虚拟cpu、内存、磁盘驱动、网络接口等。
二、java虚拟机
JVM是一个抽象计算机的规范。它包括类加载器和执行与平台无关的字节码的java解释器。 java对象用类来描述,对于每个java类,java编译器会生成与平台无关的字节码(bytecode)输出文件(.class),他可运行在任何JVM上。
JVM可以在主操作系统的上层软件中实现,或作为web浏览器的一部分。另一个选择是JVM可以在特别为java程序设计的芯片硬件上实现。如果在软件上实现JVM,java解释程序一次只能执行一个字节代码。一种更快的软件技术是采用JIT(just-in-time)编译器。
2.9系统生成
操作系统通常设计成能运行在一类计算机上,这些计算机具有不同的外设配置。对一特定的计算机场所,必须要配置和生成系统,这一过程称为系统生成(system generation,SYSGEN)
2.10系统启动
引导程序定位内核,并将其装入内存。有的系统,采用两步完成:一个简单的引导程序从磁盘上调入一个复杂的引导程序,而后者再装入内核。
cpu接受到一个重置事件时,具有预先定义内存位置的占领寄存器被重新装载,并在此开始执行。该位置就是初始引导程序的所在,该程序为只读存储器形式。
引导程序可完成一系列任务,先运行诊断程序来确定机器的状态,检查通过后程序可按步骤继续运行,系统的所有部分都可被初始化。最后,草地系统启动完成。
有些系统(PDA,手机等)在ROM中保存完整的操作系统,改变引导程序的代码需要改变ROM芯片。对于大型操作系统,引导程序存储于固件中,而操作系统保存在磁盘中。
2.11小结
操作系统提供若干服务。在最底层,系统调用允许运行程序直接向操作系统发出请求。在高层,命令解释程序或shell提供了一个机制以便用户不必编写程序就能发出请求。命令来自文件(批处理模式),或键盘输入(交互模式或分时模式)。
虚拟机概念采用分层方法并将内核、硬件 都作为硬件来考虑,其他操作系统可建立在这一虚拟机之上。
实现任何JVM的任何操作系统能运行所有java程序,因为JVM为java程序抽象化了底层系统,以提供与平台无关的接口。