操作系统为用户提供方便的、有效的、友善的服务界面。现代操作系统至少回提供两种类型的接口供用户使用,分别是:用户接口和系统调用接口。
1)命令接口通常呈现给用户两种形态:命令行界面、图形用户界面。
2)为了使应用程序具有更好的兼容性,内核提供了一系列具备预定功能的多内核函数,并通过 一组称为系统调用的接口呈现给用户。
1.2.1 处理器有两种模式,分别是:用户模式和内核模式。
在内核模式下用户可以访问所有的内存和硬件资源。在用户模式下访问受到限制,例如用户访问了禁区,则用户进程将被杀死。用户模式必须通过系统调用或库函数切换至内核模式后,才允许访问硬件资源。
1)API的意义:
应用程序接口API(Application Programming Interface) ,是程序员在用户空间下可以直接使用的函数接口。是一些预定义的函数,比如常用的read()、malloc()、free()、abs()函数等,这些函数都具有一定功能,说明了如何获得一个给定的服务,跟内核没有必然的联系。提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
2)系统调用与API的关系
应用程序员更喜欢根据API来编程,而不是采用实际系统调用:
1‘ API具有可移植性,可以在多个系统上编译并执行
2‘ 系统调用比API更为注重细节并且更加难用。
API的函数和内核中的相关系统调用之间常常存在紧密练习。
1)整体式结构
也叫简单结构或无结构,在早期设计开发操作系统时,设计者只是把注意力放在功能的实现和获得高的效率上。整个操作系统的功能由一个一个的过程来实现,这些过程之间又可以相互调用,导致操作系统变为一堆过程的集合,其内部结构复杂又混乱。因此这种操作系统没有结构可言。
优点:接口简单直接,系统效率高。
缺点:没有可读性,也不具备可维护性,一旦某一个过程出了问题,凡是与之存在调用关系的过程都要修改,所以给调试和维护人员带来许多麻烦,有时为了修改系统中的错误还不如重新设计开发一个操作系统。因此,这种早期的整体式结构已经淘汰不用了。
2)层次式结构
把操作系统所有的功能模块按照功能调用次序分别排成若干层,各层之间的模块只有单向调用关系(eg. 只允许上层或外层模块调用下层或内层模块)
优点:1‘ 把功能实现的无序性改成有序性,可显著提高设计的准确性;2’ 把模块间的复杂依赖关系改为单向依赖关系,即高层软件依赖于低层软件,再次降低了耦合度。
3)微内核结构
1‘ 将内核中最基本的功能保留在内核,而将那些不需要在内核态执行的功能移到用户态执行,从而降低了内核的设计复杂度;
2‘ 被移出去的代码根据分层的原则被划分为若干服务,执行互相独立,都借助微内核进行通信;
优点:模块化、松耦合,因为消息传递需要经过微内核,耦合度很低,增加了安全性。
缺点:时间开销很大。
4)模块化结构
将整个操作系统按功能划分为若干个模块,每个模块实现一个特定的功能。模块之间的通信只能通过预先定义的接口进行。
优点:具有一定的可维护性,模块之间是通过函数调用来实现的,效率高,降低了耦合度。
缺点:耦合度依旧比较高,且依旧是无序的。
主要有两种比较流行的虚拟机:VMware Workstation 和 java 虚拟机。