《Linux内核设计与实现》 第一、二章学习笔记
第一章 Linux内核简介
一、Unix
1、Unix的特点
- 简洁
- 绝大部分东西都被当做文件对待。这种抽象使对数据和对设备的操作都是通过一套相同的系统调用借口来进行的:open(),read(),write(),lseek()和close()
- 出色的平台可移植性——内核和相关的系统工具软件用C语言编写而成
- 进程创建迅速
- 进程间通信原语简单稳定
2、Unix的现状
发展成为支持抢占式多任务、多线程、虚拟内存、换页、动态链接和TCP/IP网络的现代化操作系统。
3、linux简介
- 被广泛移植到Alpha、ARM、PowerPC、SPARC、x86-64等许多其他体系结构上。
- Linux是类Unix系统,但他不是Unix。
- Linux系统的基础是内核、C库、工具集和系统的基本工具。
二、操作系统和内核简介
1、操作系统
指在整个系统中负责完成最基本功能和系统管理的那些部分。包括内核、设备驱动程序、启动引导程序、命令行Shell或者其他种类的用户界面、基本的文件管理工具和系统工具。
2、内核
- 独立于普通应用程序,一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。这种系统态和被保护起来的内存空间,统称为内核空间。
- 在系统中运行的应用程序通过系统调用来与内核通信。
3、应用程序完成其工作的基本行为方式:
应用程序通过系统调用界面陷入内核。
4、处理器的活动必然其下三者之一:
- 运行于用户空间,执行用户进程
- 运行于内核空间,处于进程上下文,代表某个特定的进程执行
- 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断
5、单内核与微内核
- 单内核:内核通常以单个静态二进制文件的形式存放于磁盘中所有内核服务都运行在内核态并身处同一地址空间,内核可以直接调用函数。特点是简单,性能高。
- 微内核:不同的功能被划分为独立的过程,每个过程叫做一个服务器,通过消息传递处理微内核通信,采用了进程间通信(IPC)机制。
6、Linux内核与Unix系统的差异
- Linux支持动态加载模块
- Linux支持对称多处理(SMP)机制
- Linux内核可以抢占
- Linux内核不区分线程和其他一般进程
- Linux提供具有设备类的面向对象的设备模型、热拔插事件、以及用户空间的设备文件系统
- Linux忽略一些被认为设计很拙劣的Unix特性
- Linux体现了自由
第二章 从内核出发
一、内核源码
1、获取内核源码
http://www.kernel.org
2、使用Git来获取最新版本源代码
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
3、更新到Linux的最新分支
$ git pull
4、解压并安装内核源代码
$ tar xvjf linux-x.y.z.tar.bz2
$ tar xvjf linux-x.y.z.tar.gz (压缩形式是GUN的zip)
5、使用补丁
$ patch -p1 < ../patch-x.y.z
二、内核源码树

