Linux内核之 基本概念

一直想写写Linux内核的文章,特别是进程这方面的,说实话,很差写,也不太敢写:)直到遇到了一本好书。《Linux内核设计与实现》,原书《Linux Kernel Development》Third Edition,做者Robert Love。网络

在以前买了几本厚书,好比《深刻理解Linux内核》、《深刻理解计算机系统》,对于我而言仍是太厚了。前者主要看了文件系统的一些知识,后者主要看内存管理的一些知识。函数

可是,我最爱的仍是《Linux内核设计与实现》。给个大写的赞,读起来很让人兴奋的那种。本书只有335页,基本上不到上面两本书的一半,可是却很接地气。由于做者是Linux内核开发人员,有丰富的内核开发经验,并且是一位80后,语言简洁幽默。因此该书比前面二者少了五分理论,多了五分实践。值得一看。固然上面的书也能够加深理解Linux内核。工具

 

首先,什么是操做系统,没有统一标准。书上的定义,操做系统是指在整个系统中负责完成最基本功能和系统管理功能的那些部分。这些部分应该包括内核、设备驱动程序、启动引导程序、命令行Shell或者其余种类的用户界面、基本的文件管理工具和系统工具。spa

而系统则是指包含了操做系统和全部运行在它之上的应用程序。操作系统

因此,内核能够称做操做系统核心或者管理者。以下图所示,应用系统、内核和硬件的关系。命令行

事实上该图中,显示了更多的关系。首先咱们说一个系统分为三大层次,最底下是硬件,中间是内核空间,最上面是用户空间。设计

咱们普通的应用程序通常运行在用户态,也就是通常用户能见到的。可是在实际运行过程当中,它须要使用硬件资源,例如可能须要计算用到CPU,须要写文件用到硬盘和内存,显示在屏幕上一样须要内存还有终端。那怎么访问这些硬件的,其中的原理是什么。这些都是中间的内核空间须要完成的事情,若是一个应用程序切换到内核空间运行,就处于内核态。blog

用户态到内核态的切换每每经过系统调用接口来实现,而通常在系统调用接口之上还会封装成标准的库函数,例如C或者C++库。接口

上面提到的硬件是各类物理设备,事实上,都须要有相应的驱动程序管理,例如硬盘、键盘、鼠标、显示器等等。这些设备和驱动如何管理呢,内核子系统管理大部分,有一小部分直接封装成系统调用接口。内核与硬件设备之间每每提供了中断机制。队列

 

咱们上面提到的程序,在通常操做操做系统中,也被称为进程。咱们再把上面的描述进行概括。

 

Linux内核有两大基本抽象概念

  • 文件,Linux下一切皆文件
  • 进程,运行中的程序

若是说前者是静态的抽象,那么后者就是动态的抽象。 

 

Linux进程又有两大虚拟机制

  • 虚拟处理器,CPU 时间的虚拟化
  • 虚拟内存 内存空间的虚拟化

因此一个运行的程序会自觉得拥有了全部的处理器和内存资源。

 

Linux内核有四大服务

  • 中断服务,响应硬件设备的中断提供中断机制。与进程无关,在专门的中断上下文中运行。

  • 进程管理与调度,管理多个进程以及如何分享处理器时间。

  • 内存管理,管理进程地址空间。

  • 网络、进程间通讯,多个进程之间以及进程与外界如何通讯。


Linux内核空间两大上下文

  • 进程上下文,表明某个特定的进程执行。
  • 中断上下文,与任何进程无关,处理某个特定的中断。

 

咱们通常对Linux内核的理解在于进程管理和虚拟内存的管理,而对中断服务会有些陌生,更不知道中断上下文。而此书很是清晰的介绍了中断服务和中断机制,以及中断上下文。简单归纳的话,中断服务是专门针对硬件设备的,是设备驱动程序开发必定须要考虑的,是必须及时获得响应的不能像进程能够睡眠的,固然中断能够被另外的中断打断;当执行一个中断处理程序时,内核处于中断上下文(interrupt context)。中断也不能说彻底不能睡眠,中断处理又能够分为两部分:上、下半部,前面说的及时响应放在上半部(叫中断处理程序),而能够延迟执行的放在下半部,因此,下半部也能够睡眠。因此它对应的机制又有不一样,有多种机制,而个别机制(好比工做队列)和进程调度的机制又有些接近。

对于进程管理、进程调度和进程上下文,后续文章将详细介绍。因此对中断和中断处理的一些概念只是在这里提一下。若是是设备驱动开发的,建议看看本书。

ps:对文件系统和虚拟内存本人以前有很多文章进行了介绍,必要时再进行补充。

相关文章
相关标签/搜索