第一章 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位对其,不假定字长和页面长度等。)

《Linux内核分析与设计实现》读书笔记一的更多相关文章

  1. 【鸟哥的Linux私房菜】笔记1

    Linux是什么 从操作系统与cpu架构关系到linux  Richard Mathew Stallman GPL 关于GNU计划 Linux的发展 Linux的核心版本 Linux的特色 Linux ...

  2. 【鸟哥的Linux私房菜】笔记3

    正确地开机 最好不要使用root账号登陆!GNOME图形界面 View items as a list X WindowShell 文本交互界面bash是Shell的名称,Linux的默认壳程序就是b ...

  3. 【鸟哥的Linux私房菜】笔记2

    Linux的应用 学习资源整理 安装记录 >< 1.Linux的应用: 网络服务器 数据库 学术机构的高效运算任务 嵌入式系统 ... 2.挂载与磁盘分区 学习资源整理 学习 1.书上的网 ...

  4. 《鸟哥的Linux私房菜》笔记——02. 关于Linux

    Unix 历史 1969年以前:伟大的梦想--Bell, MIT 与 GE 的「Multics」系统 1969年:Ken Thompson 的小型 file server system 1973年:U ...

  5. 《鸟哥的Linux私房菜》笔记——03. 磁盘分区

    Everything is a file. 常见硬件对应于 Linux 下的文件(/dev目录下) 装置 装置在Linux内的档名 SCSI/SATA/U盘硬盘机 /dev/sd[a-p] U盘 /d ...

  6. 鸟哥的linux私房菜学习笔记 __ 命令与文件的搜寻

    连续输入两次[tab]按键就能够知道使用者有多少命令可以下达.那你知不知道这些命令的完整档名放在哪里?举例来说,ls 这个常用的命令放在哪里呢? 就透过 which 或 type 来找寻吧! 范例一: ...

  7. 【鸟哥的Linux私房菜】笔记

    操作系统核心的功能! 驱动程序与操作系统的关系 2. [计算机组成之组件] 3.CPU实际要处理的数据完全来自于主存储器,这是一个很重要的概念! 4.CPU是整个计算机系统最重要的部分,那么目前世界上 ...

  8. 《鸟哥的Linux私房菜》笔记——04. 简单命令行

    键入命令 [dmtsai@study ~]$ command [-options] parameter1 parameter2 ... 指令 選項 參數(1) 參數(2) 注意:有时也可以使用 + 放 ...

  9. 鸟哥的Linux私房菜学习笔记——文件权限与目录配置

    Linux的文件权限和目录配置 在linux中的每个用户必需属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它组的概念. (1)所有者 一般为文件的创建者,谁创建了该文件,就是天 ...

  10. 鸟哥的Linux私房菜学习笔记(1)

    2014/10/29 1.档案的权限管理分为三个部分: 拥有者.群组.其他 2.ls -al 命令可以看到档案的详细信息 3.档案的属性中由十个部分构成 第一个部分是档案类型 -代表档案.d代表文件夹 ...

随机推荐

  1. 软工实践——团队作业需求规格说明书——原型UI设计

    登录界面 还包含忘记密码和注册的功能 注册界面 注册成功后会有弹窗提示,且一个手机号只能注册一次. 忘记密码界面 通过手机收到的验证码更改密码. 项目界面 登陆之后的页面就是这个项目界面.在拥有的界面 ...

  2. python reload(sys)找不到,name 'reload' is not defined和Python3异常-AttributeError: module 'sys' has no att

    基于python3.6.1版本,在一个.py文件中,加入这3行:import requests, re, sysreload(sys)sys.setdefaultencoding("utf- ...

  3. Python csv.md

    csv csv模块可以用于处理从电子表格和数据库导出的数据到带有字段和记录格式的文本文件,通常称为逗号分隔值(csv)格式,因为逗号通常用于分隔记录中的字段. Reading csv.reader(c ...

  4. 虚拟主机ip配置,nginx.conf文件配置及日志文件切割

    今天粗略整理了一下虚拟主机配置,nginx.conf文件的配置,及日志文件的切割,记录如下: nginx虚拟主机配置:1.IP地址配置,2.绑定ip地址和虚拟主机详情:1.ip地址的配置:ifconf ...

  5. 两个docker容器互连时,提示no route to host错误的问题

    大家都知道,两个docker container互连的时候可以用link,但是,我们也知道,container可以将自己的端口映射到宿主机上,比如一个container A上的tomcat将端口暴露给 ...

  6. tomcat 使用 cronolog 切割日志

    1. 下载 cronolog 软件 wget http://cronolog.org/download/cronolog-1.6.2.tar.gz cronolog-.tar.gz tar zxvf ...

  7. PSR规范0-4整理

    PSR规范 psr规范 引言: PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准.这些规范的目的是 ...

  8. ubuntu 中安装 ZED SDK 及结合ROS 的使用

    双目视觉(stereo vision),由于估计深度相对容易且稠密,在姿态估计和建图时容易初始化和估计尺度,所以在三维重建,SLAM等的应用中有这广泛的应用. ZED 作为近几年出现的商业化双目传感器 ...

  9. (mac系统下)mysql 入门

    1.安装好mysql之后并且服务启动,系统偏好设置里有启动mysql服务的按钮 看到running表示可用 2.通过终端访问mysql 先到mysql的路径下(默认安装没有配置环境变量):cd /us ...

  10. CentOS常用命令备忘

    1. 查看进程 ps -a 杀掉进程 kill PID 2. 添加计划任务crontab -e 例如:30 21 * * * service httpd restart 每天21:30重启apache ...