Linux内核简介
内核是操作系统的核心 ,其主要功能有:
- 响应中断,执行中断服务程序
- 管理多个进程,调度和分享处理器的时间
- 管理进程地址空间的内存管理
- 网络和进程间通信等系统服务程序
为了保护系统,通常操作系统被划分为内核空间和用户空间,内核独立于普通的应用程序,一般处于系统态,拥有受保护的内存地址和硬件设备的所有访问权限;相对的,应用程序工作在用户空间,仅能访问系统允许他们使用的部分系统资源,并通过系统调用的方式对硬件设备进行访问,同时不同的应用程序不能访问内核划给其他应用程序的内存范围。
内核的活动范围:
- 运行于用户空间,执行用户进程
- 运行于内核空间,处于进程上下文,代表某个特定进程的执行
- 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断
单内核和微内核
操作系统内核主要分为两大阵营:单内核和微内核。
单内核
内核运行在一个单独的地址空间,因此所有内核服务都在一个大内核地址空间运行,内核间的通信开销很小,所有内核服务都运行在内核态,并处于同一地址空间,这种模式的优点是简单和性能高。大多数Unix系统都设计为单内核。
微内核
每个内核服务是一个独立的过程,叫做服务器,每个服务器都有各自的地址空间。仅有强烈要求特权服务的服务器会运行在特权模式下,其他服务器都运行在用户空间。因此系统不能直接调用函数,而是通过进程间通信(IPC)的方式进行消息传递。
单内核和微内核对比
单内核由于所有的服务运行于同一地址空间,因此可以系统可以直接调用服务,相对于微内核减少了IPC时间,同时不需要上下文来回切换的开销;但是单内核由于所有的服务处于同一地址空间,这样恶意程序容易通过内核服务对系统进行攻击。因此,Linux在单内核的基础上采用了微内核的优点。
Linux单内核优化
Linux是一个单内核,其内核运行在单独的内核地址空间,但是Linux汲取了微内核的精华:模块化设计、抢占式内核、支持内核线程和动态加载内核模块。
Linux内核版本号
2.6.26.1:2为主版本号;6为从版本;26为修订版本号;1,奇数为开发版本,若是偶数则为稳定版本。
内核开发的特点
相对于用户空间内应用程序的开发,内核开发有一些独特之处,因此需要注意以下事项:
- 不能访问C库和标准的C头文件(个人理解这些都是系统调用部分的库)
- 必须使用GNU C
- 缺乏用户空间那样的内存保护机制
- 难以执行浮点运算
- 每个进程只有一个很小的定长堆栈
- 由于支持异步中断、抢占和SMP,必须时刻注意同步和并发
- 需要考虑可移植性
网友评论