第一章 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内核设计与实现》 第一、二章学习笔记的更多相关文章

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

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

  2. 《java编程思想(第四版)》第一二章学习笔记

    目录 一.Introduction 1.抽象过程 2.面向对象语言(包括Java)的五个基本特性 3.每个对象都提供服务 4.public.private.protected三者的区别 5.Java的 ...

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

    <Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡  学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态 ...

  4. 《Linux内核设计与实现》第四周读书笔记——第五章

    <Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...

  5. LINUX内核设计与实现第三周读书笔记

    LINUX内核设计与实现第三周读书笔记 第一章 LINUX内核简介 1.1 Unix的历史 1969年的夏天,贝尔实验室的程序员们在一台PDR-7型机上实现了Unix这个全新的操作系统. 1973年, ...

  6. 《Linux内核设计与实现》Chapter 3 读书笔记

    <Linux内核设计与实现>Chapter 3 读书笔记 进程管理是所有操作系统的心脏所在. 一.进程 1.进程就是处于执行期的程序以及它所包含的资源的总称. 2.线程是在进程中活动的对象 ...

  7. 《Linux内核设计与实现》Chapter 1 读书笔记

    <Linux内核设计与实现>Chapter 1 读书笔记 一.Unix的特点 Unix从Multics中产生,是一个强大.健壮和稳定的操作系统. 特点 1.很简洁 2.在Unix系统中,所 ...

  8. 《Linux内核设计与实现》Chapter 2 读书笔记

    <Linux内核设计与实现>Chapter 2 读书笔记 一.获取内核源码 1.使用Git 我们曾经在以前的学习中使用过Git方法 $ git clone git://git.kernel ...

  9. 《Linux内核设计与实现》Chapter 5 读书笔记

    <Linux内核设计与实现>Chapter 5 读书笔记 在现代操作系统中,内核提供了用户进程与内核进行交互的一组接口,这些接口的作用是: 使应用程序受限地访问硬件设备 提供创建新进程与已 ...

  10. 《Linux内核设计与实现》Chapter 18 读书笔记

    <Linux内核设计与实现>Chapter 18 读书笔记 一.准备开始 一个bug 一个藏匿bug的内核版本 知道这个bug最早出现在哪个内核版本中. 相关内核代码的知识和运气 想要成功 ...

随机推荐

  1. 一道经典面试题-----setTimeout(function(){},0)

    一道经典面试题-----setTimeout(function(){},0) 转载: http://www.w3cfuns.com/notes/17398/e8a1ce8f863e8b5abb5300 ...

  2. Netty入门(十)解码分隔符和基于长度的协议

    我们需要区分不同帧的首尾,通常需要在结尾设定特定分隔符或者在首部添加长度字段,分别称为分隔符协议和基于长度的协议,本节讲解 Netty 如何解码这些协议. 一.分隔符协议 Netty 附带的解码器可以 ...

  3. Wannafly挑战赛27

    Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...

  4. BZOJ3676:[APIO2014]回文串(SAM,Manacher)

    Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. Input 输入只有一行 ...

  5. vue计算属性和vue实力的属性和方法

    生命周期 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  6. Python2.7-codecs

    codecs 自然语言编码转换模块 模块内的主要方法如下: codecs.encode(obj[, encoding[, errors]]):对obj用encoding编码codecs.decode( ...

  7. 我的$OI$

    我只是懒得写日记啦\(\color{pink}{qwq}\) //11月8日 啊--终于要\(NOIp\)了,为此期盼了好久.紧张了好久的我,不知道会迎来怎样的结果. 我只知道这段回忆是值得保留封存的 ...

  8. javascript删除Cookie的正确方法(转载)

    原来一直以为只要设置javascript的document.cookie对象就能简单的在浏览器端设置和删除cookie值,网上很多文章也是这么教的,但是最近发现简单的设置javascript的docu ...

  9. Android Studio常用快捷键 - 转

    Android Studio常用快捷键 1. Ctrl+D: 集合了复制和粘贴两个操作,如果有选中的部分就复制选中的部分,并在选中部分的后面粘贴出来,如果没有选中的部分,就复制光标所在的行,并在此行的 ...

  10. adb连接不上手机的解决方案

    一.确认手机的USB调试接口是打开的:----------打开开发者模式,暴击手机版本号多次,直到提示已打开开发者模式. 二.使用USB线连接电脑和手机,可以首先执行adb remount(重新挂载系 ...