第一章 Linux内核简介
- Unix的历史
- Linux简介
- 操作系统和内核简介
- Linux内核和传统Unix内核的比较
1.1Unix的历史
Unix强大的根本原因:
1)Unix很简洁:Unix仅仅提供几百个系统调用,并且有一个非常明确的设计目的
2)Unix中所有东西都被当成文件来对待
3)Unix的内核和相关系统工具软件由C语言编写,可移植性强
4)Unix的进程创建非常迅速(fork 系统调用)
5)Unix提供了一套非常简单又稳定的进程间通信元语
快速简洁的进程创建过程使得Unix的程序把目标放在 一次执行保质保量地完成一个任务上,而简单稳定的进程间通信机制又可以保证这些单一目的的简单程序可以方便的组合在一起,去解决现实中变得越来越复杂的任务。
正是这种策略和机制分离地设计理念,确保了Unix系统具备清晰的层次化结构。
1.2Linux简介
Linux系统的基础是 内核、C库、工具集和系统的基本工具,例如登陆的Shell
1.3操作系统和内核简介
操作系统
指整个系统中负责完成最基本功能和系统管理的那些部分(这些部分包括 内核、设备驱动程序、启动引导程序、命令行Shell 或者其他种类的用户界面、基本的文件管理工具和系统工具)系统包含了操作系统和所有运行在它之上的应用程序。
内核负责的事情
通常一个内核由负责响应中断的中断服务程序,负责管理多进程从而分享处理器时间的调度程序,负责管理进程得知空间的内存管理程序,和网络、进程间通信等系统服务程序共同构成。
在系统中运行的应用程序通过系统调用来和内核通信。通常是调用库函数再由库函数通过系统调用界面,让内核代其完成不同的任务
当好一个应用程序执行一条系统调用,我们说内核正在代其执行。进一步说,应用程序被称为通过系统调用在内核空间运行,而内核被称为运行于进程上下文中。这种交互关系---应用程序通过系统调用界面陷入内核---应用程序完成其工作的基本行为方式。
这些上下文代表着内核活动的范围。每个处理器在任何指定的时间点上的活动必然概括为下列三者之一:
· 运行于用户空间,执行用户进程。
· 运行于内核空间,处于进程上下文,代表谋哥特点的进程执行
· 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断
1.4Linux内核和传统Unix内核的比较
Unix内核是一个不可分割的静态可执行库。需要硬件系统提供页机制(MMU)来管理内存。这种页机制可以加强对内存空间的保护,并保证每个进程都可以运行于不同的虚地址空间上。本书将重点关注支持MMU的Linux系统
单内核与微内核设计之比较
操作系统内核可分为:单内核和微内核(外内核,科研系统中)
单内核
把它从整体上作为一个单独的大过程来实现,同时页运行一个单独的地址空间上。因此这样的内核通常以单个静态二进制文件的形式存放于磁盘中。所有内核服务都在这样的一个大内核地址空间上运行。内核之间的通信是微不足道的,因此大家都会运行在内核态,并身处同一地址空间:内核可以直接调用函数,这与用户空间应用程序没有什么区别。这种模式的支持者认为单模块具有简单高效性能的特点(大多数Unix系统都设计为单模块)
微内核
微内核并不作为一个单独的大过程来实现。相反微内核的功能被划分为多个独立的过程,每个过程都叫做一个服务器。理想情况下,只有强烈请求特权服务的服务器才运行在特权模式下,其他服务器都运行在用户空间。不过所有的服务器都保持独立并运行在各自的地址空间上。因此就不可能像单模块内核那样直接调用函数,而是通过消息传递处理微内核通信:系统采用了进程间通信(IPC)机制,因此,各个服务器之间可以通过IPC机制互通消息,互换“服务”。服务器的各自独立有效的避免了一个服务器的失效殃及另一个。同样,模块化的系统允许一个服务器为另一个服务器而换出。
因为IPC机制的开销多于函数调用,又因为会涉及内核空间与用户空间的上下文切换,因此,消息传递需要一定的周期,而单内核中简单的函数调用没有这样的开销。结果,所有实际应用的基于内核的系统都让大部分或全部服务器位于内核,这样就可以直接调用函数,消除频繁的上下文切换。
Linux是一个单核系统
也就是说,Linux内核运行在单独的内核地址空间上。不过,Linux汲取了微内核的精华:其引以为豪的是模块化设计、抢占式内核、支持内核线程以及动态装载内核模块的能力。不仅如此,Linux还避其微内核设计上的性能损失的缺陷,让所有事情都运行在内核态,直接调用函数,无需消息传递。至今,Linux是模块化的、多线程的以及内核本身可调度的操作系统。
Linux内核与传统的Unix系统之间存在一些显著的差异:
· Linux 支持动态加载内核模块
· Linux 支持 对称多处理(SMP)机制,尽管许多 Unix 的变体也支持SMP,但传统的Unix并不支持这种机制。
· Linux 内核可以抢占。
· Linux 对线程支持的实现比较有意思:内核并不区分线程和其他的一般进程。对于内核来说,所有的进程都一样---只不过是其中的一些共享资源而已。
· Linux 提供具有设备类的面向对象的设备模型、热拔插事件,以及用户空间的设备文件系统
· Linux 忽略了一些过时的特性
· Linux 体现的了自由的精髓
1.5Linux内核版本
Liunx内核有两种:稳定的 和 处于开发中的
从版本号 | 偶数--稳定版 奇数--开发版