Linux内核简介
Linux操作系统
操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分。这部分包括内核、设备驱动程序、启动引导程序、命令行shell或者其他种类的用户界面、基本的文件管理工具和系统工具
Linux内核
内核有时候被称作是管理者或者操作系统的核心。
内核组成
通常一个内核的组成有:
负责响应中断的中断服务程序
负责管理多个进程从而分享处理器时间的调度程序
负责管理进程地址空间的内存管理程序
以及网络、进程间通信等系统服务共同组成。
系统态和用户态
内核独立于普通应用程序,它一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。这种系统态和被保护起来的内存空间,统称为内核空间。
相对的,应用程序在用户空间执行,它们只能看到允许它们使用的部分系统资源,并且只使用某些特定的系统功能,不能直接访问硬件,也不能访问内核划给别人的内存范围,还有其他一些使用限制。
当内核运行的时候,系统以内核态进入内核空间执行。而执行一个普通用户程序时,系统将以用户态进入以用户空间执行
库函数和系统调用
在系统中运行的应用程序通过系统调用来与内核通信。应用程序通常调用库函数(比如C库函数)再由库函数通过系统调用界面,让内核代其完成各种不同任务
功能的所需要的操作中的一部分,实现这个函数功能还需要其他的操作,不过也有一些库函数和系统调用是一一对应的关系,比如 open库函数除了调用open()系统调用之外,几乎什么也不做。
中断机制
内核还要负责管理系统的硬件设备,现在几乎所有的体系结构都提供了中断机制。
当硬件设备想和系统通信的时候,它首先要发出一个异步的中断信号去打断处理器的执行,继而打断内核的
执行,中断通常对应着一个中断号,内核通过这个中断号查找相应的中断程序,并调用这个程序响应和
处理中断
为了保证同步,内核可以停用中止——既可以停止所有的中断也可以有选择的停止某个中断号对应的中断。
许多操作系统的中断服务程序,都不在进程上下文中执行。它们在一个与所有进程都无关的、专门的中断上下文中运行。之所以存在这样一个专门的执行环境,是为了保证中断服务程序能够在第一时间响应和处理中断请求,然后快速的退出。
这些上下文代表着内核活动的范围,实际上我们可以将每个处理器在任何时间点上的活动必然概括为下列三者之一:
- 运行于用户空间,执行用户进程
- 运行于内核空间,处于进程上下文,代表某个特定的进程执行
- 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断 -
Linux内核和传统Unix内核的比较
Unix内核几乎毫无例外的都是一个不可分割的静态可执行库,它们必须以巨大、单独的可执行块的形式在一个单独的地址空间中运行。Unix内核通常需要硬件系统提供页机制(MMU)以管理内存。这种页机制可以加强对内存空间的保护,并保证每个进程都可以运行于不同的虚地址空间上。
初期的Linux系统也需要MMU支持,但有一些特殊版本并不依赖于此,因为它可以是Linux系统运行在没有MMU的小型嵌入系统上