第一章 Linux内核简介

一、历史

由于Unix系统设计简洁并且在发布时提供源代码,所以许多其他组织和团体都对它进了进一步的开发。

Unⅸ虽然已经使用了40年,但计算机科学家仍然认为它是现存操作系统中最强大和最优秀的系统。从1969年诞生以来,由Dennis Ritchie和Ken Thompson的灵感火花点亮的这个Unix产物已经成为一种传奇,它历经了时间的考验依然声名不坠。

二、操作系统和内核简介

处理器在任何指定时间点上的活动范围可以概括为下列三者之一:

运行于内核空间,处于进程上下文,代表某个特定的进程执行。

运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断。

运行于用户空间,执行用户进程。

三、Linux内核和传统UNIX内核特点的比较

  • Linux支持动态加载内核模块。
  • Linux支持对称多处理(SMP)机制
  • Linux内核可以抢占。
  • Linux内核并不区分线程和其他的一般进程

四、Linux内核版本

命名规则:

五、Linux内核开发者社区

最重要的论坛:Linux kernel mailing list(lkml)

第二章 从内核出发

一、获取内核源码

课本中给出的方式是使用git,代码如下:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

git pull # 更新分支到Linux的最新分支

安装:

tar xvjf linux-x.y.z.tar.bz2 或者 tar xvzf linux-x.y.z.tar.gz

• 如果使用git获取就不需要下载压缩文件。

• /usr/src/linux目录应当保证原封不动。

打补丁:

patch -p1 < ../patch-x.y.z

二、内核源码树

三、编译内核

1.配置内核

字符页面的命令行工具:
make config


图形界面工具
make menuconfig


配置项的二选一和三选一:

二选一:yes 或者 no

三选一:yes 或者 no 或者 module(以模块生成)

其他的几种配置:

make defconfig //基于默认配置

make oldconfig //验证和更新配置

2.编译内核:make

• 减少编译的垃圾信息→对输出进行重定向。

make > .. /detritus # 重定向到这个文件里了

make > /dev/null # 把无用的输出信息重定向到永无返回值的黑洞里。

• 衍生多个编译作业→

make jn # n是衍生出的作业数,每个处理器可以衍生出1或2个作业,16核时n可取32.

3.安装新内核

make modules_install

System.map这个文件是一份符号对照表

四、内核开发的特点

1.内核开发时既不能访问C库也不能访问标准的C头文件

应对:include/linux文件夹中包含了所需的内核头文件。

2.内核编程时必须使用GNU C

内联函数:
函数会在所调用的位置上展开。
定义时,需要使用static作为关键字,用inline限定它。
内联函数必须在使用之前就定义好,一般在头文件中定义。
内核中优先使用内联函数而不是宏。

内联汇编:
通常使用asm()指令嵌入汇编代码,用volatile表示不优化

分支声明:

unlikely(x) - x很少出现,绝少发生,通常为假

likely(y) - y经常出现,通常为真

3.内核编程时缺乏像用户空间那样的内存保护机制

内核中内存不分页。

4.内核编程时难以执行浮点运算

5.内核给每个进程只有一个很小的定长堆栈

6.由于内核支持异步中断、抢占和SMP,必须时刻注意同步和并发

SMP:对称多处理系统。

常用的解决竞争的方法:自旋锁和信号量。

7.要考虑可移植性的重要性

诸如保持字节序,64位对其,不假定字长和页面长度等。

