《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,文章仅供学习交流.请勿用于商业用途] 上一节最后说到对于小内存区的请求,假设採用伙伴系统来进行分配,则会在页内产生非 ...
随机推荐
- Dijkstra(最短路求解)
Dijkstra(最短路求解) 模板: #include<iostream> #include<cstdio> #include<cstring> #include ...
- mac下idea 13 在tomcat 7控制台乱码
在mac或linux下idea 13(可能其它版本也会出现乱码) tomcat 7在输出到控制台的日志中文乱码,解决方式 加一个environment variable, 在如图绿色位置添加 JA ...
- jstl格式化日期
<%@ page contentType="text/html" pageEncoding="GBK"%> <%@ page import=& ...
- [POI2011]Meteors
嘟嘟嘟 做了几道题之后,对整体二分有点感觉了. 整体二分的本质就是二分答案.所以这道题二分的就是次数. 然后就是套路了,把小于\(mid\)的操作都添加减去,然后查询,如果查询的值\(x\)比给定值大 ...
- 启动报错:Access denied for user 'root'@'localhost' (using password:YES)
项目启动报错:Access denied for user 'root'@'localhost' (using password:YES) 原因:root帐户默认不开放远程访问权限,所以需要修改一下相 ...
- Node.js实战(九)之事件循环
Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高. Node.js 几乎每一个 API 都是支持回调函数的. Node ...
- PAT B1013 数素数 (20 分)
令 Pi 表示第 i 个素数.现任给两个正整数 M≤N≤104,请输出 PM 到 PN 的所有素数. 输入格式: 输入在一行中给出 M 和 N,其间以空格分隔. 输出格式: 输 ...
- Vue 下拉列表 组件模板
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- P1312 Mayan游戏
题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...
- ADO.NET TransactionScope使用说明(转载)
TransactionScope是.Net Framework 2.0滞后,新增了一个名称空间.它的用途是为数据库访问提供了一个“轻量级”[区别于:SqlTransaction]的事物.使用之前必须添 ...