Linux内核源码分析
文章平均质量分 90
Linux内核源码分析与总结
ppingfann
这个作者很懒,什么都没留下…
展开
-
初次编写linux内核模块碰到的问题
最近学习linux内核的东西,尝试去编写一个简单的内核模块。但在编写、运行的过程中碰到了许多“坑“,就在此以作记录。原创 2016-10-09 19:28:02 · 567 阅读 · 0 评论 -
块IO层(Linux内核源码分析)
背景本篇博客重点分析块IO层,试图了解在linux源码中是如何实现块IO的。基本知识块设备与字符设备块设备与字符设备都是物理外设。简单来说,块设备与字符设备的最大区别在于块设备都随机对数据片段进行读写的,而字符设备都以顺序对数据片段进行读写的。 比如磁盘、CD-ROM盘、闪存就属于块设备。键盘、串口属于字符设备。扇区与块扇区是块设备的最小寻址单元,也就是说,是物理上的最小单元。而块则不同,块是文件原创 2017-07-08 23:32:34 · 2887 阅读 · 0 评论 -
内存管理(Linux内核源码分析)
背景本篇博客试图通过linux内核源码分析linux的内存管理机制,并且对比内核提供的几个分配内存的接口函数。然后聊下slab层的用法以及接口函数。内核分配内存与用户态分配内存内核分配内存与用户态分配内存显然是不同的,内核不可以像用户态那样奢侈的使用内存,内核使用内存一定是谨小慎微的。并且,在用户态如果出现内存溢出因为有内存保护机制,可能只是一个报错或警告,而在内核态若出现内存溢出后果就会严重的多(原创 2017-07-12 10:03:53 · 18047 阅读 · 0 评论 -
ext4日志系统分析(二)
一、背景上篇博客介绍了jbd2模块的安装与卸载。同时也讲了安装时初始化函数会在/proc/fs下创建一个jbd2目录。这篇博客打算介绍一下在jbd2模块被安装后内核是如何对日志系统进行初始化的,以及jbd2目录下的文件是从哪里来的。这里所涉及的东西较多,所以我只挑重点功能函数来讲。二、jbd2目录不知道大家还记得吗,上一篇博客我提到在安装jbd2模块时,内核会在/proc/fs下创建一个jbd2目录原创 2017-05-17 08:49:30 · 5638 阅读 · 0 评论 -
ext4日志系统分析(一)
一、背景ext4文件系统用的是jbd2日志系统。本篇博客从内核源码着手,大致分析jbd2日志系统。二、源码分析我这里用的是source insight工具来分析linux内核的源码。 内核版本为3.10.0。 首先我们搜索一下jbd2关键字。可以看到如下图所示: 可以看到,在fs/jbd2中存在6个文件。这个fs/jbd2中存的就是jbd2日志系统的代码。 一步一步来,先看看插入jbd2原创 2017-04-22 22:49:48 · 8471 阅读 · 0 评论 -
使用U盘传数据时操作系统做了什么(源码分析)
一、背景学习linux文件系统时考虑一个具体的问题:我们经常会用U盘传输东西到计算机中。当我们把U盘插入到一台计算机上,并且从U盘中复制文件到计算机里,然后卸载U盘,将U盘拔出。操作系统在这一连串过程中做了些什么?这篇博客仅从文件系统的角度利用linux内核源码浅析该过程。本篇博客使用的linux内核版本为3.10.0。二、文件系统基础1.文件系统在开始之前我想先简单介绍一下文件系统的基础知识。原创 2017-03-24 09:24:27 · 750 阅读 · 0 评论 -
内核中的同步
一、内核中同步的问题假设我们把内核比作一个服务器(我是说假设),那么正在CPU上运行的进程、发出中断请求的外部设备就相当于一个客户端,客户端不断访问服务器,时间也不一定。就像是服务器会相应客户端的请求一样,内核也会响应进程与外设的请求。但同样,时间也不一定,请求的顺序也不一定。内核中有许多的共享资源,这些资源可以被不同进程所访问。这时候就会出现一个“管理”的问题。就像是大学中的班级占用教室上课一样也原创 2017-04-09 22:34:25 · 543 阅读 · 0 评论 -
linux内核中的list.h文件中哈希表的分析
一、背景 本篇文章将先从对哈希表的基本介绍开始,然后分析linux内核(3.10.0版)中的list.h文件中的哈希表。二、简述哈希表 根据设定的哈希函数H(key)和处理冲突的方法将一组关键字映像到一个有限的连续的地址集上,并以关键字在地址集中的“像”作为记录在表中的存储位置,这种表便称为哈希表。 上面这一段是从一本教材中摘抄出来的对哈希表的一段描述。原创 2016-11-17 16:16:58 · 2764 阅读 · 0 评论 -
linux内核中的list.h文件中线性链表的分析(一)
一、背景初次接触linux内核,从最简单的数据结构,线性表结构开始学习。使用cd命令进入/usr/src/kernel/3.10.0-229.el7.x86_64/include/linux中,找到其中的list.h文件并分析它。二、分析过程1、初始化链表头我们可以看到这里有两个宏定义。第一个是带有变量的宏定义。第二个宏定义使用了第一个宏定义LIST_HEAD_INIT(nam原创 2016-09-21 13:55:25 · 598 阅读 · 0 评论 -
linux内核中的list.h文件中线性链表的分析(二)
5、结点的移动 第一个函数为将list从列表中删除,并且将list添加到head的后面。 第二个函数为将list从列表中删除,并且将list添加到head的前面。6、测试结点是否是链表尾、测试链表是否为空 第一个函数测试结点的下一个结点是否是头结点,若是头结点,则表示此结点为尾。 第二个函数测试链表是否为空。若头结点的下一个结点是其本身,原创 2016-11-03 09:18:38 · 450 阅读 · 0 评论 -
进程地址空间(Linux内核源码分析)
背景之前写过关于内存管理源码分析的博客。大体介绍了什么是页、区、slab缓存,以及内核获取、释放页的接口,分配、释放slab缓存的接口。进程地址空间简单的说就是用户空间中进程的内存,我们叫这内存为进程地址空间。本篇博客借助linux源码大体分析进程地址空间的相关知识。进程控制块既然我们要聊一聊进程地址空间,那么不可避免的就要先聊一下进程控制块,进程控制块的概念想必大家不会陌生。一个进程是由一个进程控原创 2017-07-23 11:02:55 · 2818 阅读 · 0 评论