Linux内核分析第一二章读书笔记
linux读书笔记(1,2章)
标签(空格分隔): 20135328陈都
第一章 Linux内核简介
Unix的历史
Unix 虽然已经使用了40年,但计算机科学家仍然认为它是现存操作系统中最强大和最优秀的系统。从1969 年诞生以来,由Dennis
Ritchie 和Ken Thompson 的灵感火花点亮的这个Unix产物已经成为一种传奇,它历经了时间的考验依然声名不坠。
Multics 项目被终止后,贝尔实验室计算科学研究中心的人们发现自己处于一个没有交互式操作系统可用的境地。在这种情况下,1969年的夏天,贝尔实验室的程序员们设计了一个文件系统原型,而这个原型最终发展横化成了Unix.
操作系统和内核简介
由于一些现行商业操作系统日趋庞杂及其设计上的缺陆,操作系统的精确定义并没有一个统一的标准。许多用户把他们在显示器屏幕上看到的东西理所当然地认为就是操作系统。通常,当然在本书中也这么认为,操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分。这些部分应该包括内核、设备驱动程序、启动引导程序、命令行Shell或者其他种类的用户界面、基本的文件管理工具和系统工具。
系统其他部分必须依靠内接这部分软件提供的服务,像管理硬件设备、分配系统资源等。内核有时候被称作是管理者或者是操作系统核心。通常一个内核由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网络、进程间通信等系统服务程序共同组成。
第二章 从内核出发
获取内核源代码
通过Git这个分布式的版本控制系统来进行:
- 获取最新提交到版本树的一个副本
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git - 下载代码后,更新自己的分支到最新分支
git pull
安装内核源代码
压缩形式为bzip2:tar xvjf linux-x.y.z.tar.bz2
压缩形式为zip:tar xvzf linux-x.y.z.tar.gz
补丁:从内部源码树开始,运行:patch - pl< .. /patch -x .y.z
一般来说,一个给定版本的内核补丁总是打在前一个版本上。
内核源码结构
内核源码树由很多目录组成,而大多数目录叉包含更多的子目录。源码树的根目录及其子目录如下表所示。
|目 录 |描 述|
|:---:|:---:|
|arch |特定体系结构的代码|
|block |块设备I/O层|
|crypo| 加密API|
|Documentation |内核源码文档|
|drivers |设备驱动程序|
|firmware| 使用某些驱动程序而需要的设备固件|
|fs| VFS和各种文件系统|
|include| 内核头文件|
|init| 内核引导和初始化|
|ipc| 进程间通信代码|
|kernel| 像调度程序这样的核心子系统|
|lib| 同样内核函数|
|mm |内存管理子系统和VM|
|net |网络子系统|
|samples |示例,示范代码|
|scripts| 编译内核所用的脚本|
|security| Linux 安全模块|
|sound |语音子系统|
|usr |早期用户空间代码(所谓的initramfs)|
|tools| 在Linux开发中有用的工具|
|virt| 虚拟化基础结构|
配置内核
内核提供了各种不同的工具来简化内核配置。最简单的一种是一个字符界面下的命令行工具:
$ make config
配置选项CONFlG_lKCONFIG_PROC把完整的压缩过的内核配置文件存放在/proc/con且g.gz 下,这样当你编译一个新内棋的时候就可以方便地克隆当前的配置。如果你目前的内核已经启用了此选项,就可以从/proc下复制出配置文件并且使用它来编译一个新内核:
zcat /proc/con且.g.gz > .config
make oldconfig
- config:用户用来存放内核配置后结果的文件。
- 可以配置的各种选项:用CONFIG_FEATURE形式表示,其前缀为CONFIG。
一旦内核配置好了(不论你是如何配置的),就可以使用一个简单的命令来编译它了:
$ make
安装新内核
make modules_install
把所有已编译的模块安装到正确的主目录/lib/modules下
2.4 内核开发的特点
最重要的差异包括以下几种:
- 内核编程时既不能访问 C库也不能访问标准的 C头文件。
- 内核编程时缺乏像用户空间那样的内存保护机制。
- 内核编程时难以执行浮点运算。
- 内核给每个进程只有一个很小的定长堆钱。
- 由于内核支持异步中断、抢占和 SMP,因此必须时刻注意同步和并发。
要考虑可移植性的重要性。
第 一章将带我们从 Unix 的历史视角来认识 Linux 内核与 Linux 操作系统的前世今生。今天Unix 系统业已愤化成一个具有相似应用程序编程接口(API),并且基于相似设计理念的操作 系统家族。但它又是一个别具特色的操作系统,从萌芽到现在已经有 40余年的历史。若要了解 Linux,我们必须首先认识 Unix 系统。
小结
第二章主要介绍Linux内核的一些基本常识:从何处在取源码,如何编译它,又如何 安装新内核。那么,让我们考察一下内核程序与用户空间程序的差异,以及内核中所使用的通 用编程结构。虽然内核在很多方面有其独特性,但从现在来看,它和其他大型软件项目并无多大差别。
Linux内核分析第一二章读书笔记的更多相关文章
- Linux内核分析第四章 读书笔记
Linux内核分析第四章 读书笔记 第一部分--进程调度 进程调度:操作系统规定下的进程选取模式 面临问题:多任务选择问题 多任务操作系统就是能同时并发地交互执行多个进程的操作系统,在单处理器机器上这 ...
- linux内核分析 第4章读书笔记
第四章 进程调度 一.抢占与非抢占 1.非抢占式进程调度 进程会一直执行直到自己主动停止运行 2.抢占式进程调度 Linux/Unix使用的是抢占式的方式,强制的挂起进程的动作就叫做抢占. 二.进程优 ...
- Linux内核分析第四章读书笔记
第四章 进程调度 进程调度程序:确保进程能有效工作的一个内核子程序 决定将哪个进程投入运行,何时运行已经运行多长时间 进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统 原则:只 ...
- Linux内核分析第五章读书笔记
第五章 系统调用 在操作系统中,内核提供了用户进程与内核进行交互的一组接口,这些接口在应用程序和内核之间扮演了使者的角色,保证系统稳定可靠,避免应用程序肆意妄行. 5.1 与内核通信 系统调用在用户空 ...
- linux内核分析 第5章读书笔记
第五章 系统调用 一.与内核通信 系统调用在用户控件进程和硬件设备之间添加了一个中间层,作用有: 为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳定和安全 每个进程都运行在虚拟系统中,而在用 ...
- linux内核分析 第3章读书笔记
第三章 进程管理 一.进程 1.进程 进程就是处于执行期的程序. 进程就是正在执行的程序代码的实时结果. 进程是处于执行期的程序以及相关的资源的总称. 进程包括代码段和其他资源. 2.线程 执行线程, ...
- Linux内核分析第三章读书笔记
第三章 进程管理 3.1 进程 进程就是处于执行期的程序 进程就是正在执行的程序代码的实时结果 线程:在进程中活动的对象.每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 内核调度的对象是 ...
- linux内核分析 第18章读书笔记
十八章 调试 一.内核调试概述 1.需要面对的 一个确定的bug 一个藏匿bug的内核版本 相关的内核代码的知识和运气 2.艰难的调试工作 重现bug很困难:大部分bug通常都不是行为可靠而且定义明确 ...
- linux内核分析 第7章读书笔记——《深入理解计算机系统》
第七章 链接 --<深入理解计算机系统> 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或拷贝)到存储器并执行. 一.编译器 大多数编译系统提供编译驱动 ...
随机推荐
- 8.4Solr API使用(Result Grouping分组查询)
转载请出自出处:http://eksliang.iteye.com/blog/2169458 一.概述 分组统计查询不同于分组统计(Facet),facet只是简单统计记录数,并不能为每组数据返回实际 ...
- JVM各垃圾收集器对比
本随笔是<深入理解Java虚拟机 JVM高级特性与最佳实践>读书笔记. 1.JDK1.7之后的HotSpot虚拟机所包含的所有收集器如下: 解读: 1. 总共有7种垃圾收集器 2.Seri ...
- memcached未授权
memcached未授权 漏洞成因: Memcached端口是对外开放的,用nc或Telne可以直接登录,查看信息,增加修改都可以. nc -vv 1.2.3.4 11211 telnet 1.2.3 ...
- rpm -qa 查找文件
系统环境:centos6.6 yum install 安装的文件找不到安装路径,使用whereis和find -name都无效 rpm -qa | grep -i 关键字 查找 rpm -ql fi ...
- create_buffer_tree example
假设这样一种情况: 绕线完修完timing 后,designer 修改了netlist,给了eco.v,其中改动了 clock tree 的一个分支,导致这个分支上的buffer 都没有了,如下图 一 ...
- $Luogu P2029$ 跳舞 题解
一道不是十分水的\(dp\). 首先我们考虑\(dp\)方程的构造.起初我定义的状态是\(dp_{i,j}\)表示前\(i\)个格子,总共跳了\(j\)次的最大得分.但事实上它并不可以转移,因为我们不 ...
- [笔记] ubuntu下添加windows的字体
方法如下: 第一步:将windows下喜欢的字体文件copy到一个文件夹中,例如将XP里WINDOWS/FONTS中的字体文件(本人比较贪心,把整个文件夹copy了过来……),在linux中命名为xp ...
- sparse linear regression with beta process priors
虽然翻译水平有限,但是看原文虽然看得懂,但是在词汇的问题上,会导致看了后面忘了前面,所以先蹩脚的翻译成中文,然后在仔细思考论文的思想(当然不能翻译成中文就不看英文原本了,得两者一起看,这样不会丢失前面 ...
- C++面试题:list和vector有什么区别
C++面试题:list和vector有什么区别?考点:理解list和vector的区别出现频率:★★★★解析:vector和数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随 ...
- python3获取指定目录内容的详细信息
不同平台获取指定目录内容的详细信息命令各不相同: Linux中可以通过ls -al获取获取 windows中可以通过dir命令获取 下面是我写的一个通用获取目录内容详细信息的python3脚本: #! ...