第一章 Linux内核简介

1.Unix

(1)Unix系统很简洁

(2)在Unix中,所以东西都被当作文件对待,通过一套相同的系统调用接口来进行:open(),read(),write(),lseek(),close()

(3)用C语言编写而成,移植能力强

(4)进程创建迅速,有fork()系统调用

(5)提供了一套非常简单但很稳定的系统元语

目标:一次执行保质保量完成一个任务

2.Linux

没有抛弃Unix的设计目标并且保证了应用程序编程接口的一致

Linux是一个非商业化产品

Linux内核是自由软件

基础:内核,C库,工具集,系统的基本工具(登录程序,shell)

Linux这个词汇主要还是指内核

3.操作系统和内核

操作系统:整个系统中负责完成最基本功能和系统管理的那些成分,包括内核、设备驱动程序、启动引导程序、命令行shell

系统:操作系统和所有运行在它之上的应用程序

内核:中断服务程序、调度程序、内存管理程序、系统服务程序

内核空间:系统态和被保护起来的内存空间

应用程序通过系统调用和内核通信,应用程序调用库函数,再由库函数通过系统调用界面

中断机制:

中断通常对应着一个中断号,内核通过中断号查找中断服务程序,并调用这个程序响应和处理中断

所以中断处理程序,都不在进程上下文中执行,而在中断上下文中执行

这些上下文代表着内核活动范围

应用程序完成其工作的基本行为方式是:

应用程序通过系统调用界面陷入内核。

处理器的活动必然其下三者之一:

  • 运行于用户空间,执行用户进程
  • 运行于内核空间,处于进程上下文,代表某个特定的进程执行
  • 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断

4.Linux内核和Unix传统内核的比较

Unix内核是不可分割的静态可执行库,必须以可执行块的形式在一个单独的地址空间运行,通过页机制管理内存

这里涉及到了单内核和微内核的概念

单内核:作为一个单独的大过程实现,运行在一个单独的地址空间上,以单个静态二进制文件的形式存放在磁盘中

微内核:多个独立的过程,每个过程叫做一个服务器,只有强烈请求特权服务的服务器运行在特权模式下,其他服务器都运行在独立的空间,所以服务器 保存独立并运行在各自的地址空间,通过消息传递处理通信(IPC机制)

Linux是一个单内核,让所有事物都运行在内核态,直接调用函数

Linux是模块化的、多线程的以及内核本身可调度的操作系统

Linux支持动态加载内核模块

Linux支持堆成处理机制

Linux内核可以抢占

Linux内核不区分线程和其他的一般进程

……

5.版本

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

X.y.z.a

X是主版本号,y从版本号,z修订版本号,a稳定版本号

副版本号是奇数,开发版,是偶数,稳定版

重点放在稳定性上

第二章 从内核出发

1.获取内核源码

Linux内核的官方网站:http://www.kernel.org

Kernel.org是源代码的库存之处

Git:管理Linux内核源代码,分布式

安装内核源代码

内核压缩有两种形式:GUN zip(gzip)和bzip2

bzips是默认和首选形式,以这个形式发布的Linux内核叫做linux-x.y.z.tar.bz2,x.y.z是具体版本

内核源码一般安装在/usr/src/linux目录下

使用补丁

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

2.内核源码树

源码树的根目录和子目录

COPYING文件是内核许可证

CREDITS是开发了很多内核代码的开发者列表

MAINTAINERS是维护者列表

Makefile是基本内核的Makefile

3.编译内核

(1)配置内核

前缀 CONFIG

配置选项既可以用来决定哪些文件编译进内核,也可以通过预处理命令处理代码

二选一 yes or no

三选一 yes or no or module(以模块的形式生成)

yes:把代码编译进主内核映像中

字符界面下得命令行工具

$ make config

基于gtk+的图形工具

$ make gconfig

基于ncurse库的图形界面工具

$ make menuconfig

基于默认配置

$ make degconfig

验证和更新配置

$ make oldconfig

配置选项CONFIG_IKCONFIG_PROC把压缩内核配置文件放在/proc/config.gz下

编译一个新内核

$ zcat /proc/config.gz > .config

$ make oldconfig

编译:

$ make

(2)减少编译垃圾

重定向:

$ make > .. /detritus

送去黑洞:

$ make > /dev/null

(3)衍生多个编译作业

一般make只衍生一个作业

以多个作业编译内核:

$ make -jn(n是要衍生出的作业数)

(4) 安装新内核

取决于系统结构和启动引导工具

安装:

$ make modules_install

在根目录下创建一个System.map文件,这是一个符号对照表,将内核符号和起始地址对应起来

4.内核开发的特点

(1)内核编程不能访问C库或C头文件

主要原因是速度和大小

头文件:

指的是内核头文件

(2)内核编程必须使用GUN C

内联函数:

函数会在所调用的位置展开,不过会占用更多的内存空间或占用更多的指令缓存

内联函数必须在使用之前就定义好

优先使用内联函数

内联汇编:

在C代码中嵌入汇编指令

通常使用asm()指令嵌入

