操作系统概念学习笔记 7
操作系统结构
系统设计
设计目标
系统设计的第一个问题是定义系统的目标与规格。在最高层,系统设计受到硬件选择和系统类型的影响。
需求可以分为两个基本类:用户目标和系统目标
策略和机制
操作系统设计的重要原理是策略(policy)和机制(mechanism)的区别。机制决定如何做,策略决定做什么。策略可能会随着时间或位置而有所改变,每次改变都可能需要底层机制的改变。系统更需要通用机制。这样策略的改变只需要重定义一些系统参数。
操作系统重要功能的改善可能是由于更好的数据结构和算法。
操作系统结构
简单结构
MS-DOS系统是用汇编编写的,只适用于intel 8088的cpu,未能提供双模式和硬件保护。在MS-DOS中,并没有很好的区分接口和功能层次,这种任意性使MS-DOS易受错误(恶意)程序的伤害。
原始的UNIX系统由内核和系统程序两个独立部分组成。内核进一步分为一系列接口和驱动程序。物理硬件之上和系统调用之下的所有部分作为内核,内核通过系统调用以提供文件系统,CPU调度,内存管理和其他操作系统功能,这种单一结构使得UNIX难以增强。
分层方法
采用适当硬件支持,操作系统可以分成比MS-DOS和UNIX所允许的更小和更合适的模块。这样操作系统能提供对计算机和使用计算机的应用程序更多的控制。实现人员更加自由地改变系统内部的工作和创建模块操作系统。
系统模块化有许多方法,一种是分层法,最底层(0层)为硬件,最顶层(N层)为用户接口。操作系统的层可以作为抽象对象来实现。一个典型的操作系统的层(M)由数据结构和一组可为上层所调用的子程序集合所组成。层M能调用底层的操作。
分层法的优点在于构造和调试的简单化,从而简化了系统的设计和实现。每层都能利用较低层所提供的功能来实现。
分层法的问题在于对层的详细定义,层的顺序问题,另一个问题是效率稍差。
微内核
随着UNIX操作系统的扩充,内核变得更大并且更加难以管理。20世界80年代中期,卡内基-梅隆大学开发了一个Mach的操作系统,该系统采用微内核技术模块化内核。这种方法将所有非基本部分从内核移走,并将它们实现为系统或用户程序。从而得到了更小的内核。
微内核的主要功能是使客户程序和运行在用户空间的各种服务之间进行通信。通信以消息传递形式提供。
微内核方法的好处之一是便于扩充操作系统,所有新服务可以在用户空间增加,因此并不需要更改内核。这样操作系统容易移植到其他硬件平台。由于绝大数服务是作为用户可不是内核进程来运行,因此微内核也就提供了更好的安全性和可靠性。
但是,微内核必须忍受由于系统功能总开销的增加而导致系统性能的下降。
模块
面向对象编程来生成模块式的内核。这里,内核只有一组核心部件,以及在启动或运行时对附加任务的动态链接。这种方法使用动态加载模块。在现代的UNIX,Linux ,Mac OS X ,Solaris中很常见。
这样的设计允许内核提供核心服务,也能动态的实现特定功能。例如:特定硬件的设备和总线驱动程序可加载给内核,而对各种文件系统的支持也可作为可加载的模块加入其中,所得的结果就好像一个分层系统,他的每个内核部分都有被定义和保护的接口。但它比分层系统更灵活,他的每一模块均可调用其他任何模块。
进一步讲,这种方法类似于微内核方法,这种方法更为高效,因为模块不用调用信息传递来通讯。
虚拟机
分层方法逻辑可延伸为虚拟机概念,虚拟机的基本思想是单个计算机的硬件抽象为几个不同的执行部件从而使得仿佛每个独立的执行环境都在自己的计算机运行一样。通过cpu调度和虚拟内存技术,操作系统能带来一种幻觉,即进程认为有自己的处理器和自己的(虚拟)内存。
非虚拟机:进程→内核-硬件
虚拟机:进程→内核→虚拟机实现→硬件
创建虚拟机的原因:最根本的是,在并行运行几个不同的执行环境(即不同的操作系统)能共享相同的硬件。
虚拟机方法的主要困难在于磁盘系统。解决方法是提供虚拟磁盘。
实现
虚拟机实现困难,提供与底层机器完全一样的副本需要大量工作。
底层机器有两种模式:用户模式和内核模式。
虚拟机软件可以运行在内核模式,因为它就是操作系统,虚拟机本身只能运行在用户模式,但他必须有虚拟用户模式和虚拟内核模式。这两种模式都运行在物理用户模式。
虚拟模式的转换可按下述方法实现。例如,当以一个虚拟用户模式而在虚拟机上运行的程序执行系统调用时,他会在真正机器上引起一个到虚拟机监控器的转换。当虚拟机监控器获得控制,他能改变虚拟机的寄存器内容和程序计数器以模拟系统调用的效果。接着他能重新启动虚拟机,注意他现在是在虚拟机内核模式下执行。
优点
虚拟机的理念具有很多优点,虚拟机相互独立,因此没有安全问题,但同时也没有直接资源共享。两种方法提供共享:一为共享小磁盘来共享文件,二是通过虚拟通信网络来传递消息。
实例
虚拟机成为一种解决系统兼容性的流行方法
- VMware
他是一个流行的商业应用程序,他将intel 80*86硬件抽象为独立的虚拟机,运行于windows 和linux之上。
程序员可以在主操作系统和几个个客户操作系统上测试应用程序。每个客户操作系统都作为一个独立的虚拟机运行。
虚拟层是VMware的核心,因为他将硬件抽象为独立的作为客户操作系统的虚拟机运行。每个虚拟机都有他自己的虚拟cpu、内存、磁盘驱动、网络接口等。
- java虚拟机
JVM是一个抽象计算机的规范。它包括类加载器和执行与平台无关的字节码的java解释器。 java对象用类来描述,对于每个java类,java编译器会生成与平台无关的字节码(bytecode)输出文件(.class),他可运行在任何JVM上。
JVM通过执行垃圾手机来自动管理内存,为了提高虚拟机中java程序的性能,许多研究集中在垃圾收集算法上。
JVM可以在主操作系统的上层软件中实现,或作为web浏览器的一部分。另一个选择是JVM可以在特别为JAVA程序设计的芯片硬件上实现。如果在软件上实现JVM,java解释程序一次只能执行一个字节代码。一种更快的软件技术是采用JIT(just-in-time)编译器。