第一章的学习内容就是对Linux内核有一个基本的了解,同时知道一些关于Linux的知识。

学习Linux,可以自己有一台装有Linux操作系统的机器,源代码的作用无可替代; Linux发展历程简介:Linux是Unix家族的重要成员,一名大学生Linus,他对Unix源代码的修改构建了现在Linux系统的雏形,而且Unix家族的源码都采用开放的原则。

  Linux操作系统与其它操作系统的不同点:首先介绍一下单内核和微内核:单内核:单内核就是把它从整体上作为一个单独的大过程来实现,同时也运行在一个单独的地址空间上,内核可以直接调用函数,这种模式具有简单和性能高的特点。微内核:微内核并不作为一个单独的大过程来实现,微内核的功能被划分为多个独立的过程,每个过程都叫一个服务器,所有的服务器都保持独立运行在各自的地址空间。这样不能像单模块内核那样直接调用函数,而是通过消息传递来实现。

Linux系统是一个单内核,运行在单独的内核地址空间上,模块化设计,强占式内核,支持内核线程以及动态装在内核模块的能力

第二章的学习内容就是从内核出发了解一些Linux内核代码的基本知识,有利于之后的Linux内核代码的学习
  使用一个新的版本控制系统来管理Linux内核源代码:Git

使用Git版本来获取Linux的一个最新版本的代码如下图所示:

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux -2.6.git
   下载完毕代码后,可以更新分支到Linux的最新分支:
$git pull

内核的源代码可能以两种形式进行压缩,这两种形式分别是:zip和bzip2

如果压缩的形式是bzip2,解压代码:$ tar xvjf linux-x.y.z.tar.bz2   如果压缩的形式是GNU的zip,解压代码:$ tar xvzf linux-x.y.z.tar.gz   注意:使用以上几种方式,内核源码一般安装在/usr/src/linux目录下,但是这个源代码最好不要用于开发,也不要以root身份对内核进行修改。   内核源码树如下图所示:

  
 编译内核的一些内容:
    1.配置内核:
    配置内核有三个可选选项:yes、no或者是module 
    其中yes表示把代码编译进主内核镜像中,而不是作为一个模块,no表示不编译,module表示该配置项被选定了,但编译的时候这部分功能的实现是以模块(一种可以动态安装的独立代码段)
内核使用了不同的工具来简化内核配置,下面是一些常见的口令:
$make config #这是字符界面的,用于遍历一遍所有的配置选项,要求用户逐一选择yes、no或者是module选项
$make menuconfig #用于gtk+的图形界面工具直接进行选择,将会把所有配置选项分门别类放置
$make gconfig #也是按照图形界面将配置选型分门别类的放置供用户选择。
$make deconfig #基于默认的配置为你的体系创建一个配置。

2.1这些配置项被放在内核代码树根目录下的.config文件,可以直接修改它,在你修改过配置文件之后,或者用已有的配置文件配置新的代码的时候,应该验证和更新配置,命令为:

$make oldconfig

配置选项CONFIG_IKCONFIG_PROC把完整的压缩过的内核配置文件放在/proc/config.gz下面,当编译新内核的时候就可以方便的克隆出当前的配置,如果我们当前的内核已经启用了这个选项,就可以很方便的从/proc下面复制出配置文件并用来编译一个新的内核,命令:

$zcat /proc/config.gz >.config
$make oldconfig

内核配置好之后,我们可以用简单的命令来编译它:$make

   2.2为了减少编译的垃圾信息,可以用命令来进行重定向到永无返回值的黑洞/del/null.
此时输入如下命令:$ make >/dev/null

2.3为了加快处理器系统上的编译过程,以多个作业的方式完成内核的编译,可以使用如下命令:

$make -jn #其中n是要衍生出的作业数

例如如果在一个16核处理器上,每个处理器衍生出一个或者两个作业,可以输入如下命令:

$make -j32 >/dev/null

2.4模块的按装是自动的,也是独立于体系结构的,以root身份,只要运行: % make module_install

   3.内核开发的一些主要特点和注意事项
   内核编程时既不能访问C库也不能访问标准的C头文件
   内核编程时必须使用GUN C:内联函数,在字里行间展开,定义内联函数时,需要用static作为关键字,并且用inline来限制它;内联汇编,格式如下;还有分支声明
_asm_(
汇编语句模块:
输出部分:函数调用时候的参数
输入部分:函数调用时候的参数
破坏描述部分):
即格式为asm("statements":output_regs:input_regs:clobbered_regs);

内核编程时缺乏像用户空间那样的内存保护机制    内核编程时难以执行浮点运算

    内核给每个进程只有一个很小的定长堆栈
    由于内核支持异步中断,抢占和SMP,因此必须时刻注意同步和并发
    要考虑可移植的重要性

