Linux内核之 基本概念
一直想写写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内核之 基本概念的更多相关文章
- Linux内核的基本概念
Linux内核学习,推荐的书籍: <linux设备驱动开发详解第二版>.<Linux内核设计与实现第三版>.<嵌入式Linux应用开发完全手册> 第一篇:讲解Lin ...
- 菜鸟装逼指南--linux内核中听过就能记住的概念
打算给我们部门弄个内部分享.发现大家对一些底层知识的认知停留在一句一句的,比如听说JVM使用-XX:-UseBiasedLocking取消偏向锁可以提高性能,因为它只适用于非多线程高并发应用.使用数字 ...
- linux内核中听过就能记住的概念
打算给我们部门弄个内部分享.发现大家对一些底层知识的认知停留在一句一句的,比如听说JVM使用-XX:-UseBiasedLocking取消偏向锁可以提高性能,因为它只适用于非多线程高并发应用.使用数字 ...
- Linux内核中网络数据包的接收-第一部分 概念和框架
与网络数据包的发送不同,网络收包是异步的的.由于你不确定谁会在什么时候突然发一个网络包给你.因此这个网络收包逻辑事实上包括两件事:1.数据包到来后的通知2.收到通知并从数据包中获取数据这两件事发生在协 ...
- Linux内核设计与实现笔记_1_基本概念
Linux内核设计与实现笔记_1_基本概念 操作系统 系统这个词包含了操作系统和所有运行在它上面的应用程序.操作系统是指在整个系统中负责完成分最基本功能和系统管理的那些部分,这些部分应该包括: 内核, ...
- linux内核,驱动,应用程三者的概念和之间的关系
驱动程序属于内核的一个部分.准确的说是内核的一个组件.不包含驱动的内核也叫做内核,并且这也是我们常说的内核.内核要干的事情无非5件. 1,内存管理 2,虚拟文件系统 3,进程调度 4,网络接口 5,进 ...
- <Linux内核源码>文件系统VFS内核4.0.4版本基本概念源码
题外话:Linux内核从2.x和3.x到现在最新的4.x变化非常大,最直观的表现就是很多书上的内核代码已经无法直接继续使用,所以看看新的源码是非常有意义的! (下文中的内核源码都来自于 kernel ...
- Linux 内核版本命名
Linux 内核版本命名在不同的时期有其不同的规范,我们熟悉的也许是 2.x 版本奇数表示开发版.偶数表示稳定版,但到 2.6.x 以及 3.x 甚至将来的 4.x ,内核版本命名都不遵守这样的约定. ...
- Linux内核--内核数据类型
转自:http://www.linuxidc.com/Linux/2013-12/93637.htm 将Linux 移植到新的体系结构时,开发者遇到的若干问题都与不正确的数据类型有关.坚持使用严格的数 ...
随机推荐
- P1039 侦探推理(洛谷)
昨天做了一个非常神奇的题,告诉我们做题之前一定要好好检测评测姬! 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先 ...
- echarts 踩坑 : 为什么触摸柱状图的时后柱子不见了?原来是color的锅!
今天发现一个奇怪的问题. 当我的鼠标触摸柱状图的时候,柱状图就消失了. 后来发现是颜色的设置有问题. color: ['rgba(68,238,224)', 'rgba(17,215,255)', ' ...
- 集成Facebook SDK之Facebook登录
前言 这几天应公司需求,需要在项目中接入facebook的登录,现在闲下来后再次巩固一下! 准备工作 保证自己的网络已经翻墙,能够进入Facebook网页 准备一个FB的开发者账号,如果没有可以免费申 ...
- 前缀和线性基HDU6579
Operation 题解:看到区间最大异或和,首先想到的是线性基: 线性基可以处理的操作是: 在数列末尾插入一个数 查询全局的子集异或最大值 由于线性基的长度很短,因此我们可以将数列所有前缀的线性基保 ...
- web自动化 -- HTMLreport(三)测试报告输出log日志
一.需求痛点 1.HTMLreport没法看到log日志,经过封装的框架不可能走一步就print() 2. 希望可以在HTMLreport中输出log日志 3.痛点截图 二.解决办法 1.既然是HTM ...
- emacs org-mode 中文手册精简版(纯小白)
一只小白看了大佬的讲解视频结合其他大佬给整理的笔记再结合emacs 官方英文手册,觉得自己的知识好像增加了. 当时自己在全网搜索的时候没有看到那种纯小白的手册,本小白就写了这个,就当奉献社会了.若有不 ...
- 使用Gateway配置路由以及动态路由
1. 新建module cloud-gateway-gateway9527 2. pom.xml <!--注意不需要web模块依赖,否则报错--> <?xml version=&qu ...
- 将HTML5封装成android应用APK
借鉴了网上很多的教程终于是把整个过程走通了,最主要的还是墙的问题.... 先是要搭建环境(每一步都要检查,确保安装正确): 1.安装 nodejs 淘宝镜像: npm install -g cnpm ...
- 在Linux系统中使用Vim读写远程文件
大家好,我是良许. 今天我们讨论一个 Vim 使用技巧--用 Vim 读写远程文件.要实现这个目的,我们需要使用到一个叫 netrw.vim 的插件.从 Vim 7.x 开始,netrw.vim 就被 ...
- PHP gmstrftime() 函数
------------恢复内容开始------------ 实例 根据区域设置格式化 GMT/UTC 日期和时间: <?phpecho(gmstrftime("%B %d %Y, % ...