第一章 Linux内核简介

1.1 Unix的历史

Unix的特点:

  • Unix很简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目的;
  • 在Unix中,所有的东西都被当做文件对待。
  • Unix的内核和相关的系统工具软件是用C语言编写的,在各种硬件体系结构前具有强大的移植能力
  • Unix的进程创建非常迅速,并且有一个非常独特的fork()系统调用
  • 提供简单又稳定的进程间通信元语

1.2 Linux简介

-是类Unix系统
-Linux的基础是内核、C库、工具集和系统的基本工具。

1.3操作系统和内核简介

1.操作系统

是指在整个系统中负责完成最基本功能和系统管理的部分。包括内核、设备驱动程序、启动引导程序、命令行shell、其他种类的用户界面、基本的文件管理工具和系统工具。

2.内核有时候被称作管理者或者操作系统核心,负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网络和网络、进程间通信等系统服务程序.

3.内核负责管理系统的硬件设备,即提供了中断机制。当硬件设备和系统通信时,先发出一个一部的中断信号去打断处理器的执行,继而打断内核的执行。内核再根据产生的中断号查找相应的中断服务程序,调用这个程序响应和处理中断。

Linux的中断服务程序不在进程上下文中执行,而是在一个与所有进程都无关的、专门的中断上下文中进行,这样可以保证中断服务程序能够在第一时间响应和处理中断请求,然后快速地退出。

上下文表示着内核的活动范围。将每个处理器在任何指定时间点上的活动概括如下:

  • 运行于用户控件,执行用户进程

  • 运行于内核控件,处于进程上下文,代表某个特定的进程执行

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

1.4 Linux内核与传统内核的比较

Linux内核和传统Unix内核的差异:

  • Linux支持动态加载内核模块
  • Linux支持对称多处理(SMP)
  • Linux内核可以抢占,允许内核运行的任务有优先执行的能力
  • Linux不区分线程和进程
  • Linux提供具有设备类的面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统

1.5 Linux内核版本

Linux内核有两种:稳定的和处于开发中的

- 命名机制:

第二章 从内核出发

2.1 获取内核源码

1. 使用Git

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
git pull # 更新分支到Linux的最新分支

2. 安装内核源代码

tar xvjf linux-x.y.z.tar.bz2
or
tar xvzf linux-x.y.z.tar.gz(压缩形式为GNU的zip)

3. 使用补丁

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

2.2 内核源码树

2.3 编译内核

1. 配置内核

  • 字符页面的命令行工具:

    $ make config

  • 图形界面工具:

    $ make menuconfig

  • 基于默认配置为体系结构创建一个配置:

    $ make defconfig

  • 验证和更新配置:

    $ make oldconfig

2. 编译内核

  • 字符页面的命令行工具:

    $ make config

  • 图形界面工具:

    $ make menuconfig

  • 基于默认配置为体系结构创建一个配置:

    $ make defconfig

  • 验证和更新配置:

    $ make oldconfig

3. 减少编译的垃圾信息

  • 将错误报告和警告信息重定向到文件中

    $ make > ../detritus

  • 将无用的输出信息重定向到/dev/null中

    $ make > /dev/null

4.安装新内核

将所有已编译的模块安装到正确的主目录/lib/modules下

make modules_install

2.4 内核开发的特点

  • 内核开发时既不能访问C库也不能访问标准的C头文件 (解决方法:include/linux文件夹中包含了所需的内核头文件。)
  • 内核编程时必须使用GNU C
  • 内核编程时缺乏像用户空间那样的内存保护机制
  • 内核编程时难以执行浮点运算
  • 内核给每个进程只有一个很小的定长堆栈
  • 由于内核支持异步中断、抢占和SMP(对称多处理系统),必须时刻注意同步和并发。(常用的解决竞争的方法:自旋锁和信号量)。
  • 要考虑可移植性的重要性(诸如保持字节序,64位对其,不假定字长和页面长度等。)

最新文章

  1. mongodb全套配置
  2. BZOJ 2815: [ZJOI2012]灾难
  3. sql 连接数不释放 ,Druid异常:wait millis 40000, active 600, maxActive 600
  4. Python的由来
  5. apache中虚拟主机的配置
  6. C#-WinForm-菜单和工具栏
  7. JavaWeb学习总结-09 JDBC 学习和使用
  8. 【Networking】flannel,pipework,weave,udp,vxlan,ovs等资料
  9. NoSql之MongoDB--Windows下数据库配置及初步使用
  10. [BeiJing2010组队][BZOJ 1977]次小生成树 Tree
  11. 如何在github上fork一个项目来贡献代码以及同步原作者的修改
  12. 暑假集训(2)第五弹 ----- Who&#39;s in the Middle(poj2388)
  13. c#根据文件大小显示文件复制进度条实例
  14. 中国IT武林大会暨中国首席技术官2016年度人物颁奖盛典概况
  15. GCD hdu2588
  16. ACE入门——ACE构建
  17. 【BZOJ3157/3516】国王奇遇记(数论)
  18. Sublime text3 插件LiveReload 实现实时预览
  19. leetcode 93 复原IP地址
  20. 【4opencv】CLR基本原理和如何运用于GOCW

热门文章

  1. Django商城项目笔记No.5用户部分-注册接口-短信验证码
  2. 部署weblogic遇到的问题总结
  3. 远程登录Linux(window下操作Linux)
  4. 谁对EXTJS熟悉,有关关闭panel的问题?
  5. XSS详解
  6. BZOJ 1934 善意的投票
  7. 「2017 山东一轮集训 Day5」字符串
  8. OpenCV——边缘检测入门、Canny边缘检测
  9. css 字体、文本、padding的样式
  10. 通过HttpWebRequest调用webService