Week4_Linux书本一二两章的更多相关文章

  1. 读了两章的 How Tomcat Works

    周一发现了一本书.How Tomcat Works 惯例先到豆瓣搜书评.结果书评出奇的好.然后下载了PDF.从简介中看,本书的每个章节都会不断的围绕怎么建造一个Tomcat讲解.我本人比较喜欢这种造轮 ...

  2. Java学习笔记,前两章总结

    第一章 Java平台概论 1.Java不仅仅是个程序语言,代表解决问题的平台,代表了原厂.各个厂商.社群.开发者与用户沟通的成果. 2.Java三大平台,从J2SE.J2EE.J2ME到Java SE ...

  3. UML——前两章

    前言 软件开发过程中,在生命周期中,我们大都知道要写文档,但是针对这种团队集体完成的事情,如果中间出现了人员流动问题,这时侯有文档仅仅是不够的.为了让大多数开发人员和用户能直观的了解软件开发的进度和流 ...

  4. Python大战机器学习——基础知识+前两章内容

    一  矩阵求导 复杂矩阵问题求导方法:可以从小到大,从scalar到vector再到matrix. x is a column vector, A is a matrix d(A∗x)/dx=A d( ...

  5. 《分布式Java应用与实践》—— 后面两章

    failover? NAT IP-tunneling DSR vrrp gossip 什么是2PC? 什么是3PC? 什么是Pasox? sna? dal? mpi?

  6. 《Fluid Engine Development》 学习笔记2-基础

    断断续续花了一个月,终于把这本书的一二两章啃了下来,理解流体模拟的理论似乎不难,无论是<Fluid Simulation for Computer Graphics>还是<计算流体力 ...

  7. Go语言知识查漏补缺|基本数据类型

    前言 学习Go半年之后,我决定重新开始阅读<The Go Programing Language>,对书中涉及重点进行全面讲解,这是Go语言知识查漏补缺系列的文章第二篇,前一篇文章则对应书 ...

  8. 《Django By Example》第三章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第三章滚烫出炉,大家请不要吐槽文中 ...

  9. ASP.NET Core中如影随形的”依赖注入”[上]: 从两个不同的ServiceProvider说起

    我们一致在说 ASP.NET Core广泛地使用到了依赖注入,通过前面两个系列的介绍,相信读者朋友已经体会到了这一点.由于前面两章已经涵盖了依赖注入在管道构建过程中以及管道在处理请求过程的应用,但是内 ...

随机推荐

  1. TopJUI Combobox 联动

    这里给联动进行一个简单定义:因Combobox选择或输入的值发生改变时对自身或者其它组件产生影响称为联动.(注:editable确定是否可以手动输入) 有两种实现方法: 一.自己写对应的onChang ...

  2. CentOS6安装各种大数据软件 第八章:Hive安装和配置

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  3. MySQL学习之路(二)——数据类型和操作数据表

    数据类型和操作数据表 2.1 MySQL类型之整型 2.2 MySQL数据类型之浮点型 2.3 日期时间型 DATE 1支持时间:1000年1月1日~9999年12月31日 DATETIME 3 支持 ...

  4. 关于TCP传输的三次握手四次挥手策略

    简单小总结: 一般为了能够准确无误地把数据送达目标处,TCP协议采用了三次握手策略.用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达. 注:握手过程中使用 ...

  5. docker 入门 (一)重要概念介绍

    序 之前一直想学一下docker,但是基本看完就忘记了,下次用还是要再翻一下教程. 最近项目要用,连续用了一段时间,就熟练了,基本的使用以及概念都记住了. 趁现在还刚入门,就把入门一些容易遇到的问题记 ...

  6. Bootstrap01

    Bootstrap01内容概要 一.使用Bootstrap的步骤 1.下载Bootstrap类库,包含三个部分,fonts,css,Bootstrap 2.导入项目中,在头部引入JQ,css和Boot ...

  7. HTML5视频播放练习:鼠标经过视频播放,鼠标移除停止播放,再次经过继续播放。

    随着HTML5的广泛应用,在一些网站中,经常看到有些预览的短视频预览,鼠标经过就会播放,移除就会停止播放,再次移进去就会继续播放. 自己也研究着做一个比较简单的类似的练习. 视频可以自己到包图网下载, ...

  8. C语言 编程练习22

    一.题目 1.编一个程序,输入x的值,按下列公式计算并输出y值: 2.已知数A与B,由键盘输入AB的值,交换它们的值,并输出. 3.给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位 ...

  9. 20155216 2017-2018-1 《信息安全系统设计基础》第二周课堂练习补交以及Myod的实现

    20155216 2017-2018-1 <信息安全系统设计基础>第二周课堂练习补交 课堂测试3:行断点的设置 运行截图: 未完成原因:课前未安装 cgdb 具体步骤: 1.输入命令:gc ...

  10. 20155334 实验五 Java网络编程及安全

    20155334 实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 实验1: 参考 结对实现中缀表达式转后缀表达式 ...