Linux内核分析 读书笔记 (第一章、第二章)
第一章 Linux内核简介
1.1 Unix的历史
- Unix很简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目的。
- 在Unix中,所有东西都被当做文件,这种抽象使对数据和对设备的操作是通过一套相同的系统调用接口来进行的:open()、read()、write()、lseek()、close()。
- Unix的内核和相关的系统工具软件都是使用C语言编写而成,使其在各种硬件体系架构面前都具备令人惊异的移植能力。
- Unix进程创建非常迅速,并且有一个独特的fork()系统调用。
- Unix提供了一套非常简单但又很稳定的进程间通信元语,一次执行保质保量地完成一个任务。简单稳定的进程间通信元语把单一目的的程序方便地组合在一起,这种策略和机制分离的理念确保了Unix系统具备清晰的层次化结构。
1.2 Linux简介
- Linux是类Unix系统,但不是Unix。Linux没有直接使用Unix的源代码,但它没有抛弃Unix的设计目标并且保证了应用程序编程接口的一致。
- Linux内核是自由公开软件。
- Linux用途广泛,Linux系统的基础是内核、C库、工具集和系统的基本工具。一般情况下Linux这个词汇主要还是指内核。
1.3 操作系统和内核简介
- 操作系统的精确定义并没有一个统一标准。操作系统是整个系统中负责完成最基本功能和系统管理的部分,包括内核、设备驱动程序、启动引导程序、命令行Shell或者其他种类的用户界面、基本的文件管理工具和系统工具。
- 内核才是操作系统的内在核心,有时候被称作管理者或者是操作系统的核心。通常一个内核由负责响应中断的中断服务程序、负责管理多个进程从而分享处理器时间的调度程序、负责管理进程地址空间的内存管理程序和网络、进程之间通信等系统服务程序共同组成。
- 系统态:拥有受保护的内存空间和访问硬件设备的所有权限。这种系统态和被保护起来的内存空间,称为内核空间。
- 用户态:执行普通用户程序时,系统以用户态进入用户空间执行。(应用程序在用户空间执行,只能看到允许它们使用的部分系统资源,并只使用某些特定的系统功能,不能直接访问系统硬件,也不能访问其他的内核划给别人的内存范围)
- 系统中运行的应用程序通过系统调用来与内核通信。
- 中断机制:当硬件设备想和系统通信的时候,首先发出一个异步的中断信号打断处理器的执行,继而打断内核的执行。中断通常对应一个中断号,内核通过中断号查找相应的中断服务程序,并调用这个程序响应和处理中断。
- 我们可以将每个处理器在任何指定时间点上的活动必然概括为以下三者之一:
- 运行于用户空间,执行用户进程
- 运行于内核空间,处于进程上下文,代表某个特定的进程执行
- 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断
1.4 Linux内核和传统Unix内核的比较
1.操作系统可分为两大阵营:单内核、微内核。第三大阵营是外内核(主要用于科研系统)。
2.Linux是一个单内核,至今Linux是模块化的、多线程的以及内核本身可调度的操作系统。
3.Linux内核和传统Unix内核的差异:
- Linux支持动态加载内核模块。
- Linux支持对称多处理(SMP)机制,传统的Unix不支持。
- Linux内核可以抢占,允许内核运行的任务有优先执行的能力。
- Linux内核不区分线程和其他的一般进程。
- Linux提供具有设备类的面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统。
- Linux忽略了一些被认为是设计的很拙劣的Unix特性和难以实现的过时标准。
- Linux体现了自由的精髓。
1.5 Linux内核版本
1.Linux内核有两种:稳定的(具有工业级的强度,可以广泛应用和部署)、处于开发中的。
2.Linux命名机制:
如果版本号是偶数,则内核是稳定版;如果是奇数,内核就是开发版。
第二章 从内核出发
2.1 获取内核源码
使用Git
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
git pull # 更新分支到Linux的最新分支
安装内核源代码(如果使用git获取就不需要下载压缩文件。)
tar xvjf linux-x.y.z.tar.bz2
或者
tar xvzf linux-x.y.z.tar.gz
- 注意:内核源代码一般安装在/usr/src/linux目录下,即使在安装新内核时,/usr/src/linux目录应当保证原封不动。
使用补丁
patch -p1 < ../patch-x.y.z
2.2 内核源码树
2.3 编译内核
2.3.1 配置内核
1.配置项
- 二选一:yes 或者 no
- 三选一:yes 或者 no 或者 module(module意味着该配置被选定了,以模块生成。驱动程序一般都用三选一的配置项)
字符页面的命令行工具:
make config
图形界面工具:
make menuconfig
基于默认配置为体系结构创建一个配置:
make defconfig
验证和更新配置:
make oldconfig
2.3.2 减少编译的垃圾信息
编译内核:
make 重定向到该文件中:
make > .. /detritus 把无用的输出信息重定向到永无返回值的黑洞dev/null
中:
make > /dev/null
2.3.3 安装新内核
将所有已编译的模块安装到正确的主目录/lib/modules下
make modules_install
2.4 内核开发的特点
1.内核开发时既不能访问C库也不能访问标准的C头文件, include/linux文件夹中包含了所需的内核头文件。
2.内核编程时必须使用GNU C。
内联(inline)函数: 函数会在所调用的位置上展开。 定义时,需要使用static作为关键字,用inline限定它。 内联函数必须在使用之前就定义好,一般在头文件中定义。 内核中优先使用内联函数而不是宏。
内联汇编: 通常使用asm()指令嵌入汇编代码,用volatile表示不优化
分支声明: unlikely(x) - x很少出现,绝少发生,通常为假 likely(y) - y经常出现,通常为真
3.内核编程时缺乏像用户空间那样的内存保护机制。
4.内核编程时难以执行浮点运算。
5.内核给每个进程只有一个很小的定长堆栈。
6.由于内.核支持异步中断、抢占和SMP(对称多处理系统),必须时刻注意同步和并发。
7要考虑可移植性的重要性。
Linux内核分析 读书笔记 (第一章、第二章)的更多相关文章
- 20135239 益西拉姆 linux内核分析 读书笔记之第四章
chapter 4 进程调度 4.1 多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统. 多任务系统可以划分为两类: - 非抢占式多任务: - 进程会一直执行直到自己主动停止运行(这一 ...
- Linux内核分析 读书笔记 (第五章)
第五章 系统调用 5.1 与内核通信 1.调用在用户空间进程和硬件设备之间添加了一个中间层.该层主要作用有三个: 为用户空间提供了硬件的抽象接口. 系统调用保证了系统的稳定和安全. 实现多任务和虚拟内 ...
- Linux内核分析 读书笔记 (第七章)
第七章 链接 1.链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储器并执行. 2.链接可以执行于编译时,也就是在源代码被翻译成机器代码时:也可以执行于 ...
- Linux内核分析 读书笔记 (第四章)
第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间.进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有通过调度程序的合理调度,系统资源才能最大限 ...
- Linux内核分析 读书笔记 (第三章)
第三章 进程管理 3.1 进程 1.进程: 进程就是处于执行期的程序. 进程就是正在执行的程序代码的实时结果. 进程是处于执行期的程序以及相关的资源的总称. 进程包括代码段和其他资源. 2.线程:执行 ...
- Linux内核分析 读书笔记 (第十八章)
第十八章 调试 18.1 准备开始 1. 需要的只是: 一个bug 一个藏匿bug的内核版本 相关内核代码的知识和运气 2. 在跟踪bug的时候,掌握的信息越多越好. 18.2 内核中的bug 1. ...
- 《Linux内核设计与实现》读书笔记——第一、 二章
<Linux内核设计与实现>读书笔记--第一. 二章 标签(空格分隔): 20135321余佳源 第一章 Linux内核简介 1.Unix内核特点 十分简洁:仅提供几百个系统调用并且有明确 ...
- 《Linux内核设计与实现》读书笔记 第一、二章
第一章 Linux内核简介 1.1Unix历史 Unix特点:1.很简洁 2.所有东西都被当成文件对待 3.Unix内核和相关的系统工具软件都是用C语言编写而成 4.进程创建非常迅速 所以Uni ...
- Linux读书笔记第一、二章
第一章 Linux内核简介 1.1Unix历史 Unix特点:1.很简洁 2.所有东西都被当成文件对待 3.Unix内核和相关的系统工具软件都是用C语言编写而成 4.进程创建非常迅速 1.2追寻 ...
随机推荐
- Pandas Learning
Panda Introduction Pandas 是基于 NumPy 的一个很方便的库,不论是对数据的读取.处理都非常方便.常用于对csv,json,xml等格式数据的读取和处理. Pandas定义 ...
- jQuery----各版本
jQuery是一套跨浏览器的JavaScript库,简化HTML与JavaScript之间的操作.由John Resig在2006年1月的BarCamp NYC上发布第一个版本.目前是由 Dave M ...
- POJ 3415 Common Substrings 【长度不小于 K 的公共子串的个数】
传送门:http://poj.org/problem?id=3415 题意:给定两个串,求长度不小于 k 的公共子串的个数 解题思路: 常用技巧,通过在中间添加特殊标记符连接两个串,把两个串的问题转换 ...
- Maven配置本地库加载ojdbc14-10.2.0.4.0.jar文件
因为ojdbc14-10.2.0.4.0.jar是要收费的,所以Maven的远程库里没有这个资源,只能通过配置本地库来加载到J2EE工程里,做法如下: 第一步:在网上下载ojdbc14.jar,然 ...
- Python2.7-random
random 模块,实现了各种分布下的伪随机数生成器.对于整数,可以从一个范围中随机挑选:对于序列,可以随机挑选其中的元素但不改变原序列,也可以对序列中的元素进行重新排列.此外,模块还封装了各种分布函 ...
- tarjan 求割点
在无向连通图中,如果将其中一个点以及所连的所有边都删掉,图就不再连通的话,那么这个点就叫做割点 首先将所有的点分为:1.环中点 2.不成环的单点割点一般出现的情况是:如果(处在不同环中/一环一单点/均 ...
- OO第9~11次作业总结
规格化设计调研 大致发展历史 --> 自给自足的私人化的软件生产方式. --> 落后的软件生产方式无法满足迅速增长的计算机软件需求,软件的开发与维护出现一系列严重问题. --> 正式 ...
- OC分类(类目/类别) 和 类扩展 - 全解析
OC分类(类目/类别) 和 类扩展 - 全解析 具体见: oschina -> MyDemo -> 011.FoundationLog-OC分类剖析 http://blog.csdn. ...
- iOS11 Xcode 9 按住command 单击 恢复到从前(直接跳转到定义)
iOS11 Xcode 9 按住command 单击 恢复到从前(直接跳转到定义) 2017年9月20日,苹果如期推送 Xcode 9 和 iOS 11的更新. Xcode 9正式版与之前bet ...
- SQL Server聚合函数与聚合开窗函数
以下面这个表的数据作为示例. 什么是聚合函数? 聚合函数:聚合函数就是对一组值进行计算后返回单个值(即分组).聚合函数在计算时都会忽略空值(null). 所有的聚合函数均为确定性函数.即任何时候使用一 ...