《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,文章仅供学习交流.请勿用于商业用途] 上一节最后说到对于小内存区的请求,假设採用伙伴系统来进行分配,则会在页内产生非 ...
随机推荐
- php包含那点事情[WOOYUN]
有空就多整理下曾经研究过的知识和需要温顾的知识,明年可能去寻工作络. 关于PHP中LFI(Local File Include,本地文件包含)漏洞,大家都很熟悉了;paper很多很多,特别是国外的.. ...
- html简单介绍(二)
表格 table标签:border:表示边框的大小 <table border="1"> <tr> <td>row(行1), cell(列1)& ...
- saltstack二次开发(二)
Saltstack的api Salt-api有两种方式,一种是函数的形式,有人家定义好的函数,我们可以直接调用,直接写python代码调用函数或者类就可以了.第二种形式是salt-api有封装好的ht ...
- Vue.js实现前段评论展示
本来想着给这个博客弄个回复系统(类似知乎的回复),最初的实现思路是这样的:主评论后台渲染,前台新增的评论,回复用jquery操作dom放到页面上.实现的时候感觉好复杂,大量的dom操作,目前前段框架不 ...
- ftp传输文件到指定服务器
#!/bin/bash filePrefix="dbname"localDir="/DBBackup"remoteDir="/Backup" ...
- 【Odoo 8开发教程】第一章:Odoo 8.0安装
转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/10779733.html odoo有三种常见的安装方式:打包程序安装.源码安装以及Docker镜像安装. 一:打 ...
- <数据结构与算法分析>读书笔记--递归
一.什么是递归 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的 ...
- 非const引用不能指向临时变量
没找到具体原因,MSDN看到下面这句,VC是从2008才有这一限制的,感觉就是从语法上对临时变量增加了限定,因为一般说来修改一个临时变量是毫无意义的,通过增加限定,强调临时变量只读语义.虽然实际上修改 ...
- 20155232《网络对抗》 Exp1 PC平台逆向破解(5)M
20155232<网络对抗> Exp1 PC平台逆向破解(5)M 实验内容 (1).掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(1分) (2)掌握反汇编与十六进制编程 ...
- 实验的方差分析(R语言)
实验设计与数据处理(大数据分析B中也用到F分布,故总结一下,加深印象)第3课小结--实验的方差分析(one-way analysis of variance) 概述 实验结果\(S\)受多个因素\(A ...