Linux内核学习笔记(一)——Linux内核简介
Unix系统业已演化成一个具有相似应用程序编程接口(API),并且基于相似设计理念的操作系统家族。
1、Unix的历史
Unix是从贝尔实验室的一个失败的多用户操作系统Multics中涅槃而生的。
时间 | 事件 |
---|---|
1969 | 贝尔实验室的程序员实际了一个文件系统原型,最终演化成Unix。Ken Thompson在PDP-7型机上实现了这个操作系统。 |
1971 | Unix被移植到PDP-11型机中。 |
1973 | Unix操作系统用C语言进行了重写,为unix系统的广泛移植铺平了道路。第一个在贝尔实验室外广泛使用的Unix版本是V6。 |
1977 | 贝尔实验室综合各种变体推出了Unix System Ⅲ。 |
1977 | 加州大学伯克利分校推出Unix演化版1BSD(Berkeley Software Distribution)。 |
1977 | 伯克利继续推出了2BSD系统。其中包含仍在使用的csh、vi等应用软件。 |
1979 | 伯克利独立开发了3BSD系统,支持虚拟内存。之后相继推出4BSD系列,实现了任务管理、换页机制、TCP/IP等新特性 |
1983 | AT&T推出了System V。 |
1994 | 伯克利大学重写了虚拟内存子系统(VM),推出最终官方版4.4BSD。BSD的开发由Darwin、FreeBSD、NetBSD和OpenBSD继续。 |
80 / 90年代 | Digital的Tru64、HP的HP-UX、IBM的AIX、Sequent的DYNIX/ptx、SGI的IRIX和Sun的Solaris和SunOS。 |
Unix的特点:
(1)Unix很简洁,仅仅提供几百个系统调用;
(2)所有的东西都被当做文件对待(Sockets除外);
(3)Unix的内核和相关的系统工具软件是用C语言编写而成,移植性强;
(4)进程创建非常迅速,提供简单稳定的进程间通信机制。
Unix已经发展成为一个抢占式多任务、多线程、虚拟内存、换页、动态链接和TCP/IP网络的现代化操作系统。
2、Linux简介
1991年,Linus Torvalds为Intel80386微处理器的计算机开发了一款全新的操作系统,Linux由此诞生。
Linux是类Unix系统,但它不是Unix。
Linux内核是自由(公开)软件,使用GUN的General Public License(GPL)作为限制条款。
3、操作系统和内核简介
操作系统是指在整个系统中负责完成最基本功能和系统管理的部分。应该包括内核、设备驱动程序、启动引导程序、命令行Shell或者其他种类的用户界面、基本的文件管理工具和系统工具。
内核通常由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网络、进程间通信等系统服务程序共同组成。被称作管理者或操作系统核心。
内核独立于普通应用程序,一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。系统态和被保护起来的内存空间,被称为内核空间。
应用程序在用户空间执行,只能看到允许它们使用的部分系统资源,并且只使用某些特定的系统功能,不能直接访问硬件,也不能访问内核划给别人的内存范围,还有其他使用限制。
当内核运行的时候,系统以内核态进入内核空间执行。执行一个普通用户程序时,系统以用户态进入以用户空间执行。
应用程序通过系统调用来与内核通信。当一个应用程序执行一条系统调用,我们说内核正在代其执行。应用程序通过系统调用在内核空间运行,而内核运行于进程上下文中。应用程序通过系统调用陷入内核是应用程序完成其工作的基本行为方式。
硬件和系统通信,首先要发出一个异步的中断信号打断处理器的执行,继而打断内核的执行。中断通常对应一个中断号,内核通过中断号查找相应的中断服务程序,调用这个程序响应和处理中断。中断服务程序在中断上下文中执行。
内核的活动必然为下列三者之一:
- 运行于用户空间,执行用户程序。
- 运行于内核空间,处于进程上下文,代表某个特定的进程执行。
-
运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断。
4、Linux内核和传统Unix内核比较
Unix内核需要硬件系统提供页机制(MMU)管理内存,一些特殊版本的Linux并不依赖。不过现实中简单的嵌入式系统都具备内存管理单元功能。
定义 | 优势 | 劣势 | |
---|---|---|---|
单内核 | 从整体上作为一个单独的大过程来实现,运行在一个单独的地址空间上 | 简单、性能高:所有内核服务都运行在内核态,并身处统一地址空间,可以直接调用函数 | 一个功能的崩溃会导致整个内核无法使用 |
微内核 | 内核的功能被划分成多个独立的过程(服务器)。所有的服务器都保持独立并运行在自己的地址空间上 | 服务器的各自独立有效地避免了一个服务器的失效祸及另一个,允许一个服务器为了另一个服务器换出 | 系统采用了进程间通信(IPC)机制,涉及内核空间与用户空间的上下文切换,需要一定周期 |
Linux是单内核,内核运行在单独的内核地址空间上,同时汲取了微内核的精华:模块化设计、抢占式内核、支持内核线程以及动态装载内核模块的能力,避免了微内核的缺陷:让所有事情都运行在内核态,直接调用函数,无需消息传递。
Linux内核与传统Unix系统间的差异:
- Linux支持动态加载内核模块。
- Linux支持对称多处理(SMP)机制。
- Linux内核可以抢占。
- 内核并不区分线程和其他的一般进程。
- Linux提供具有设备类的面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统(sysfs)。
- 忽略了拙劣的Unix特性,像STREAMS,以及难以实现的过时标准。
-
体现了自由的精髓。
5、Linux内核版本
副版本号表示这个版本是稳定版(偶数)还是开发版(奇数)。
修订版本号的升级包括BUG修正,新的驱动以及新的特性的追加。