虚拟文件系统 内核在它的底层文件系统系统接口上建立一个抽象层,该抽象层使Linux可以支持各种文件系统,即便他们在功能和行为上存在很大差异. VFS抽象层定义了各个文件系统都支持的基本的.概念上的接口和结构数据. VFS对象及其数据结构 VFS中有四个主要的对象类型: 超级块:表示一个具体的已安装文件系统,包含文件的控制信息等内容. 索引点对象:代表一个具体的文件,包含文件的相关信息,比如文件大小.拥有者.创建时间等. 目录项对象:代表一个目录项,是路径的组成部分 文件对象:代表进程已经打开的文…
Linux内核同步笔记 几个基本概念 - 临界区(critical region):访问和操作共享数据的代码段: - 原子操作:操作在执行中不被打断,要么不执行,要么执行完: - 竞争条件: 两个线程处于同一个临界区内执行,对数据同时访问或操作,称之为竞争: - 同步(synchronization):避免并发和防止竞争条件成为同步. 预防死锁 - 按顺序加锁,使用嵌套锁时,必须注意按顺序加锁,可以防止拥抱类死锁. - 防止饥饿 - 不要重复请求同一个锁 - 设计力求简单. 原子操作 原子操作可…
虚拟文件系统 虚拟文件系统:内核子系统VFS,VFS是内核中文件系统的抽象层,为用户空间提供文件系统相关接口: 通过虚拟文件系统,程序可以利用标准Linux文件系统调用在不同的文件系统中进行交互和操作. VFS作为抽象层: 文件系统被安装在一个特定的安装点上,该安装点在全局层次结构中被称作命名空间, 所有的已安装文件系统都作为根文件系统树的枝叶出现在系统中. 文件系统主要的对象: 超级块对象:代表一个已安装文件系统:struct super_block {} 索引节点对象:代表一个文件:stru…
VFS的任务并不简单.一方面,它用来提供了一种操作文件.目录及其他对象的统一方法.另一方面,它必须能够与各种方法给出的具体文件系统的实现达成妥协,这些实现在具体细节.总体设计方面都有一些不同之处. 文件系统类型 基于磁盘的文件系统 虚拟文件系统 网络文件系统 通用文件模型 在处理文件时,内核空间和用户空间使用的主要对象是不同的.对用户程序来说,一个文件由一个文件描述符标识.内核处理文件的关键是inode. inode 目录只是一个特殊的文件. inode的成员可能分为下面两类. 描述文件状态的元…
内存管理学习笔记 页 页是内核管理内存的基本单位,内存管理单元(MMU,管理内存并把虚拟地址转化为物理地址的硬件)通常以页为单位进行处理,从虚拟内存的角度看,页就是最小单位. struct page{ unsigned long flags; atomic_t _count; atomic_t _mapcoount; unsigned long private; struct address_space *mapping; pgoff_t index; struct list_head lru;…
虚拟文件系统(VFS)是linux内核和具体I/O设备之间的封装的一层共通访问接口,通过这层接口,linux内核可以以同一的方式访问各种I/O设备. 虚拟文件系统本身是linux内核的一部分,是纯软件的东西,并不需要任何硬件的支持. 1. 虚拟文件系统的作用 虚拟文件系统(VFS)是linux内核和存储设备之间的抽象层,主要有以下好处. - 简化了应用程序的开发:应用通过统一的系统调用访问各种存储介质 - 简化了新文件系统加入内核的过程:新文件系统只要实现VFS的各个接口即可,不需要修改内核部分…
中断与中断处理 何为中断? 一种由设备发向处理器的电信号 中断不与处理器时钟同步,随时可以发生,内核随时可能因为中断到来而被打断. 每一个中断都有唯一一个数字标志,称之为中断线(IRQ) 异常是由软件产生,与处理器时钟同步. 中断处理程序 由内核调用来响应中断 运行于中断上下文 中断的执行不可阻塞 中断处理分为两个部分,中断处理程序是上半部(top half),还有下半部(bottom halves) 中断处理程序注册 中断处理程序是管理硬件驱动程序的组成部分,如果设备使用中断,其相应的驱动程序…
块I/O层 基本概念 系统中可以随机访问固定大小数据片的硬件设备称做块设备,这些固定大小的数据片称之为块.还有一种基本的设备称之为字符设备,其需要按照顺序访问,比如键盘. 扇区:块设备中最小的寻址单元称为扇区,扇区是块设备的物理属性. 块: 文件系统最小的逻辑可寻址单元.是文件系统的一种抽象. 缓冲区: 当一个快被调入内存时候,存在一个缓冲区中.每个缓冲区与一个块对应,相当于磁盘块在内存中的表示. 缓冲区头: 每个缓冲区都有一个描述符 buffer_head ,用来描述内核处理数据时的相关控制信…
# 下半部笔记 1. 软中断 软中断实现 软中断是在编译期间静态分配,其结构如下所示,结构中包含一个接受该结构体指针作为参数的action函数. struct softirq_action{ void (*action)(struct softirq_action *); } 在kernel/softirq.c中定义了一个包含32个结构体的数组,每个数组成员都是一个被注册的软中断,数组如下所示: static struct softirq_action softirq_vec[NR_SOFTIR…
定时器与时间管理笔记 内核中的时间 时钟中断:内核中的系统定时器以某种频率触发中断,该频率可以通过编程预定. 节拍率HZ:时钟中断的频率称为节拍率. 节拍:相邻两次中断的时间间隔称为节拍,1/节拍率. 节拍率HZ 系统定时器的节拍率是通过静态预处理定义的,也就是HZ值,在系统启动时按照HZ值对硬件进行设置.比如,x86系统的HZ默认值为100,即每10ms触发一次时钟中断. jiffies 该全局变量用来记录自系统启动以来产生的节拍数总数.在启动时,内核将该值初始化为0,每次时钟中断该值都会增加…
Linux内核设计与实现之虚拟文件系统的读书笔记 虚拟文件系统(VFS) 为用户空间提供了文件和文件系统相关的接口. 文件系统抽象层 内核在底层文件系统上建立了一个抽象层, 该抽象层使Linux能够支持各种文件系统; VFS提供了一个通用的文件模型; 解析用户空间执行一个write函数的过程: ret = write(fd, buf, len); 该系统调用将buf指针指向的长度为len字节的数据写入文件描述符fd对应的文件的当前位置; 首先被通用系统调用sys_write函数处理, 找到fd所…
内核简介  本篇简单介绍内核相关的基本概念. 主要内容: 单内核和微内核 内核版本号 1. 单内核和微内核   原理 优势 劣势 单内核 整个内核都在一个大内核地址空间上运行. 1. 简单.2. 高效:所有内核都在一个大的地址空间上,所以内核各个功能之间的调用和调用函数类似,几乎没有性能开销. 一个功能的崩溃会导致整个内核无法使用. 微内核 内核按功能被划分成各个独立的过程.每个过程独立的运行在自己的地址空间上. 1. 安全:内核的各种服务独立运行,一种服务挂了不会影响其他服务. 内核各个服务之…
<Linux内核设计与实现>课本第三章自学笔记 进程管理 By20135203齐岳 进程 进程:处于执行期的程序.包括代码段和打开的文件.挂起的信号.内核内部数据.处理器状态一个或多个具有内存映射的内存地址空间或执行线程等其他资源. 线程:是在进程中活动的对象.每个线程都有一个独立的程序计数器.进程栈和一组进程寄存器.内核调度的对象是线程而非进程.操作系统中进程提供两种虚拟机制:虚拟存储器和虚拟内存. 程序:本身并不是进程,进程是处于执行期的程序以及相关的资源的总称.不同的进程可以执行同一个程…
读完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!!!). 为了方便以后查看, 做个<Linux内核设计与实现>读书笔记 的目录: <Linux内核设计与实现>读书笔记(一)-内核简介 <Linux内核设计与实现>读书笔记(二)- 内核开发的准备 <Linux内核设计与实现>读书笔记(三)- Linux的进程 <Linux内核设计与实现>读书笔记(四)- 进程的调度 <Linux内核设计与实…
本章主要讨论与linux的设备驱动和设备管理的相关的4个内核成分,设备类型,模块,内核对象,sysfs. 主要内容: 设备类型 内核模块 内核对象 sysfs 总结 1. 设备类型 linux中主要由3种类型的设备,分别是: 设备类型 代表设备 特点 访问方式 块设备 硬盘,光盘 随机访问设备中的内容 一般都是把设备挂载为文件系统后再访问 字符设备 键盘,打印机 只能顺序访问(一个一个字符或者一个一个字节) 一般不挂载,直接和设备交互 网络设备 网卡 打破了Unix "所有东西都是文件"…
内核调试的难点在于它不能像用户态程序调试那样打断点,随时暂停查看各个变量的状态. 也不能像用户态程序那样崩溃后迅速的重启,恢复初始状态. 用户态程序和内核交互,用户态程序的各种状态,错误等可以由内核来捕获并显示. 而内核是直接和硬件交互的,内核出错之后整个系统就无法正常运行了,所以要想熟练的进行内核调试, 首先要熟悉内核已经给我们提供的工具,然后实实在在的去做一些内核功能的开发,在开发的过程中不断熟悉内核代码,增加内核调试的经验. 主要内容: 内核调试的难点 内核调试的工具和方法 总结 1. 内…
转自:http://www.cnblogs.com/wang_yb/p/3514730.html 读完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!!!). 为了方便以后查看, 做个<Linux内核设计与实现>读书笔记 的目录: <Linux内核设计与实现>读书笔记(一)-内核简介 <Linux内核设计与实现>读书笔记(二)- 内核开发的准备 <Linux内核设计与实现>读书笔记(三)- Linux的进程 &…
<Linux内核设计与实现>课本第四章自学笔记 进程调度 By20135203齐岳 4.1 多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统.多任务操作系统使多个进程处于堵塞或者睡眠状态,实际不被投入执行,这些任务尽管位于内存,但是并不处于可运行状态. 多任务系统分为两种: 抢占式多任务:Linux提供了抢占式的多任务模式,由调度程序来决定什么时候停止一个进程的运行. 现代操作系统提供:动态时间片计算的方式:可配置的计算策略 非抢占式多任务:除非进程自己主动停止运行,否则会一直…
<Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保证了系统的稳定和安全. 实现多任务和虚拟内存.保证良好的稳定性和安全性. 系统调用是用户空间访问内核的唯一手段:除异常和陷入外,是内核唯一合法的入口. API.POSIX和C库 应用程序通过在用户空间实现的应用编程接口(API)而非直接通过系统调用来编程. POSIX是应用编程接口的一个国际标准,C库提供了P…
linux内核的移植性非常好, 目前的内核也支持非常多的体系结构(有20多个). 但是刚开始时, linux也只支持 intel i386 架构, 从 v1.2版开始支持 Digital Alpha, Intel x86, MIPS和SPARC(虽然支持的还不是很完善). 从 v2.0版本开始加入了对 Motorala 68K和PowerPC的官方支持, v2.2版本开始新增了 ARMS, IBM S390和UltraSPARC的支持. v2.4版本支持的体系结构数达到了15个, v2.6版本支…
<Linux内核设计与实现>Chapter 3 读书笔记 进程管理是所有操作系统的心脏所在. 一.进程 1.进程就是处于执行期的程序以及它所包含的资源的总称. 2.线程是在进程中活动的对象. 3.进程提供两种虚拟机制:虚拟处理器和虚拟内存. 4.内核调度的对象是线程,而不是进程. 二.进程描述符及任务结构 内核把进程的列表存放在叫做任务队列的双向循环链表中.链表中的每一项都是类型为task_struct的进程描述符结构,该结构定义在<linux/sched.h>文件中. 1.分配进…
转自:http://www.cnblogs.com/wang_yb/archive/2013/05/23/3095907.html 内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己来解决(用户空间的内存错误可以抛给内核来解决). 所有内核的内存管理必须要简洁而且高效. 主要内容: 内存的管理单元 获取内存的方法 获取高端内存 内核内存的分配方式 总结 1. 内存的管理单元 内存最基本的管理单元是页,同时按照内存地址的大小,大致分为3个区. 1.1 页 页的大小与体系结构有关,…
Linux内核设计与实现  读书笔记: http://www.cnblogs.com/wang_yb/tag/linux-kernel/ <深入理解LINUX内存管理> http://blog.csdn.net/yrj/article/category/718110 Linux内存管理和性能学习笔记(一) :内存测量与堆内存  第一篇 内存的测量 2.1. 系统当前可用内存 # cat /proc/meminfoMemTotal:        8063544 kBMemFree:      …
大学跟老师做嵌入式项目,写过I2C的设备驱动,但对Linux内核的了解也仅限于此.Android系统许多导致root的漏洞都是内核中的,研究起来很有趣,但看相关的分析文章总感觉隔着一层窗户纸,不能完全理会.所以打算系统的学习一下Linux内核.买了两本书<Linux内核设计与实现(第3版)>和<深入理解Linux内核(第3版)> 0x00 一些废话 面向对象思想. Linux内核虽然是C和汇编语言写的,没有使用面向对象的语言,但里面却包含了大量面向对象的设计.比如可以把内核中的进程…
<Linux内核设计与实现>第四章学习笔记           ——进程调度 姓名:王玮怡  学号:20135116 一.多任务 1.多任务操作系统的含义 多任务操作系统就是能同时并发地交互执行多个进程的操作系统. 无论在单处理器或者多处理器机器上,多任务操作系统都能使多个进程处于堵塞或者睡眠状态,也就是说,实际上不被投入执行,直到工作确实就绪. 相反,这些进程利用内核阻塞自己,直到某一事件(键盘输入.网络数据.过一段时间等)发生. 2.多任务操作系统的分类 非抢占式多任务 抢占式多任务 3.…
<Linux内核设计与实现>第八周读书笔记——第四章 进程调度 第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有通过调度程序的合理调度,系统资源才能最大限度地发挥作用,多进程才会有并发行的效果. 调度程序没有太复杂的原理,最大限度地利用处理器时间的原则是只要有可以执行的进程,那么就总会有进程正在执行,但是只要系统中可运行的进程的数目比处理器的个数多,就注定某一给定时刻会有一些进程不…
<Linux内核设计与实现>第六周读书笔记——第三章 20135301张忻估算学习时间:共2.5小时读书:2.0代码:0作业:0博客:0.5实际学习时间:共3.0小时读书:2.0代码:0作业:0博客:1.0耗时估计的公式:Y=X+X/N ,Y=X-X/N 第3章 进程管理20 3.1 进程20 进程就是处于执行期的程序(目标码存放在某种存储介质上),但进程并不仅仅局限于一段可执行程序代码.通常进程还要包含其他资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存…
                                                                    <Linux内核设计与实现>第四章学习笔记——进程调度 姓名:高艺桐  学号:20135109 一.多任务 1.多任务操作系统的含义 多任务操作系统就是能同时并发地交互执行多个进程的操作系统. 无论在单处理器或者多处理器机器上,多任务操作系统都能使多个进程处于堵塞或者睡眠状态,也就是说,实际上不被投入执行,直到工作确实就绪. 相反,这些进程利用内核阻塞自己,直…
<Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡  学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态链接和TCP/IP网络的现代化操作系统 1.主要发展过程   1969年,贝尔实验室的程序员们设计了一个文件系统原型,最终发展演化成了Unix 1971年,Unix被移植到PDP-11型机中 1973年,整个Unix系统使用C语言进行重写,为后来Unix系统的广泛移植铺平了道路 Unix第六版(V6)被贝尔实…
<Linux内核设计与实现>读书笔记--第一二章 20135301张忻 估算学习时间:共2小时 读书:1.5 代码:0 作业:0 博客:0.5 实际学习时间:共2.5小时 读书:2.0 代码:0 作业:0 博客:0.5 耗时估计的公式:Y=X+X/N ,Y=X-X/N 第一章 Linux内核简介 1.1 Unix的历史 由于Unix系统设计简洁并且在发布时提供源代码,所以许多其他组织和团体都对它进了进一步的开发. Unⅸ虽然已经使用了40年,但计算机科学家仍然认为它是现存操作系统中最强大和最优…