2.1.2 系统内核和系统调用接口
系统内核(简称为内核),是操作系统的核心组成部分,负责进程管理、内存管理、文件管理和设备管理等,并通过系统调用接口向应用程序提供计算机系统的基本功能。
内核的架构主要有宏内核和微内核两种。宏内核将全部的内核模块作为一个单一的内核态任务运行于同一个地址空间,内核模块之间通过函数实现调用,这种方式实现简单、运行效率高;微内核则将内核拆分为多个独立的模块分别运行于独立的地址空间,模块之间通过消息传递机制来实现服务调用,内核的扩展性好、可靠性高。微内核被视作内核的发展方向,但事实上宏内核仍被广泛采用[1]。
[1] 关于宏内核与微内核的精彩大辩论:Minix的作者和支持者认为 Linux的宏内核构造是“向20世纪70年代的大倒退”,而Linux的支持者认为Minix本身没有实用性。
内核为应用程序提供系统服务的机制是系统调用。系统调用(System Call)是把应用程序的参数传给内核,请求相应的内核函数在内核里完成相应的处理,并将处理结果返回给应用程序的过程。系统调用本质上是一种过程调用,但它涉及不同权限的地址空间切换和物理设备资源使用等问题,一般通过中断机制来实现,过程非常复杂。系统调用接口明确了内核所提供的系统调用的名称、输入参数和返回值等详细信息。Windows操作系统中的CreateProcess、ReadFile等,UNIX类操作系统中的fork、read等,都是经常使用的系统调用接口。
Linux 采用宏内核架构,由于其开放源码、系统调用接口兼容POSIX规范[2],发布以来即得以快速传播,与GNU项目相结合催生了优秀的GNU/Linux操作系统。
[2] POSIX规范是IEEE基于UNIX操作系统定义的一组操作系统接口标准,旨在提高不同UNIX类操作系统的软件兼容性,详见第5章。
有关操作系统的基本原理,在第4章会详细讨论。有关Linux的源码结构、裁剪定制及编译和构建等问题,在第6章会详细讨论。