Linux内核设计与实现笔记_1_基本概念
操作系统
系统这个词包含了操作系统和所有运行在它上面的应用程序.操作系统是指在整个系统中负责完成分最基本功能和系统管理的那些部分,这些部分应该包括:
内核,
设备驱动程序,
启动引导程序,
> 命令行shell,
用户界面,
基本文件管理工具
系统工具.
内核
用户界面是操作系统的外在表象,内核才是操作系统的内在核心,系统的其他部分必须依靠内核这部分软件提供的服务,如
管理硬件设备,
分配系统资源等
内核的组成
内核也被称为管理者或操作系统核心.
通常一个内核由
负责响应中断的中断服务程序,
负责管理进程地址空间的内存管理程序,
负责管理多个进程从而分享处理器时间的调用程序,
网络,进程间通信等系统服务等共同组成.
内核空间
对于具有内核保护机制的现代系统来说,内核独立于普通应用程序,他一般处于系统态
,即拥有受到保护的内存空间和访问硬件设备的所有权限.这种系统态和被保护起来的内存空间,统称为内核空间.
用户空间
应用程序在用户空间执行,他们只能看到允许他们使用的部分系统资源,并且只能使用某些特定的系统功能,不能直接访问硬件,也不能访问内核划分给别人的内存范围,还有一些其他的限制.
系统状态的切换
内核运行时,系统以内核态进去内核空间执行,当执行一个普通的用户程序时,系统以用户态进入用户空间执行.
系统调用
应用程序通过系统调用让内核代其完成一些任务.我们称,内核正在代其执行.
应用程序被称为通过系统调用在内核空间运行,而内核被称为运行于上下文中.
应用程序通过系统调用在内核空间运行,是应用程序完成其工作的基本行为方式.
中断机制
硬件想与系统通信时,会发出一个异步中断信号,打断CPU执行,继而打断内核的执行,一个中断对应着一个中断号,内核通过中断号找到并执行对应的中断服务程序,来处理中断.许多操作系统,包括Linux的中断管理程序,都不在进程环境范围中运行,而是在一个专用于处理中断的内核环境范围中执行,为了保证中断的快速处理和快速退出.
每个处理器在任一时刻上的内核活动必然包括三者之一:
- 运行于用户空间,执行用户进程.
- 运行于内核空间,处理进程上下文,代表某个特定的进程执行.
- 运行于内核空间,执行中断上下文,与任何进程无关,处理特定中断.
- 当CPU空闲时间,内核就运行一个空进程,处于进程上下文之间,运行于内核空间.
MMU
Unix内核,可以看成是一个静态可执行库,
因此,Unix系统的运行,必须以一个可执行块在一个单独的地址空间中运行.因此需要MMU机制来管理内存;
MMU也称为页机制,Unix内核通常需要硬件系统提供页机制,管理内存,
使得每个进程都能运行在不同的虚拟地址空间中.
操作系统的内核分为三大阵营: 单内核
微内核
外内核
单内核
单内核是最为简单的设计,所谓单内核,就是把内核做为一个大过程来实现,运行在一个单独的地址空间中,将内核以静态二进制文件的形式存放在磁盘中,所有的内核服务都在同一个内核的地址空间中运行.因为大家都运行在内核态,所有的进程和系统服务都在同一个地址间,这使得用户空间与内核空间是在同一个地址空间中,用户程序与系统程序之间可以互相调用,没有隔离,单模块具有简单高性能的特点,大多数Unix系统都设计为单模块.
微内核
微内核将内核划分为多个独立的过程,每个过程称为一个服务器.
只有强烈请求特权服务的服务器,才能够运行在特权模式下,其他服务器都运行于用户空间,
由于内核空间与用户空间在不同的地址区域,所以他们之间不能直接访问,而只能够通过消息传递处理服务器间的通信.系统采用进程间通信IPC机制,各个服务器通过IPC机制互通消息,
这种模块化设计,由于各个服务器都被隔离开运行,在不同的地址区域,这避免了一个服务器崩坏,导致系统崩溃,比单内核更安全.
微内核的缺点:
IPC机制的开销多于函数调用,又涉及到内核空间与用户空间的切换,所以传递消息需要一定的时间,而单内核没有这些开销,实际的微内核系统,通常让全部内核服务都位于一块内核空间中,这使得内核服务之间可以直接调用,避免了内核服务之间传递消息的开销,Windows NT和Max OS X都是微内核的典型实例.
Linux是单内核系统,让所有事情都运行在内核态,直接调用函数,没有传递消息的开销.
Linux内核版本的命名机制:
第一个数字是主版本号
第二个数字是从版本号,偶数为稳定版,奇数为开发版
第三个数字是修订版本号
第四个数字是稳定版本号(可选)
如 2.6.26.1
内核主版本号为2,从版本号为6,修订版本号为26,稳定版本号为1.