1. 什么是操作系统?
- 操作系统主要有两个职责:对硬件进行管理和抽象,为应用提供服务并管理。
- 从硬件的角度看,操作系统主要包含两类功能:一是管理应用,二是对硬件进行抽象。操作系统将复杂的、具备不同功能的硬件资源纳入统一的管理。同时,操作系统还将硬件抽象成不依赖具体硬件特性的资源。将有限的、离散的资源高效的抽象为连续的、无限的资源,并通过接口提供给上层应用。程序员面向一个统一的、近似无限的虚拟地址空间。
- 从应用的角度看,操作系统主要负责两类功能:一是服务于应用,向应用提供系统调用接口,二是管理应用,主要是对应用的生命周期进行管理,包括应用的加载、启动、切换、调度、销毁等。
- 通常而言,狭义的操作系统指的是操作系统内核再加上一个shell,广义的操作系统可以进一步被划分为操作系统内核和操作系统框架。操作系统内核主要对硬件资源进行管理和抽象,为操作系统框架提供基础的系统服务;操作系统框架则基于基于操作系统内核提供的服务为不同的应用领域提供编程接口和运行环境。图1展示了操作系统的简要结构。
图1 操作系统的简要结构
2.操作系统的必要性思考
a.如果一台机器有且仅有一个应用程序,开机以后自动运行且不会退出,是否还需要操作系统?
答:如果没有操作系统,就需要应用直接和硬件交互,实现对硬件资源的管理和抽象的功能。然而实现对硬件资源的管理和抽象正好是操作系统的功能的一部分。并且如果没有操作系统,倘若应用出现故障,可能直接引起硬件的崩溃,没有调试和诊断的机会。事实上,当前的一些对性能和时延要求较高的场景就是通过自定义一套与硬件直接交互的库来实现的;
b. 如果一个硬件希望直接控制硬件,而不是使用操作系统提供的抽象,是否还需要操作系统?
答:尽管应用希望直接控制硬件,但是应用的加载、启动、切换、调度、销毁都需要操作系统,例如多个应用之间的切换与隔离。通过操作系统可以更高效的利用硬件资源。
3. 操作系统接口
从应用的角度看,操作系统提供了不同层次的接口,主要包括系统调用接口,POSIX接口,领域应用接口。如图2所示:
图2 不同层次的操作系统接口
系统调用接口:应用程序通过操作系统内核提供的接口向内核申请服务,系统调用是用户态应用向操作系统内核请求服务的方法。POSIX接口:由于每个操作系统提供的系统调用各不相同,为了同一个应用程序在不同操作系统上的移植性,逐渐形成了一些可移植操作系统接口标准,例如POSIX。POSIX是Portable Operating System Interface for Unix的简称。
领域应用接口:为了开发的便捷性,在POSIX或操作系统调用的基础上还可以封装面向不同领域的应用接口。例如一些车企联合定义了AUTOSAR、针对移动应用,Android系统框架为移动应用开发人员在Android操作系统上开发APP定义了应用开发接口,IOS同样也为苹果手机平台定义了开发接口。
附:
- API与ABI的区别?
答:API指的是应用编程接口,它定义了两层软件,例如libc和Linux内核之间源码层面的交互接口。ABI指的是应用二进制接口,即在某个特定体系结构下两层软件之间的二进制层面的交互接口,包括如何定义二进制文件格式、应用之间的调用约定、数据模式等。 - 什么是微内核?
答:微内核是一种设计原则,其本身并没有约定那些功能组件应该运行在内核态。通俗的说:微内核指的是仅将必要的功能保留在内核态,其余功能放在用户态,这样可以保证内核的代码量小,结构更加的清晰明了。微内核的初衷是降低内核的大小,只保留了基本的服务,和宏内核的直接调用相反,微内核的通信是通过消息传递来实现的。可以将宏内核看成一个运行在一个大的地址空间的二进制文件,操作系统的进程管理、内存管理、中断管理、IO通信、文件系统和网络等等,都运行在内核空间,所有的服务在系统使用时就加载到内存,调用时是直接调用。