
linux内核
文章平均质量分 83
AXW2013
这个作者很懒,什么都没留下…
展开
-
linux内核创建线程
1.头文件#include //wake_up_process()#include //kthread_create()、kthread_run()#include //IS_ERR()、PTR_ERR()2.实现2.1创建线程在模块初始化时,可以进行线程的创建。使用下面的函数和宏定义:struct task_struct *kthread_cre转载 2017-02-16 15:04:47 · 927 阅读 · 0 评论 -
malloc_stats---检查内存泄露的神器
在之前的博客中提到过,valgrind可以用来检测内存泄露,但在使用中,往往会遇到一些问题,给调试工作带来很多不必要的麻烦,我自己遇到的有以下两种: (1)内存泄露误检(系统初始化时,可能有一些需要长期保存在内存中的数据结构,这些空间是永远不释放的,而这些内存会被认为绝对泄露) (2)valgrind检查内存泄露过于全面,运行后的结果太多往往很难从中找到有用的信息。有时转载 2017-07-15 19:35:31 · 743 阅读 · 0 评论 -
Linux文件读写机制及优化方式
本文只讨论Linux下文件的读写机制,不涉及不同读取方式如read,fread,cin等的对比,这些读取方式本质上都是调用系统api read,只是做了不同封装。以下所有测试均使用open, read, write这一套系统api缓存缓存是用来减少高速设备访问低速设备所需平均时间的组件,文件读写涉及到计算机内存和磁盘,内存操作速度远远大于磁盘,如果每次调用read,write都去直转载 2017-08-07 15:42:05 · 584 阅读 · 0 评论 -
基于vfs实现自己的文件系统
转载自微信公众号-linux内核之旅1.Linux 文件系统组成结构linux文件系统有两个重要的特点:一个是文件系统抽象出了一个通用文件表示层——虚拟文件系统或称做VFS。另外一个重要特点就是它的文件系统支持动态安装(或说挂载等),大多数文件系统都可以作为根文件系统的叶子节点被挂在到根文件目录树下的子目录上。1.1.虚拟文件系统虚拟文件系统为用户空间程序提供了文件系统接口。系统中...转载 2017-12-18 10:13:54 · 1362 阅读 · 5 评论 -
Linux物理内存管理概述
文章转自:http://edsionte.com/techblog/archives/3937在内核态申请内存比在用户态申请内存要更为直接,它没有采用用户态那种延迟分配内存技术。内核认为一旦有内核函数申请内存,那么就必须立刻满足该申请内存的请求,并且这个请求一定是正确合理的。相反,对于用户态申请内存的请求,内核总是尽量延后分配物理内存,用户进程总是先获得一个虚拟内存区的使用权,最终通过缺页转载 2017-12-18 14:04:45 · 532 阅读 · 0 评论 -
请求页框API简介
转自edsionte's TechBlog在用户态下程序中,我们可以通过malloc()动态申请内存空间。在内核空间中,专门有一个内核子系统处理对连续页框的内存分配请求,这个内核子系统即为管理区页框分配器(zoned page frame allocator)。该分配器包含六个专门用于分配页框的API,这些API都是基于伙伴算法而实现的,因此这些API申请的原创 2017-12-18 15:36:18 · 431 阅读 · 0 评论 -
深入探索 Kdump
Kdump 的基本概念什么是 kexec ?Kexec 是实现 kdump 机制的关键,它包括 2 个组成部分:一是内核空间的系统调用 kexec_load,负责在生产内核(production kernel 或 first kernel)启动时将捕获内核(capture kernel 或 sencond kernel)加载到指定地址。二是用户空间的工具 kexec-tools,他转载 2018-02-06 14:33:01 · 295 阅读 · 0 评论 -
深入探索 Kdump,第 3 部分
Kdump 原理探秘韩 平天, 李 骅宸, 和 王 生辉2012 年 10 月 11 日发布WeiboGoogle+用电子邮件发送本页面 0系列内容:此内容是该系列 3 部分中的第 3 部分: 深入探索 KdumpKdump 实现的基本原理转载 2018-02-06 15:07:34 · 859 阅读 · 0 评论 -
Linux Watchdog Daemon - Configuring
Back to PSC's home pageBack to WatchdogThere are a number of tests and options that can be configured for the watchdog daemon, and this page is still "work in progress" to describe them. Typically the...转载 2018-02-28 11:44:01 · 2160 阅读 · 0 评论 -
内核内存检测工具memleak的使用方式
Kmemleak 提供了一种可选的内核泄漏检测,其方法类似于跟踪内存收集器使用Kmemleak需要在内核中将CONFIG_DEBUG_KMEMLEAK使能(默认未使能,因此使用该功能会涉及替换内核)。 1. 将内核默认.config文件拷贝到源码目录下。cd linux-3.10.0-327.el7cp /boot/config-3.10.0-327.el7.x86_64 .config .2...原创 2018-03-18 19:19:30 · 8226 阅读 · 0 评论 -
通过内核模块设置服务器看门狗的方法
1. 安装用户态程序安装watchdog的用户态的rpm包。如centos7系统的rpm包如下:watchdog-5.13-11.el7.src.rpm链接:点击打开链接 2. 修改service文件打开/usr/lib/systemd/system/watchdog.service添加ExecStartPre=/usr/sbin/...原创 2018-03-18 18:36:26 · 6767 阅读 · 2 评论 -
字符设备
1. 字符设备结构体 内核中所有已分配的字符设备编号都记录在一个名为 chrdevs 散列表里。该散列表中的每一个元素是一个 char_device_struct 结构,它的定义如下: static struct char_device_struct { struct char_device_struct *next; // 指向散列冲突链表中的下一转载 2017-05-10 11:31:56 · 324 阅读 · 0 评论 -
Linux内核模块(驱动)编译详解
本文主要说说如何编译自己开发的内核模块。由于驱动通常也被编译成内核模块,因此文章的内容也适用于驱动的编译。由于在下能力相当有限,有不当之处,还望大家批评指正^_^一、准备工作准备工作如何做,这里就不详说了。a) 首先,你要有一台PC(这不废话么^_^),装好了Linux。b) 安装好GCC(这个指的是host gcc,用于编译生成运行于pc机程序的)、m转载 2017-05-09 16:08:22 · 1367 阅读 · 0 评论 -
Linux内核中读写文件
Linux内核中读写文件数据的方法 有时候需要在Linuxkernel--大多是在需要调试的驱动程序--中读写文件数据。在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主要有: filp_open() filp_close(), vfs_read()vfs_write(),set_fs(),get_fs()等,这些函数在linux/fs.h和asm/u转载 2017-05-17 15:48:48 · 430 阅读 · 0 评论 -
Linux文件系统预读(二)
前一篇文章仔细描述了最简单的一种预读情况:单进程文件顺序读,且读大小不超过32页面,这里我们来看另外一种情境:单进程文件顺序读,读大小为256KB,看看预读逻辑如何处理这种情况,照例首先给出事例代码:[cpp] view plain copyprint?{ ... f = open("file", ....);转载 2017-02-16 15:13:13 · 823 阅读 · 0 评论 -
Linux文件系统预读(一)
本博客主要阐述最新内核(Linux-3.12)的文件系统预读及时的设计和实现,可能有理解不全面的地方,望各位能多多指教。 所谓预读,是指文件系统为应用程序一次读出比预期更多的文件内容并缓存在page cache中,这样下一次读请求到来时部分页面直接从page cache读取即可。当然,这个细节对应用程序透明,应用程序可能的感觉唯一就是下次读的速度会更快,当然这是好事。转载 2017-02-15 09:05:32 · 2151 阅读 · 0 评论 -
Linux文件系统预读(三)
前面两篇关于文件系统的预读我们通过实例阐述了应用程序的顺序读而触发操作系统对文件大小预取情况,本篇博客我们主要描述预读如何解决交织读的问题。所谓的交织读指的是多线程(进程)读同一个打开的文件描述符,单个线程的顺序读在操作系统看来可能会变成随机读。同样我们还是结合实例来分析。事例代码[cpp] view plain copyprint?{转载 2017-02-16 15:16:43 · 882 阅读 · 0 评论 -
Linux内核实践之工作队列
工作队列(work queue)是另外一种将工作推后执行的形式,它和tasklet有所不同。工作队列可以把工作推后,交由一个内核线程去执行,也就是说,这个下半部分可以在进程上下文中执行。这样,通过工作队列执行的代码能占尽进程上下文的所有优势。最重要的就是工作队列允许被重新调度甚至是睡眠。 那么,什么情况下使用工作队列,什么情况下使用tasklet。如果推后执行的任务需转载 2017-03-21 09:26:04 · 410 阅读 · 0 评论 -
linux 内核工作队列
Workqueue 是内核里面很重要的一个机制,特别是内核驱动,一般的小型任务 (work) 都不会自己起一个线程来处理,而是扔到 Workqueue 中处理。Workqueue 的主要工作就是用进程上下文来处理内核中大量的小任务。所以 Workqueue 的主要设计思想:一个是并行,多个 work 不要相互阻塞;另外一个是节省资源,多个 work 尽量共享资源 ( 进程、调度、内存 ),不要转载 2018-06-28 14:41:12 · 658 阅读 · 0 评论 -
linux内核工作队列
Workqueue 是内核里面很重要的一个机制,特别是内核驱动,一般的小型任务 (work) 都不会自己起一个线程来处理,而是扔到 Workqueue 中处理。Workqueue 的主要工作就是用进程上下文来处理内核中大量的小任务。所以 Workqueue 的主要设计思想:一个是并行,多个 work 不要相互阻塞;另外一个是节省资源,多个 work 尽量共享资源 ( 进程、调度、内存 ),不要原创 2017-03-28 10:37:58 · 837 阅读 · 0 评论 -
虚拟文件系统——VFS
#超级块对象(superblock object)存放已经安装文件系统的有关信息。对基于磁盘的文件系统,这类对象通常对应于存放在磁盘上的文件系统控制块(filessystem control block)。所有超级块对象都以双向循环链表的形式链接在一起。链表中第一个元素用super_blocks变量来表示,而超级块对象的s_list字段存放指向链表相邻元素的指针。sb_lock自旋锁保护链原创 2017-03-22 10:11:07 · 787 阅读 · 0 评论 -
Linux内核之rbtree(红黑树)
red-black tree(RB树)是一种平衡二叉树,它主要用于存储或者说索引可排序的键值对数据。RB树(红黑树)与radix树和hash表都不同。radix树是一种比较适合用于存储稀疏的数据集而且将用一个大整数进行插入,删除,查找的操作基础。而hash表并不是以某种排序顺序进行存储,而且必须指定大小和hash函数。 RB树与AVL树很相似,但是比AVL树有更好的插入和删除最坏情况的时原创 2016-12-23 20:34:39 · 2960 阅读 · 1 评论 -
编译替换内核(两种方式)
通过源码的方式替换1. 获取内核源码获取内核源码的路径:https://www.kernel.org/pub/linux/kernel/2. 解压内核源码解压内核源码到路径/usr/src/kernels/3. Make mrproperMake mrproper的作用是在每次配置并重新编译内核前执行该命令。将会清理源代码树,包括过去曾经配置的内核配置文件“.conf原创 2017-04-01 10:12:03 · 4890 阅读 · 0 评论 -
linux内核读写文件
1. 序曲在用户态,读写文件可以通过read和write这两个系统调用来完成(C库函数实际上是对系统调用的封装)。 但是,在内核态没有这样的系统调用,我们又该如何读写文件呢?阅读Linux内核源码,可以知道陷入内核执行的是实际执行的是sys_read和sys_write这两个函数,但是这两个函数没有使用EXPORT_SYMBOL导出,也就是说其他模块不能使用。在fs/open.c中系统转载 2017-05-08 15:49:54 · 463 阅读 · 0 评论 -
KVM模块单独编译(适合调试)
当前系统环境:CentOS Linux release 7.2.1511 (Core)在说kvm模块单独编译之前,难免设计到linux内核模板的编写,所以这里也稍微提一下。1linux内核模块环境搭建这里有2种方法:1.1 升级内核:升级当前系统的kernel,具体编译步骤这里不再详细说明,简单表述一下:如果想在当前的linux系统上面,不用修改配置文件来编译内核,就将/boot/config-*...转载 2018-05-02 19:21:32 · 1459 阅读 · 0 评论