三、编译内核
1、Linux中可以配置的选项其前缀均为CONFIG。
配置项二选一:yes 或 no
配置项三选一:yes 、no 或 module(以模块形式生成,为独立代码段)
2、简化内核配置工具:
- 字符界面下的Linux工具:逐一遍历所有的配置项,要求用户逐一选择,耗时长。
- 基于ncurse库编制的图形界面工具:
- 基于gtk+的图形工具:
- 基于默认配置为体系结构创建一个配置:
- 验证和更新配置:
$ make config
$ make menuconfig
$ make gconfig
$ make defconfig
$ make oldconfig
一旦内核配置好,就可以利用一个简单的命令来编译它。
$ make
四、内核开发的特点
- 内核开发时既不能访问C库也不能访问标准的C头文件
- 内核编程时必须使用GNU C
- 内联函数必须在使用之前就定义好,一般在头文件中定义。
- 内核编程时缺乏像用户空间那样的内存保护机制
- 内核中内存不分页。
- 内核编程时难以执行浮点运算
- 内核给每个进程只有一个很小的定长堆栈
- 由于内核支持异步中断、抢占和SMP,必须时刻注意同步和并发
- 要考虑可移植性的重要性
《Linux内核设计与实现》 第一、二章学习笔记的更多相关文章
- 《Linux内核设计与实现》 第一二章学习笔记
<Linux内核设计与实现> 第一二章学习笔记 第一章 Linux内核简介 1.1 Unix的历史 Unix的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆 ...
- 《java编程思想(第四版)》第一二章学习笔记
目录 一.Introduction 1.抽象过程 2.面向对象语言(包括Java)的五个基本特性 3.每个对象都提供服务 4.public.private.protected三者的区别 5.Java的 ...
- 《Linux内核设计与实现》第一、二章学习笔记
<Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡 学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态 ...
- 《Linux内核设计与实现》第四周读书笔记——第五章
<Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...
- LINUX内核设计与实现第三周读书笔记
LINUX内核设计与实现第三周读书笔记 第一章 LINUX内核简介 1.1 Unix的历史 1969年的夏天,贝尔实验室的程序员们在一台PDR-7型机上实现了Unix这个全新的操作系统. 1973年, ...
- 《Linux内核设计与实现》Chapter 3 读书笔记
<Linux内核设计与实现>Chapter 3 读书笔记 进程管理是所有操作系统的心脏所在. 一.进程 1.进程就是处于执行期的程序以及它所包含的资源的总称. 2.线程是在进程中活动的对象 ...
- 《Linux内核设计与实现》Chapter 1 读书笔记
<Linux内核设计与实现>Chapter 1 读书笔记 一.Unix的特点 Unix从Multics中产生,是一个强大.健壮和稳定的操作系统. 特点 1.很简洁 2.在Unix系统中,所 ...
- 《Linux内核设计与实现》Chapter 2 读书笔记
<Linux内核设计与实现>Chapter 2 读书笔记 一.获取内核源码 1.使用Git 我们曾经在以前的学习中使用过Git方法 $ git clone git://git.kernel ...
- 《Linux内核设计与实现》Chapter 5 读书笔记
<Linux内核设计与实现>Chapter 5 读书笔记 在现代操作系统中,内核提供了用户进程与内核进行交互的一组接口,这些接口的作用是: 使应用程序受限地访问硬件设备 提供创建新进程与已 ...
- 《Linux内核设计与实现》Chapter 18 读书笔记
<Linux内核设计与实现>Chapter 18 读书笔记 一.准备开始 一个bug 一个藏匿bug的内核版本 知道这个bug最早出现在哪个内核版本中. 相关内核代码的知识和运气 想要成功 ...
随机推荐
- PAT乙级真题及训练题 1025. 反转链表 (25)
PAT乙级真题及训练题 1025. 反转链表 (25) 感觉几个世纪没打代码了,真是坏习惯,调了两小时把反转链表调出来了,心情舒畅. 这道题的步骤 数据输入,数组纪录下一结点及储存值 创建链表并储存上 ...
- Django商城项目笔记No.5用户部分-注册接口-短信验证码
Django商城项目笔记No.4用户部分-注册接口-短信验证码 短信验证码也保存在redis里(sms_code_15101234567) 在views中新增SMSCodeView类视图,并且写出步骤 ...
- 分享-结合demo讲解JS引擎工作原理
代码如下: var x = 1; function A(y){ var x = 2; function B(z){ console.log(x+y+z); } return B; } var C = ...
- 为什么Github要把代码合并请求称为pull request而不是push request?
问题: 我的理解是:我做了一些修改,我请求把我的修改push到你的仓库,然后你review一下我的代码,如果没问题就接受请求merge,这样的话叫做push request岂不是更合适?因为这个操作是 ...
- CentOS常用命令备忘
1. 查看进程 ps -a 杀掉进程 kill PID 2. 添加计划任务crontab -e 例如:30 21 * * * service httpd restart 每天21:30重启apache ...
- 欢迎来到Curl的世界
一.Curl 简介 curl命令是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是 综合传输工具,但按传统,习惯称curl为下载工具.作为一款强力工具,curl支持包括H ...
- 一个web项目web.xml的配置中<context-param>配置作用
<context-param>的作用: web.xml的配置中<context-param>配置作用 1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件 ...
- 通过HttpClient调用服务
/** * 通过HttpClient调用服务 * * @param url 路径 * data json数据 * @return */ //post请求方法public String sendItsm ...
- MyBatis实战之解析与运行
本次所谈的原理仅仅只涉及基本的框架和核心代码,并不会全部都说到,比如关于MyBatis是如何解析XML文件和其他配置文件从而的到内容,还有就是JDBC如何使用,关于JDBC如何使用,可以参考我的这篇博 ...
- linux shell中'',""和``的区别
今天学习一个bash脚本,看到有一条:bin=`dirname "$0"` (dirname filename是输出该文件所在的目录,$0是该bash文件的文件名,在bash中一般 ...