引言
在计算机中不管是CPU,内存,或者是一些外围设备,它们之所以能有条不紊的协同工作,是因为有一层软件不遗余力的管理着它们。这层软件就是操作系统。
操作系统在整个计算机系统中的位置
从这张图中可以看出用户界面是操作系统的外在表象,内核才是操作系统的内在核心,它真正完成用户程序所要求的操作。那么就可以说一方面操作系统是上层软件与硬件打交道的窗口和桥梁,另一方面操作系统是其他所有用户程序运行的基础。
我们从下面一个简单的c语言程序(hello.c)的执行过程,看一下操作系统到底起什么样的作用。
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
gcc hello.c -o hello 之后形成了一个可执行的二进制文件,我们再执行 ./hello。
执行过程:
(1)用户告诉操作系统执行hello。
(2)操作系统通过文件名在磁盘找到该程序。
(3)检查可执行代码首部.找出代码和数据存放的地址。
(4) 文件系统找到第一一个磁盘块。
(5)操作系统建立程序的执行环境。
(6)操作系统把程序从磁盘装人内存,并跳到程序开始处执行。
(7)操作系统检查字符串的位置是否正确。
(8)操作系统找到字符串被送往的设备。
(9)操作系统将字符串送往输出设备窗口系统确定这是一一个合法的操作,然后将字符串转换成像素。
(10) 窗口系统将像素写人存储映像区。
(11) 视频硬件将像素表示转换成一-组模拟信号控制显示器(重画屏幕)。
(12)显示器发射电子束。最后在屏幕上看到Hello world!。
从这个简单的例子可以看出,任何一个程序的运行只有借助于操作系统才能得以顺利完成,因此,从本质上说,操作系统是应用程序的运行环境。
操作系统组成
操作系统本质上也是大型软件包,因此结构组织也不会与其他大型软件迥然而异。操作系统的设计采取分层结构,越向上层抽象程度越高,越接近用户;相反,越往下层,越靠近硬件,抽象也越接近硬件。另外,上层软件依靠下层软件提供的服务,而且上层软件本身还提供附加服务,因此操作系统的结构总体呈现倒金字塔形。
不同的操作系统,其组成结构不尽相同,这里说的是Linux操作系统。
操作系统 = 内核 + 系统程序
系统程序 = 编译环境 + API(应用程序接口)+ AUI(用户接口)
编译环境 = 编译程序 + 连接程序 + 装载程序
API = 系统调用 + 语言库函数
AUI = shell + 系统服务例程 + 应用程序
Linux内核
Linux内核指的是在Linus领导下的开发小组开发出的系统内核,它是所有Linux发行版的核心。
Linux内核的技术特点
(1)Linux内核被设计成单内核结构,这是相对微内核而言。
(2)2.6版本前Linux内核是单线程结构,2.6版本后加入了抢占技术,使其变为可以进行内核抢占的操作系统。
(3)Linux内核支持动态加载模块。
(4)Linux内核是被动的提供服务。
(5)Linux内核使用了虚拟内存技术。
(6)Linux的文件系统实现了一种抽象文件系统—虚拟文件系统(VFS)。
(7)Linux提供了一套很有效的延迟执行机制—下半部分,软中断,工作队列等。
Linux内核的位置
从上图可以看出,整个系统由4个部分组成。
(1)用户进程——用户应用程序是运行在Linux内核上的一个庞大的软件集合,当一个用户进程在操作系统上运行时,它就成为了操作系统中的一个进程。
(2)系统调用接口——在应用程序中,可通过系统调用来调用操作系统内核中特定的过程,以实现特定的服务。
(3)Linux内核——内核是操作系统的灵魂,它负责管理内存,磁盘上的文件,负责启动并运行程序,负责从网络上接受和发送数据包。
(4)硬件——包括了安装Linux时需要的所有可能的物理设备。
Linux内核体系结构
Linux内核除系统调用外,由5个主要的子系统组成。
(1)进程调度(Process Scheduler, SCHED)——控制着进程对CPU的访问。当需要选择一个进程运行时,由调度程序选择最值得运行的进程。
(2)内存管理( Memory Manager, MM)——允许多个进程安全地共享内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码、数据和堆栈的总量可以超过实际内存的大小,操作系统只将当前使用的程序块保留在内存中,其余的程序块则保留在磁盘上。必要时,操作系统负责在磁盘和内存之间交换程序块。
因为虚拟内存管理需要硬件支持,所以内存管理从逻辑上可以分为硬件无关的部分和硬件相关的部分。
(3)虚拟文件系统(VFS)——隐藏各种不同硬件的具体细节,为所有设备提供统一的接口。虚拟文件系统支持多达数十种不同的文件系统,这也是Linux较有特色的一部分。
虔拟文件系统可分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,Ext2/Ext3, NTFS等;设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。
(4)网络接口(Network Interface,NI)——提供 了对各种网络标准协议的存取和各种网络硬件的支持。网络子系统可分为网络协议和网络驱动程序两部分。网络协议部分负责实现每一种可能的网络传输协议;网络设备驱动程序负责与硬件设备进行通信,每一种可能的硬件设备都有相应的设备驱动程序。
(5)进程间通信(Inter Proces Comiation,IPC)——支持进程间各种通信机制,包括共享内存.消息队列及管道等。
从上图可以看出,处于中心位置的是进程调度,所有其他子系统都依赖于它,因为每个子系统都需要挂起或恢复进程,一般情况下,当一个进程等待硬件操作完成时,它被挂进;当操作真正完成后,进程恢复执行。