Linux内核分析 一二章读书笔记
第一章 Linux内核简介
1.Unix
(1)Unix系统很简洁
(2)在Unix中,所以东西都被当作文件对待,通过一套相同的系统调用接口来进行:open(),read(),write(),lseek(),close()
(3)用C语言编写而成,移植能力强
(4)进程创建迅速,有fork()系统调用
(5)提供了一套非常简单但很稳定的系统元语
目标:一次执行保质保量完成一个任务
2.Linux
没有抛弃Unix的设计目标并且保证了应用程序编程接口的一致
Linux是一个非商业化产品
Linux内核是自由软件
基础:内核,C库,工具集,系统的基本工具(登录程序,shell)
Linux这个词汇主要还是指内核
3.操作系统和内核
操作系统:整个系统中负责完成最基本功能和系统管理的那些成分,包括内核、设备驱动程序、启动引导程序、命令行shell
系统:操作系统和所有运行在它之上的应用程序
内核:中断服务程序、调度程序、内存管理程序、系统服务程序
内核空间:系统态和被保护起来的内存空间
应用程序通过系统调用和内核通信,应用程序调用库函数,再由库函数通过系统调用界面
中断机制:
中断通常对应着一个中断号,内核通过中断号查找中断服务程序,并调用这个程序响应和处理中断
所以中断处理程序,都不在进程上下文中执行,而在中断上下文中执行
这些上下文代表着内核活动范围
应用程序完成其工作的基本行为方式是:
应用程序通过系统调用界面陷入内核。
处理器的活动必然其下三者之一:
- 运行于用户空间,执行用户进程
- 运行于内核空间,处于进程上下文,代表某个特定的进程执行
- 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断
4.Linux内核和Unix传统内核的比较
Unix内核是不可分割的静态可执行库,必须以可执行块的形式在一个单独的地址空间运行,通过页机制管理内存
这里涉及到了单内核和微内核的概念
单内核:作为一个单独的大过程实现,运行在一个单独的地址空间上,以单个静态二进制文件的形式存放在磁盘中
微内核:多个独立的过程,每个过程叫做一个服务器,只有强烈请求特权服务的服务器运行在特权模式下,其他服务器都运行在独立的空间,所以服务器 保存独立并运行在各自的地址空间,通过消息传递处理通信(IPC机制)
Linux是一个单内核,让所有事物都运行在内核态,直接调用函数
Linux是模块化的、多线程的以及内核本身可调度的操作系统
Linux支持动态加载内核模块
Linux支持堆成处理机制
Linux内核可以抢占
Linux内核不区分线程和其他的一般进程
……
5.版本
Linux内核有两种:稳定的、处于开发中的
X.y.z.a
X是主版本号,y从版本号,z修订版本号,a稳定版本号
副版本号是奇数,开发版,是偶数,稳定版
重点放在稳定性上
第二章 从内核出发
1.获取内核源码
Linux内核的官方网站:http://www.kernel.org
Kernel.org是源代码的库存之处
Git:管理Linux内核源代码,分布式
安装内核源代码
内核压缩有两种形式:GUN zip(gzip)和bzip2
bzips是默认和首选形式,以这个形式发布的Linux内核叫做linux-x.y.z.tar.bz2,x.y.z是具体版本
内核源码一般安装在/usr/src/linux目录下
使用补丁
$ patch –p1 < ../patch-x.y.z
2.内核源码树
源码树的根目录和子目录
COPYING文件是内核许可证
CREDITS是开发了很多内核代码的开发者列表
MAINTAINERS是维护者列表
Makefile是基本内核的Makefile
3.编译内核
(1)配置内核
前缀 CONFIG
配置选项既可以用来决定哪些文件编译进内核,也可以通过预处理命令处理代码
二选一 yes or no
三选一 yes or no or module(以模块的形式生成)
yes:把代码编译进主内核映像中
字符界面下得命令行工具
$ make config
基于gtk+的图形工具
$ make gconfig
基于ncurse库的图形界面工具
$ make menuconfig
基于默认配置
$ make degconfig
验证和更新配置
$ make oldconfig
配置选项CONFIG_IKCONFIG_PROC把压缩内核配置文件放在/proc/config.gz下
编译一个新内核
$ zcat /proc/config.gz > .config
$ make oldconfig
编译:
$ make
(2)减少编译垃圾
重定向:
$ make > .. /detritus
送去黑洞:
$ make > /dev/null
(3)衍生多个编译作业
一般make只衍生一个作业
以多个作业编译内核:
$ make -jn(n是要衍生出的作业数)
(4) 安装新内核
取决于系统结构和启动引导工具
安装:
$ make modules_install
在根目录下创建一个System.map文件,这是一个符号对照表,将内核符号和起始地址对应起来
4.内核开发的特点
(1)内核编程不能访问C库或C头文件
主要原因是速度和大小
头文件:
指的是内核头文件
(2)内核编程必须使用GUN C
内联函数:
函数会在所调用的位置展开,不过会占用更多的内存空间或占用更多的指令缓存
内联函数必须在使用之前就定义好
优先使用内联函数
内联汇编:
在C代码中嵌入汇编指令
通常使用asm()指令嵌入
分支声明:
对应条件选择语句,内核根据其概率对其进行优化,封装成宏
(3)内核编程缺乏像用户空间那样的内存保护机制
内核出现错误,发送SIGSEGV信号结束进程
内存错误会导致oops
内核中的内存都不分页
(4)内存编程难以执行浮点运算
(5)内核给每个进程很小的定长堆栈
可以从栈中分配大量空间来存放变量
(6)内核支持异步中断、抢占和SMP,同步和并发
Linux是抢占多任务操作系统
LInux内核支持对称多处理系统
中断是异步的
Linux内核可以抢占
解决方法:自旋锁、信号量
(7)可移植性的重要性
必须把与体系结构相关的代码从内核代码树的特定目录中适当的分离出来
Linux内核分析 一二章读书笔记的更多相关文章
- 《linux内核分析》chapter3读书笔记
- Linux内核设计与实现 读书笔记 转
Linux内核设计与实现 读书笔记: http://www.cnblogs.com/wang_yb/tag/linux-kernel/ <深入理解LINUX内存管理> http://bl ...
- linux内核分析第四周学习笔记
linux内核分析第四周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- Linux内核分析第二周学习笔记
linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- linux内核分析第一周学习笔记
linux内核分析第一周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- 《Linux内核分析》第一周笔记 计算机是如何工作的
一.计算机是如何工作的? 1.存储程序计算机工作模型 1)冯诺依曼体系结构 学习研究计算机的基本概念.就是指存储程序计算机.所有的有计算功能的电子设备小到计算器,大到超级计算机核心部分都可以用这种体系 ...
- Linux内核分析——第一周学习笔记20135308
第一周 计算机是如何工作的 第一节 存储程序计算机工作模型 1.冯·诺依曼结构模型:冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构.程序指令存储地址和数据存储 ...
- Linux内核分析——第一周学习笔记
20135313吴子怡.北京电子科技学院 chapter 1 知识点梳理 第一节 存储程序计算机工作模型 1.冯诺依曼体系结构:即具有存储程序的计算机体系结构.目前大多数拥有计算和存储功能的设备(智能 ...
- Linux内核分析——第二周学习笔记
20135313吴子怡.北京电子科技学院 chapter 1 知识点梳理 (一)计算机是如何工作的?(总结)——三个法宝 ①存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: ②函数调用堆栈,高 ...
随机推荐
- Django商城项目笔记No.15用户部分-用户中心邮箱验证
首先增加前端页面success_verify_email.html页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...
- PyQt5--MainWindow
# -*- coding:utf-8 -*- ''' Created on Sep 14, 2018 @author: SaShuangYiBing ''' import sys from PyQt5 ...
- Beyond Compare使用
1.通过过滤功能设置要比较的文件: 2.all,diff功能适用于文件本身的差异以及目录的差异 其它问题: 1.Beyond Compare比较文件时,相同的文件也显示为红色(有差异) http:// ...
- [JLOI2013]删除物品
嘟嘟嘟 只要每一次将优先级最高的上面的物品移走,就一定能保证是最优解. 所以我们只要想办法简化这个模拟移物品的过程,看完了题解后,发现可以这么想,我们可以把两个栈头碰头的挨在一起,然后设一个指针代表两 ...
- PHP中全局变量global和$GLOBALS[]的区别分析
$GLOBALS['var']是外部的全局变量本身,global $var是外部$var的同名引用或者指针 一.举例比较 例一: 复制代码 代码如下: <?php $var1 = 1; ...
- oracle数据库flashback系列--闪回数据库在dataguard中的使用
很多人在学习flashback database这个oracle技术的时候,都会有一个疑问,就是如果我只有一个数据库作为生产库的话,是否有这样的业务需求导致我们要把数据库闪回到以前的时间点?以及这样做 ...
- MP实战系列(十二)之封装方法详解(续二)
继续MP实战系列(十一)之封装方法详解(续一)这篇文章之后. 此次要讲的是关于查询. 查询是用的比较多的,查询很重要,好的查询,加上索引如鱼得水,不好的查询加再多索引也是无济于事. 1.selectB ...
- 图解:图形下控制台中weblogic9.2多池配置为oracle集群RAC
update: 这个东西如果配置不顺利的话:应用请求数据库的时候,会打印类似这样的错误: :open connection err Pool connect failed : weblogic.com ...
- PAT B1040 有几个PAT (25 分)
字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位(T). 现 ...
- JAVA框架 Spring 引入多个配置文件
1.如果配置文件比较长,可以分多个配置文件.有两种方式: 1)在主配置文件加标签<import/> <import resource="jd/com/other/appli ...