《LINUX内核设计与实现》第一、二章学习总结
第一章 Linux内核简介
(一)Unix是一个强大、健壮和稳定的操作系统,特点是:
- Unix很简洁,仅仅提供几个几百个系统调用并且有一个非常明确的设计目的
- 在Unix中,所有的东西都被当作文件对待,通过一套相同的系统调用接口来进行:open(),read(),write(),lseek(),close()
- Unix的内核和相关的系统工具软件是用C语言编写而成
- Unix的进程创建非常迅速
- Unix系统具备清晰的层次化结构
(二)操作系统和内核简介:操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分。
- 内核是管理者或者是操作系统核心
- 在系统中运行的应用程序通过系统调用来与内核通信
- 内核还要负责管理系统的硬件设备
(三)处理器在任何指定时间点上的活动范围可以概括为下列三者之一:

- 运行于用户空间,执行用户进程
- 运行于内核空间,处于进程上下文,代表某个特定的进程执行
- 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断
(四)Linux内核和传统UNIX内核特点的比较(Linux是一个单内核)
- Linux支持动态加载内核模块
- Linux支持对称多处理(SMP)机制
- Linux内核可以抢占
- Linux内核并不区分线程和其他的一般进程
(五)Linux内核版本
版本号是偶数,稳定版;版本号是奇数,开发版
第二章 从内核出发
(一)获取内核源码
1. Git是一种开源的分布式版本控制工具。git可以下载和管理Linux的源代码
获取最新提交到Linux版本树的一个副本
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
下载代码后,更新到最新分支
$ git pull
2.安装内核源代码
如果压缩形式为bzip2:$ tar xvjf linux-x.y.z.tar.bz2
如果压缩形式为zip:$ tar xvzf linux-x.y.z.tar.gz
3. 使用补丁:$ patch -p1 < ../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 | 虚拟化基础结构 |
(三)编译内核
1.配置内核
基于字符页面的命令行工具 make config
基于图形界面工具make menuconfig
基于默认配置 make defconfig
验证和更新配置 make oldconfig
Makefile:根据配置的情况,构造出需要编译的源文件列表,然后分别编译,并把目标代码链接到一起,最终形成 Linux 内核二进制文件。
config.in:内核配置文件,给用户提供配置选择的功能。
.config:用户用来存放内核配置后结果的文件。
make:默认的Makefile自动化编译。
2. 减少垃圾信息
$ make > ../detritus #将错误报告和警告信息重定向到文件中
$ make > /dev/null #将无用的输出信息重定向到/dev/null中
-/dev/null:空设备,输入的信息直接丢弃3.衍生多个编译作业
make程序能把编译过程拆分成多个并行的作业。其中每个作业独立并发地运行,有助于加快多处理器系统上的编译过程,也有利于改善处理器的利用率。默认情况下,make只衍生一个作业。$ make -jn #以多个作业编译内核,- j:指定同时执行多任务,- n:要衍生出的作业数
4. 安装新内核
make modules_install #把所有已编译的模块安装到正确的主目录/lib/modules下
System.map文件:编译时在内核代码树的根目录下创建的符号对照表,用来将内核符号与它们的起始地址对应起来。
(四)Linux内核开发的的特点
(1) Linux内核编成时不能访问C库
(2) Linux内核编程时必须使用GNU C
(3) Linux内核编程时缺乏像用户空间那样的内存保护机制
(4) Linux内核编程时浮点数很难使用
(5) 内核只有一个很小的定长堆栈
(6) 由于内核支持异步中断、抢占式和SMP,因此必须时刻注意同步和并发
(7) 要考虑可移植性的重要性
学习体会
本次学习了LINUX内核的一些基本常识,从何处获取源码,如何编译,如何安装内核。。。。。。。。
参考资料:
(1)《Linux内核设计与实现》课本一二章
(2)http://www.cnblogs.com/hyq20135317/p/5277142.html 博客
《LINUX内核设计与实现》第一、二章学习总结的更多相关文章
- 《Linux内核设计与实现》 第一二章学习笔记
<Linux内核设计与实现> 第一二章学习笔记 第一章 Linux内核简介 1.1 Unix的历史 Unix的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆 ...
- Linux内核设计与实现 第一章 第二章
第一章 Linux内核简介 Unix特点: (1) Unix很简洁,仅仅提供几个几百个系统调用并且有一个非常明确的设计目的 (2) 在Unix中,所有的东西都被当作文件对待,通过一套相 ...
- 《linux内核设计与实现》第二章
第二章 从内核出发 一.获取内核源码 1.使用Git(linux创造的系统) 使用git来获取最新提交到linux版本树的一个副本: $ git clone git://git.kernel.org/ ...
- linux及安全《Linux内核设计与实现》第二章——20135227黄晓妍
第二章:从内核出发 2.1获取源代码 2.1.1使用git Git:内核开发者们用来管理Linux内核源代码的控制系统. 我们使用git来下载和管理Linux源代码. 2.1.2安装内核源代码(如果使 ...
- Linux内核设计与实现 第十七章
1. 设备类型 linux中主要由3种类型的设备,分别是: 设备类型 代表设备 特点 访问方式 块设备 硬盘,光盘 随机访问设备中的内容 一般都是把设备挂载为文件系统后再访问 字符设备 键盘,打印机 ...
- Linux内核设计与实现 第三章
1. 进程和线程 进程和线程是程序运行时状态,是动态变化的,进程和线程的管理操作都是由内核来实现的. Linux中的进程于Windows相比是很轻量级的,而且不严格区分进程和线程,线程不过是一种特殊的 ...
- Linux内核设计与实现 第五章
1. 什么是系统调用 系统调用就是用户程序和硬件设备之间的桥梁. 用户程序在需要的时候,通过系统调用来使用硬件设备. 系统调用的存在意义: 1)用户程序通过系统调用来使用硬件,而不用关心具体的硬件设备 ...
- linux内核设计与实现第一章
1.1 unix的历史 Thompson实现unix 伯克利大学对其进一步开发推出了著名的BSD 其他各大厂商相继推出自己的unix 1.1.2 unix的特性 unix系统是一个强大,健壮,稳定的操 ...
- Linux内核设计与实现 第四章
1. 什么是调度 现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上同时运行的各个任务(也就是进程). 这个管理程序就是调度程序,功能: 决定哪些进 ...
- 把握linux内核设计思想(十二):内存管理之slab分配器
[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流.请勿用于商业用途] 上一节最后说到对于小内存区的请求,假设採用伙伴系统来进行分配,则会在页内产生非 ...
随机推荐
- Oracle_spatial的空间索引
空间索引 1.空间索引的创建 1)创建索引之前总是要为空间层插入元数据 2)如果之前创建的索引失败了,必须先删除才能创建 Drop index customers_sidx; 创建索引: Create ...
- Netty入门(六)Decoder(解码器)
Netty 提供了丰富的解码器抽象基类,主要分为两类: 解码字节到消息(ByteToMessageDecoder 和 ReplayingDecoder) 解码消息到消息(MessageToMessag ...
- mysql主从复制亲测,以及注意事项
本人亲测,windows作为mysql主服务器,linux作为从服务器,使用两个linux配置步骤都一样,测一遍而已:区别配置文件在于windwos是my.ini.linux在/etc/my.cof ...
- 密码破解技术——P201421410029
学 号 201421410029 中国人民公安大学 Chinese people’ public security university 网络对抗技术 实验报告 实验三 密码破解技术 ...
- day2-课堂代码
# 字符串常用属性和操作 # a = 'aa' # b = 'bb' # c = 'cc' # d = a + b + c # print(d) # age = 50 # print('田老师的年龄是 ...
- ORACLE 11GR2常用命令
一.ORACLE的启动和关闭 1.在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a.启动ORACLE系统 oracle>svrmgrl ...
- java List集合中contains方法总是返回false
ArrayList的contains方法 java 今天在用ArrayList类的caontains方法是遇到了问题,我写了一个存放User类的ArrayList 但在调用list.contains( ...
- HDU 2059 龟兔赛跑(超级经典的线性DP,找合适的j,使得每个i的状态都是最好的)
龟兔赛跑 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- calico 网络流量 过程 分析 apt-get install telnet
1.calico node 容器在kubernetes中以DaemonSet 的方式运行,容器的网络模式为hostNetwor,与host共享网络栈,拥有相同的Ip和hostname 2.查看某个po ...
- day42
今日内容: 1.子查询补充 2.正则表达式 3.pymysql 1.子查询补充 什么是子查询? 将上一次查询的结果作为下一次查询的条件或原数据 又称为内查询 作用:当你的需求,一次查询无法满足的时候( ...