分支声明:

对应条件选择语句,内核根据其概率对其进行优化,封装成宏

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

内核出现错误,发送SIGSEGV信号结束进程

内存错误会导致oops

内核中的内存都不分页

(4)内存编程难以执行浮点运算

(5)内核给每个进程很小的定长堆栈

可以从栈中分配大量空间来存放变量

(6)内核支持异步中断、抢占和SMP,同步和并发

Linux是抢占多任务操作系统

LInux内核支持对称多处理系统

中断是异步的

Linux内核可以抢占

解决方法:自旋锁、信号量

(7)可移植性的重要性

必须把与体系结构相关的代码从内核代码树的特定目录中适当的分离出来

Linux内核分析 一二章读书笔记的更多相关文章

  1. 《linux内核分析》chapter3读书笔记

  2. Linux内核设计与实现 读书笔记 转

    Linux内核设计与实现  读书笔记: http://www.cnblogs.com/wang_yb/tag/linux-kernel/ <深入理解LINUX内存管理> http://bl ...

  3. linux内核分析第四周学习笔记

    linux内核分析第四周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  4. Linux内核分析第二周学习笔记

    linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  5. linux内核分析第一周学习笔记

    linux内核分析第一周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  6. 《Linux内核分析》第一周笔记 计算机是如何工作的

    一.计算机是如何工作的? 1.存储程序计算机工作模型 1)冯诺依曼体系结构 学习研究计算机的基本概念.就是指存储程序计算机.所有的有计算功能的电子设备小到计算器,大到超级计算机核心部分都可以用这种体系 ...

  7. Linux内核分析——第一周学习笔记20135308

    第一周 计算机是如何工作的 第一节 存储程序计算机工作模型 1.冯·诺依曼结构模型:冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构.程序指令存储地址和数据存储 ...

  8. Linux内核分析——第一周学习笔记

    20135313吴子怡.北京电子科技学院 chapter 1 知识点梳理 第一节 存储程序计算机工作模型 1.冯诺依曼体系结构:即具有存储程序的计算机体系结构.目前大多数拥有计算和存储功能的设备(智能 ...

  9. Linux内核分析——第二周学习笔记

    20135313吴子怡.北京电子科技学院 chapter 1 知识点梳理 (一)计算机是如何工作的?(总结)——三个法宝 ①存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: ②函数调用堆栈,高 ...

随机推荐

  1. centos7装机教程

    U盘启动电脑进入安装界面 正常情况下你应该会看到下面的这个界面: 选择第一项,然后按TAB键,然后会看到下面这个: 3.修改第二步中按TAB键出来的命令 将命令修改为:>vmlinuz init ...

  2. MySql详解(七)

    MySql详解(七) MySql视图 一.含义 mysql5.1版本出现的新特性,本身是一个虚拟表,它的数据来自于表,通过执行时动态生成. 好处: 1.简化sql语句 2.提高了sql的重用性 3.保 ...

  3. Oracle_spatial的空间操作符介绍

    空间操作符 一.主要空间操作符 1.SDO_FILTER SDO_FILTER(geometry1, geometry2, param); 判断两个几何体是否有相交 SELECT c.mkt_id, ...

  4. Dubbo -- 系统学习 笔记 -- 配置

    Dubbo -- 系统学习 笔记 -- 目录 配置 Xml配置 属性配置 注解配置 API配置 配置 Xml配置 配置项说明 :详细配置项,请参见:配置参考手册 API使用说明 : 如果不想使用Spr ...

  5. python生成语谱图

    语音的时域分析和频域分析是语音分析的两种重要方法,但是都存在着局限性.时域分析对语音信号的频率特性没有直观的了解,频域特性中又没有语音信号随时间的变化关系.而语谱图综合了时域和频域的优点,明显的显示出 ...

  6. opencv 显示摄像头数据

    本文章是一个小例子,主要是在ubuntu 系统中利用Opencv 显示摄像头的数据 ,显示到对话框中. 1.建立一个  main.cpp #include<opencv2/core/core.h ...

  7. zabbix部署(1)(lnmp转)

    1.lnmp 首先 确保CentOS7上网络配置正确,可以正常访问互联网. 确保已经关闭了iptables. CentOS7上是firewall,关闭命令: 1 2 # systemctl stop  ...

  8. 【chrome】"您的连接不是私密连接" 解决办法

    1.启用显示证书选项 在Chrome的地址栏中输入:chrome://flags/#show-cert-link,选择"启用",重启Chrome浏览器.  (操作过无用) 2.安装 ...

  9. Mac 如何显示隐藏文件夹并设置快捷键

    通过在终端运行命令可以控制隐藏文件是否显示: 输入defaults write com.apple.finder AppleShowAllFiles NO 就不显示, 输入defaults write ...

  10. 20155209 林虹宇Exp2 后门原理与实践

    Exp2 后门原理与实践 实验内容 一.使用netcat获取主机操作Shell,cron启动 使用netcat获取主机操作Shell Win获得Linux Shell 查看win的ip地址 windo ...