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

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

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

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

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

所以,内核可以称作操作系统核心或者管理者。如下图所示,应用系统、内核和硬件的关系。

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

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

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

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

我们上面提到的程序,在一般操作操作系统中,也被称为进程。我们再把上面的描述进行归纳。

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

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

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

Linux进程又有两大虚拟机制

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

所以一个运行的程序会自以为拥有了所有的处理器和内存资源。

Linux内核有四大服务

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

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

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

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

Linux内核空间两大上下文

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

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

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

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

Linux内核之 基本概念的更多相关文章

  1. Linux内核的基本概念

    Linux内核学习,推荐的书籍: <linux设备驱动开发详解第二版>.<Linux内核设计与实现第三版>.<嵌入式Linux应用开发完全手册> 第一篇:讲解Lin ...

  2. 菜鸟装逼指南--linux内核中听过就能记住的概念

    打算给我们部门弄个内部分享.发现大家对一些底层知识的认知停留在一句一句的,比如听说JVM使用-XX:-UseBiasedLocking取消偏向锁可以提高性能,因为它只适用于非多线程高并发应用.使用数字 ...

  3. linux内核中听过就能记住的概念

    打算给我们部门弄个内部分享.发现大家对一些底层知识的认知停留在一句一句的,比如听说JVM使用-XX:-UseBiasedLocking取消偏向锁可以提高性能,因为它只适用于非多线程高并发应用.使用数字 ...

  4. Linux内核中网络数据包的接收-第一部分 概念和框架

    与网络数据包的发送不同,网络收包是异步的的.由于你不确定谁会在什么时候突然发一个网络包给你.因此这个网络收包逻辑事实上包括两件事:1.数据包到来后的通知2.收到通知并从数据包中获取数据这两件事发生在协 ...

  5. Linux内核设计与实现笔记_1_基本概念

    Linux内核设计与实现笔记_1_基本概念 操作系统 系统这个词包含了操作系统和所有运行在它上面的应用程序.操作系统是指在整个系统中负责完成分最基本功能和系统管理的那些部分,这些部分应该包括: 内核, ...

  6. linux内核,驱动,应用程三者的概念和之间的关系

    驱动程序属于内核的一个部分.准确的说是内核的一个组件.不包含驱动的内核也叫做内核,并且这也是我们常说的内核.内核要干的事情无非5件. 1,内存管理 2,虚拟文件系统 3,进程调度 4,网络接口 5,进 ...

  7. <Linux内核源码>文件系统VFS内核4.0.4版本基本概念源码

    题外话:Linux内核从2.x和3.x到现在最新的4.x变化非常大,最直观的表现就是很多书上的内核代码已经无法直接继续使用,所以看看新的源码是非常有意义的! (下文中的内核源码都来自于 kernel ...

  8. Linux 内核版本命名

    Linux 内核版本命名在不同的时期有其不同的规范,我们熟悉的也许是 2.x 版本奇数表示开发版.偶数表示稳定版,但到 2.6.x 以及 3.x 甚至将来的 4.x ,内核版本命名都不遵守这样的约定. ...

  9. Linux内核--内核数据类型

    转自:http://www.linuxidc.com/Linux/2013-12/93637.htm 将Linux 移植到新的体系结构时,开发者遇到的若干问题都与不正确的数据类型有关.坚持使用严格的数 ...

随机推荐

  1. Atlassian Confluence 5.1.2 破解版部署

    Atlassian Confluence(简称Confluence)是一个专业的wiki程序.它是一个知识管理的工具,通过它可以实现团队成员之间的协作和知识共享.Confluence 不是一个开源软件 ...

  2. 设计模式:mediator模式

    目的:解决多组件之间的通信问题,使得组件之间的通信变得简单 核心:提供一个管理类,用来处理组件之间的通信,所有的组件只和管理类通信,组件彼此之间不在单独通信 例子: class Mediator { ...

  3. 在Spring Bean的生命周期中各方法的执行顺序

    Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,常用的设定方式有以下十种: 通过实现 InitializingBe ...

  4. chrome浏览器hover时文字抖动bug

    今天发现一个奇怪的bug,chrome浏览器里面  当父标签定位为fixed时,hover里面子标签时,文本会发生抖动,百思不得其解,经过多方查证,发现解决办法 -webkit-transform:  ...

  5. ajax快速入门

    一.ajax简单入门 1.Ajax的实现步骤 // 1.创建ajax对象var xhr = new XMLHttpRequest();// 2.高数ajax请求地址及请求方式//第一个参数就是请求方式 ...

  6. Day17_购物车

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 注:实验 ...

  7. Python修改元组

    Python修改元组:元组中的元素值是不允许修改的,当创建好的时候就是固定不变的.所谓的修改其实是指创建一个新的元组,只是该元组可能是比原来的元组多一个元素或者少一个元素,然后使用新创建好的元组代替原 ...

  8. 5.20 省选模拟赛 求和 组合数的性质 EGF CRT

    LINK:求和 绝妙的一道题目.没做绝对亏了. 对于第一个subtask 考虑直接递推出组合数. 对于第二个subtask 考虑EGF 设两个EGF 都只含偶数项指标且系数为1的那种 一个到n一个到m ...

  9. LeetCode(1)---检查括号出现的合法性

          题目: 检查字符串中"( )","[ ]","{ }" 的合法性,即是否成对出现 eg,如出现"[()]", ...

  10. 【HNOI2010】弹飞绵羊 题解(分块)

    前言:其实这个题是用LCT做的,但蒟蒻因为太弱了,只会分块QAQ. ----------------------------- 题目链接 题目大意:给定$n$个装置,每个装置有弹力系数$k_i$,即在 ...