linux第一次读书笔记
第一章 LINUX内核简介
1.1 Unix的历史
- 1969年的夏天,贝尔实验室的程序员们在一台PDR-7型机上实现了Unix这个全新的操作系统。
- 1973年,整个Unix系统用C语言进行了重写,给后来Unix系统的广泛移植铺平了道路。
- 伯克利的第一个Unix演化版是1977年推出的1BSD系统。
- 伯克利真正独立开发的Unix系统是于1979年推出的3BSD系统,支持虚拟内存。
- 1994年重写了虚拟内存子系统,推出了最终官方版,即4.4BSD。
Unix内核的特点:
- 首先,Unix很简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目的。
- 在Unix中,所有的东西都被当做文件对待。
- Unix内核和相关的系统工具软件是用C语言编写而成的,使得其在各种硬件体系架构面前都具备令人惊异的移植能力。
- Unix的进程创建非常迅速,并且有一个非常独特的fork系统调用。
- Unix提供了一套非常简单但又很稳定的进程间通信元语,把目标放在一次执行保质保量地完成一个任务上。
1.2Linux简介
Linux是类Unix系统,没有直接使用Unix的源代码,但也没有抛弃Unix的设计目标并且保证了应用程序编程接口的一致性。
Linux内核也是自由(公开)软件。
1.3操作系统和内核简介
操作系统:整个系统中负责完成最基本功能和系统管理的部分。
内核(管理者或者操作系统核心):由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网络、进程间通信等系统服务程序共同组成。
内核空间:系统态和被保护起来的内存空间。
在系统中运行的应用程序通过系统调用来与内核通信。
将每个处理器在任何指定时间点上的活动必然概括为:
- 运行于用户空间,执行用户进程
- 运行于内核空间,处于进程上下文,代表某个特定的进程执行
- 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断
1.4Linux内核和传统Unix内核的比较
单内核:把它从整体上作为一个单独的大过程来实现,同是也运行在一个单独的地址空间上。
微内核:功能被划分成各个独立的过程。每个过程叫做一个服务器。
Linux是一个单内核,汲取了微内核的精华:模块化设计、抢占式内核、支持内核线程以及动态装载内核模块的能力。让所有事情运行在内核态,直接调用函数,无需消息传递。
- 支持动态加载内核模块
- 支持对称多处理(SMP)
- 内核可以抢占(preemptive),允许内核运行的任务有优先执行的能力
- 不区分线程和其他的一般进程
- 提供具有设备类的面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统。
1.5Linux内核版本
版本号为2.6.30.1的内核,主版本号是2,从版本号是6,修订版本号是30,稳定版本号是1。
第二章 从内核出发
1. 获取内核源码
使用Git
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
git pull # 更新分支到Linux的最新分支
安装内核源代码(如果使用git获取就不需要下载压缩文件。)
tar xvjf linux-x.y.z.tar.bz2
或者
tar xvzf linux-x.y.z.tar.gz
注意:内核源代码一般安装在/usr/src/linux目录下,即使在安装新内核时,/usr/src/linux目录应当保证原封不动。
使用补丁
patch -p1 < ../patch-x.y.z
2. 内核源码树
3. 编译内核
3.1 配置内核
配置项的二选一和三选一:
二选一:yes 或者 no
三选一:yes 或者 no 或者 module(module意味着该配置被选定了,以模块生成。驱动程序一般都用三选一的配置项)
字符页面的命令行工具:
make config
图形界面工具:
make menuconfig
基于默认配置为体系结构创建一个配置:
make defconfig
验证和更新配置:
make oldconfig
3.2 编译内核
编译内核:
make
重定向到该文件中:
make > .. /detritus
把无用的输出信息重定向到永无返回值的黑洞中:
make > /dev/null
3.3 安装新内核
将所有已编译的模块安装到正确的主目录/lib/modules下
make modules_install
4. 内核开发的特点
- 内核开发时既不能访问C库也不能访问标准的C头文件 (解决方法:include/linux文件夹中包含了所需的内核头文件。)
内核编程时必须使用GNU C
内联函数: 函数会在所调用的位置上展开。 定义时,需要使用static作为关键字,用inline限定它。 内联函数必须在使用之前就定义好,一般在头文件中定义。 内核中优先使用内联函数而不是宏。
内联汇编: 通常使用asm()指令嵌入汇编代码,用volatile表示不优化
分支声明: unlikely(x) - x很少出现,绝少发生,通常为假 likely(y) - y经常出现,通常为真
内核编程时缺乏像用户空间那样的内存保护机制
- 内核编程时难以执行浮点运算
- 内核给每个进程只有一个很小的定长堆栈
- 由于内核支持异步中断、抢占和SMP(对称多处理系统),必须时刻注意同步和并发。(常用的解决竞争的方法:自旋锁和信号量)。
- 要考虑可移植性的重要性(诸如保持字节序,64位对其,不假定字长和页面长度等。)
linux第一次读书笔记的更多相关文章
- Linux内核读书笔记第二周
什么是系统调用 简单来说,系统调用就是用户程序和硬件设备之间的桥梁.用户程序在需要的时候,通过系统调用来使用硬件设备. 系统调用的存在,有以下重要的意义: 1)用户程序通过系统调用来使用硬件,而不用关 ...
- Linux 第一次学习笔记
一.Linux 为何物 Linux 就是一个操作系统,就像你多少已经了解的 Windows(xp,7,8)和 Max OS ,至于操作系统是什么,就不用过多解释了,如果你学习过前面的入门课程,应该会有 ...
- Linux内核读书笔记第六周
主要内容: 什么是调度 调度实现原理 Linux上调度实现的方法 调度相关的系统调用 什么是调度 现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上 ...
- Linux内核读书笔记第五周链接
1.临界区(critical regions)就是访问和操作共享数据的代码段.多个执行线程并发访问同一个资源通常是不安全的,为了避免在临界区中并发访问,编程者必须保证这些代码 原子地执行.也就是说,代 ...
- Linux内核读书笔记第四周
进程管理 1.进程描述符及任务结构 进程存放在叫做任务队列(task list)的双向循环链表中.链表中的每一项包含一个具体进程的所有信息,类型为task_struct,称为进程描述符(process ...
- Linux内核读书笔记第三周 调试
内核调试的难点在于它不能像用户态程序调试那样打断点,随时暂停查看各个变量的状态. 也不能像用户态程序那样崩溃后迅速的重启,恢复初始状态. 用户态程序和内核交互,用户态程序的各种状态,错误等可以由内核来 ...
- 《深入理解Linux内核》 读书笔记
深入理解Linux内核 读书笔记 一.概论 操作系统基本概念 多用户系统 允许多个用户登录系统,不同用户之间的有私有的空间 用户和组 每个用于属于一个组,组的权限和其他人的权限,和拥有者的权限不一样. ...
- 《Linux内核设计与实现》读书笔记(十二)- 内存管理【转】
转自:http://www.cnblogs.com/wang_yb/archive/2013/05/23/3095907.html 内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己 ...
- 《Linux内核设计与实现》读书笔记(十一)- 定时器和时间管理【转】
转自:http://www.cnblogs.com/wang_yb/archive/2013/05/10/3070373.html 系统中有很多与时间相关的程序(比如定期执行的任务,某一时间执行的任务 ...
随机推荐
- transition: 0.2s all ease;
/* 全部样式 0.2秒 缓动*/ transition: 0.2s all ease;
- Git提交新项目
Github或者码云上新建项目 $ git init $ git add * $ git remote add origin https://gitee.com/demo/demo.git $ git ...
- [Jsoi2013]快乐的jyy
题目 这个需要我们瞎\(yy\)一下就能做了 我们先对于第一个串建立\(PAM\) 我们把第二个串丢上去匹配,这里匹配出来的是以每一个位置为结尾且在另一个串里存在的最长回文后缀的长度 对于每一个位置开 ...
- ffmpeg m3u8 转 MP4
ffmpeg -i 你的m3u8地址 -acodec copy -vcodec copy -f mp4 output.mp4
- esp8266(3) Arduino通过ESP8266连接和获取网站源代码
http://www.plclive.com/a/tongxinjiekou/2016/0422/374.html 在上一篇8266的基础上,这一篇做个具体的连接网站的例子,供大家参考.上一篇基础篇请 ...
- ActiveMQ安装配置及使用
ActiveMQ介绍 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管J ...
- 利用Apache AXIS 1 发布WebService
首先,AXIS 是apache的作品. 1.到apache去下载相关的包,包括axis.jar.axis-ant.jar.commons-discovery-0.2.jar等.将jar包放到WEB-I ...
- Echo团队Alpha冲刺随笔 - 第六天
项目冲刺情况 进展 开始着手服务器部署.小程序改了几个BUG,WEB端完成接近一半,后端主体功能大致完成 问题 服务器反向代理有点问题 心得 Learning By Doing! 今日会议内容 黄少勇 ...
- 三、java三大特性--多态
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- 源代码管理工具(下)-SVN目录结构
内容中包含 base64string 图片造成字符过多,拒绝显示