《Linux内核设计与实现》学习总结 Chap1~2的更多相关文章

  1. Linux内核设计第一周学习总结 计算机如何工作

    北京电子科技学院 20135310陈巧然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002 ...

  2. Linux内核设计第二周学习总结 完成一个简单的时间片轮转多道程序内核代码

    陈巧然 原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.使用实验楼的虚拟机 ...

  3. Linux内核设计第四周学习总结 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    陈巧然原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数A ...

  4. linux内核设计与实现学习笔记-模块

    模块 1.概念:  如果让LINUX Kernel单独运行在一个保护区域,那么LINUX Kernel就成为了“单内核”.    LINUX Kernel是组件模式的,所谓组件模式是指:LINUX K ...

  5. 《Linux内核设计与实现》课本第五章学习笔记——20135203齐岳

    <Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保 ...

  6. 《Linux内核设计与实现》课本第一章&第二章学习笔记

    <Linux内核设计与实现>课本学习笔记 By20135203齐岳 一.Linux内核简介 Unix内核的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆文件 ...

  7. 《Linux内核设计与实现》 第一二章学习笔记

    <Linux内核设计与实现> 第一二章学习笔记 第一章 Linux内核简介 1.1 Unix的历史 Unix的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆 ...

  8. 《Linux内核设计与实现》第四章学习笔记

    <Linux内核设计与实现>第四章学习笔记           ——进程调度 姓名:王玮怡  学号:20135116 一.多任务 1.多任务操作系统的含义 多任务操作系统就是能同时并发地交 ...

  9. 《Linux内核设计与实现》第五章学习笔记

    <Linux内核设计与实现>第五章学习笔记 姓名:王玮怡  学号:20135116 一.与内核通信     在Linux中,系统调用是用户空间访问内核的唯一手段:除异常和陷入外,它们是内核 ...

  10. 《Linux内核设计与实现》第四章学习笔记——进程调度

                                                                        <Linux内核设计与实现>第四章学习笔记——进程调 ...

随机推荐

  1. php开发文章发布示例(正则表达式实例开发)

    存档: post.php <form method="post" action="viewthread.php" target="_blank& ...

  2. Bug 级别定义标准

    缺陷种类 缺陷级别 详细说明 功能缺陷 Urgent (V级) 1.操作系统无法正常使用,死机,出现致命错误 2.数据丢失 3.被测试系统频繁崩溃,程序出错,使功能不能继续使用 4.性能与需求不一致 ...

  3. linux命令提示符设置

    变成绿色 [root@localhost /usr/local]#vim /root/.bashrc # .bashrc # User specific aliases and functions a ...

  4. 测试类异常Manual close is not allowed over a Spring managed SqlSession

    在用Spring 和mybatis整合的 写测试类的时候报出解决办法:在全局配置文件   class="org.mybatis.spring.SqlSessionTemplate" ...

  5. 图 -数据结构(C语言实现)

    读数据结构与算法分析 坑!待填! 若干定义 一个图G = (V , E)由顶点集V和边集E组成,每条边就是一个点对 如果点对是有序的,那么就叫做有向图 边可能还具有第三种成分,权值 无向图种从每个顶点 ...

  6. Throwable、Error、Exception、RuntimeException的区别与联系

    Throwable类是Java语言中所有错误和异常的超类.只有作为此类(或其子类之一)的实例的对象才被Java虚拟机抛出,或者可以被Java throw语句抛出.类似地,只有这个类或其子类之一可以是c ...

  7. .net core 2.1.3可能引发Could not load file or assembly XXXXX的错误

    参考文档: https://github.com/aspnet/Home/issues/3503 写在前面 感觉自己现在干的活离开发越来越远了啊,不过也很好,每天能学到不少东西,中文的,英文的,永远也 ...

  8. VMware VSAN 入门与配置(一)

    ----VMware VSAN beta版已经出来一段时间了,今天终于正式发布(同时VMware View 5.3.1也正是发布,在5.3的基础上增加了VSAN的支持) VSAN 产品主页 http: ...

  9. 4.hive的外部表和内部表

    1.外部表和内部表区别 创建表时:创建内部表时,会将数据移动到数据仓库指向的路径:若创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变. 删除表时:在删除表的时候,内部表的元数据和数据会被一 ...

  10. sql数据库表容量

    标题:SQL Server 的最大容量规范 数据库的文件大小,文件数量都有限制. 表的大小也有限制,如果表过大,查询效率就会下降,考虑对数据进行分割,对历史数据进行独立存储.