自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jasonLee的博客

保持饥饿

  • 博客(173)
  • 资源 (1)
  • 收藏
  • 关注

原创 filebench查看每个负载的参数特性

下面是filebench中fileserver的负载设置;通过观察负载设置,找到有用的设置信息;在readfile中,iosize=$iosize,表示读操作的IO size;在appendfile中,iosize = $meanappendsize,表示写操作的IO size;set $filesize=cvar(type=cvar-gamma,parameters=mean:1310...

2019-04-16 14:55:00 1513

原创 虚表指针初始化顺序

无继承时:1、分配内存2、初始化列表之前赋值虚表指针3、列表初始化4、执行构造函数体有继承时:1、分配内存2、基类构造过程(按照无继承来)3、初始化子类虚表指针4、子类列表初始化5、执行子类构造函数体Q:虚表指针在初始化列表之前被赋值,可以放在初始化列表之后赋值吗?即顺序是:列表初始化、虚表指针赋值、构造函数体??class B{public: virtual int...

2019-04-07 18:30:05 2925

原创 编译内核出现:cc1: error: code model kernel does not support PIC mode

2018-11-30 14:45:33 22131 16

原创 terminal开启多个窗口并切换

1、正常方式打开一个terminalCtrl + Alt + T2、同一个terminal开启另一个窗口Ctrl + shift + T3、切换窗口切换第一个窗口Alt + 1切换第二个窗口Alt + 2切换第n个窗口Alt + n...

2018-11-29 10:18:37 14510 3

原创 gem5 FS模式下mount文件到shell

下面是根据我自己的实际情况,写一点总结。教程:1、挂载linux-x86.imgmount -o loop,offset=32256 linux-x86.img /mnt2、看看/mnt目录下是否有内容,有内容则挂载成功ls /mnt3、把要传输的文件拷贝到/mnt目录下cp ./hello /mnt4、在启动FS模拟之前,确保该loop设备已经被卸载了umount /...

2018-11-28 17:41:58 850

原创 gem5+NVMain联合编译

1.注册bitbucket账号进入官网,注册即可,记住你的用户名及邮箱,在后面会用到。2.获取NVMain使用权打开https://bitbucket.org/mrp5060/nvmain/并登陆bitbucket账号,登陆后重新打开前面这个网站获取下载命令我的命令是:hg clone https://[email protected]/mrp5060/nvmai...

2018-11-27 19:37:57 1057

原创 git clone指定分支的代码

今天想学习一下开源中国Android客户端的app源码,源码的Git地址:http://git.oschina.net/oschina/android-app,如下图所示:由于Master主分支上没有放置源码,因此需要切换到指定的Tag分支去查看,如下图所示:切换到v2.8.1这个分支就可以看到具体的代码了,如下图所示:使用Git下载指定分支命令为:git clone -b 分支名 ...

2018-11-21 16:34:41 4176

原创 GitHub一些基础操作

创建本地分支git branch 新分支创建本地新分支,并切换到新分支git branch -b 新分支查看本地分支git branch查看当前分支信息git status查看日志信息git log查看远程分支git remote -v在远程仓库创建新分支git push origin 新分支———————————————————————————————————————...

2018-11-12 09:58:03 248

原创 kmalloc和vmalloc的区别

kmalloc和vmalloc完全不同。kmallockmalloc申请一段物理地址和逻辑地址连续的内存空间。 /* 申请一段物理地址连续的内存空间 */static __always_inline void *kmalloc(size_t size, gfp_t flags){ if (__builtin_constant_p(size)) { if (size > KMA...

2018-11-02 09:39:05 2516 2

原创 内核模块中使用未导出的函数

一般我们在编写内核模块时,可以直接使用内核中使用EXPORT_SYMBOL或者EXPORT_SYMBOL_GPL导出的函数,没有导出的内核函数不能直接使用。否则会报错未定义:WARNING:“do_sys_open”[/home/tiany/paper/mod/mySdelNotEcrypt_success/hello.ko]undefined!那么我们到底能不能使用内核中没有导出的函数呢?答...

2018-10-16 15:39:07 3262 3

原创 内存管理---匿名页面管理

一、匿名页面这些内存页面保存了一些通常所说的机动性最强的内容,或者可以认为是银行的活期存款,这些内存可以随时被使用,随时被归还。例如用户通过malloc–>>mmap申请的内存,或者通过brk/sbrk扩大的堆空间。相对于mmap文件、文件系统元数据之类的内容,这些空间对用户来说最为顺手,也最为常见。但是管理起来也比较复杂,因为这里涉及到这些页面如果被同时使用了很多,系统内存负载将会...

2018-10-16 09:50:43 3142

原创 Linux swap详解

推荐一篇blog,写的十分详细。特别是里面的流程图对于理解整个swap有很大的帮助。http://tinylab.org/linux-swap-and-zramfs/简介内存管理基本概念内存管理区 Struct ZonePFN(Page Frame Number)页 Struct PagePTE 与 VMA内存回收匿名页的内存回收 - 交换Zram 交换技术...

2018-10-15 21:13:16 1753

原创 F2FS:struct curseg_info结构

F2FS在运行时,F2FS在“Main Area”区域管理6个活跃的log,分别是Hot/Warm/Cold node log和Hot/Warm/Cold data logs,每一个log对应着一个独立的segment。Hot node : contains direct node blocks of directories.Warm node : contains dir...

2018-10-08 21:10:38 1014

原创 f2fs读取磁盘block过程:do_read_inode

f2fs:依据inode的节点号,将inode对应的block读到页缓存f2fs_iget依据索引节点号,查找对应的inode,若没有,则创建一个新的inode,读取磁盘上的inode所在的block,生成f2f2_inode对象去初始化这个新inode。其中,当inode不存在时,需要创建新的inode,同时还要从磁盘上读取inode所在的block;因此,这次主要针对f2fs读取磁盘bl...

2018-10-08 17:16:00 2260 2

原创 inode_hashtable哈希表及f2fs查找inode过程

文件系统中的所有inode存放在一个名为inode_hashtable的全局哈希表中。另一方面,所有的inode还存放在超级块中的s_inode链表中。inode_hashtable哈希表加快了对索引节点对象的搜索。前提是必须知道索引节点号和文件所在文件系统对应的超级块对象。该inode_table位于fs/inode.c中:static unsigned int i_hash_mask ...

2018-10-08 16:50:31 1505

原创 普通文件和块设备文件的page cache问题

注:本文代码基于linux-3.18.31,此版本中块缓存已经合入页缓存。写在前面普通文件和块设备文件都有一个address_space对象,inode中分别维护两个成员指向这两个不同的address_space,分别是i_mapping和i_data。需要注意的是,这两个page cache中可能拥有磁盘上相同的数据(即拥有相同的页数据)。struct inode { ………… con...

2018-09-26 17:30:44 1269

原创 bio,request,request_queue的关系

通用块层的核心数据结构称为bio描述符,它描述了块设备的io操作。每一个bio结构都包含一个磁盘存储区标识符(存储区中的起始扇区号和扇区数目)和一个或多个描述与IO操作相关的内存区段(bio_vec数组)bio结构中的字段/* * main unit of I/O for the block layer and lower layers (ie drivers and * stacking...

2018-09-26 11:13:50 2531 1

原创 从文件 I/O 看 Linux 的虚拟文件系统

1 引言Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等。通过使用同一套文件 I/O 系统 调用即可对 Linux 中的任意文件进行操作而无需考虑其所在的具体文件系统格式;更进一步,对文件的 操作可以跨文件系统而执行。如图 1 所示,我们可以使用 cp 命令从 vfat 文件系统格式的硬盘拷贝数据到 ext3 文件系统格式的硬盘;而这样的操作涉及到两个不同的文件...

2018-09-25 10:19:41 334

原创 Linux IO子系统和文件系统读写流程

我们所有分析的,是基于2.6.32及其后的内核.我们在Linux上总是要保存数据,数据要么保存在文件系统里(如ext3),要么就保存在裸设备里。我们在使用这些数据的时候都是通过文件这个抽象来访问的,操作系统会把我们需要的数据提交给我们,而我们则无需和块设备打交道。从下图,我们可以清除的看到:I/O子系统是个层次很深的系统,数据请求从用户空间最终到达磁盘,经过了复杂的数据流动。对设驱开发人...

2018-09-25 09:30:58 1736

原创 container of()函数与拓展

container of原理其实,原理很简单: 已知结构体type的成员member的地址ptr,求解结构体type的起始地址。 type的起始地址 = ptr - size (这里需要都转换为char *,因为它为单位字节)。到此,该函数已经讲完,是不是很简单??? 其实也不是,这里并没有提到size如何计算,而令我们头晕的正是这里。好吧,先上c...

2018-09-19 09:51:25 333 1

原创 local_irq_save和 local_irq_restore关闭和打开中断

如果你要禁止所有的中断该怎么办?在2.6内核中,可以通过下面两个函数中的其中任何一个关闭当前处理器上的所有中断处理,这两个函数定义在 < asm/system.h >中: void local_irq_save(unsigned long flags); void local_irq_disable(void);对 local_irq_save的调用将把当前中...

2018-09-16 11:02:14 2341

原创 struct file中f_mode和f_flags区别

mode_t f_mode:文件模式(FMODE_WRITE,FMODE_READ),用在创建文件时使用它通过FMODE_READ和FMODE_WRITE位来标识文件是否可读或可写,因为内核在调用驱动程序的read和write前已经检查了訪问权限。所以不必为这两个方法检查权限。在没有获得相应訪问权限而打开文件的情况下,对文件的读写操作将被内核拒绝,驱动程序无需为此而作额外的推断。unsig...

2018-09-14 10:52:24 3052

原创 如何编译和更换Linux系统内核

step0 — 完成编译和安装Linux需要的基本条件内核源代码从http://www.kernel.org即可下载代码,注意你需要下载的是完整的源代码包(点击tarball即可下载),而不是patch或change log之类。编译需要的软件编译kernel需要一些基本的develop工具软件,比如make和编译器,当然还有其他一些重要的工具,Debian系列的系统可以用如下...

2018-09-11 11:00:29 20248 1

原创 Linux内核栈信息获取dump_stack()

参考下面这个博客:Linux内核栈信息获取与理解

2018-09-10 15:02:35 969

原创 QEMU挂载磁盘

1、 建一個5G的raw格式的虛擬磁盤,大小根據自己的需要設定。 $ qemu-img create test.img 5G2、接着运行qemu并加载磁盘:$ qemu-system-x86_64 -kernel /usr/src/linux-4.6.2-x86_64/arch/x86/boot/bzImage -initrd ~/Downloads/initramfs.img...

2018-09-07 16:58:55 8496

原创 Linux内核链表原理和实例

深入分析Linux链表链表的实例

2018-09-07 09:25:05 1390

原创 Linux C中struct的初始化允许部分初始化并且支持乱序

在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式。该方式是某些C教材(如谭二版、K&R二版)中没有介绍过的。这种方式称为指定初始化(designated initializer)。 下面我们看一个例子,Linux-2.6.x/drivers/usb/storage/usb.c中有这样一个结构体初始化项目: static struct usb_driver usb...

2018-09-06 17:37:01 1702 2

原创 slab和slub分析

slab分配器slub分配器

2018-09-06 15:15:24 571

原创 文件读写基本流程

读文件1、进程调用库函数向内核发起读文件请求;2、内核通过检查进程的文件描述符定位到虚拟文件系统的已打开文件列表表项;3、调用该文件可用的系统调用函数read()3、read()函数通过文件表项链接到目录项模块,根据传入的文件路径,在目录项模块中检索,找到该文件的inode;4、在inode中,通过文件内容偏移量计算出要读取的页;5、通过inode找到文件对应的addres...

2018-09-06 11:26:53 4442

原创 FTL详细资料

FTL产生过程如果仅仅是SSD的使用者,一定不会在意在SSD内部居然还存在一个复杂的软件层Flash Translation Layer(FTL)。其实就是这个FTL才是SSD固态硬盘的软件核心技术。正因为有了FTL,NAND Flash才能被当成硬盘来使用;文件系统才可以直接把SSD当成普通块设备来使用。由于FTL是SSD设计厂商最为重要的核心技术,因此,没有一家厂商愿意透露这方面的技术信息...

2018-09-04 17:10:58 10320 1

原创 浅谈哈希表(HashTable)——拉链法、哈希桶、Probing探测方法

概述 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f...

2018-08-31 10:31:33 3813 2

原创 内核调试出现value optimized out的问题

最近在用gdb调试内核的过程中经常会有< value optimized out>的提示,首先分析该提示出现的原因,我的理解是可能这些被优化的变量已从内存中被移到了寄存器中,所以会找不到。为了能在调试过程中看到所有的变量,不知道能不把内核编译为-O0?若可以的话,又需要在什么地方来改呢?在所有的CONFIG中,我只发现了一个CONFIG_CC_OPTIMIZE_FOR_SI...

2018-08-27 10:04:59 5490 2

原创 编译内核出现:implicit declaration of function

修改内核,添加了一些函数,重新编译后,出现以下情况:经过查看源码:自定义的page_is_NVM的函数定义位置 在 使用位置 的后面,这在C语言的语法中是错误的;解决方法:在文件首部,添加该函数的声明即可。...

2018-08-24 16:57:22 3925

原创 vim 分屏显示

水平切割::split :split xxx(要打开的文件名) :new(在新窗口创建文件) <CTRL+W>+ k:跳转到上面的窗口 (若为大写K,则是把当前窗口调至上方) <CTRL+W>+ j:跳转到下面的窗口 (类似于上)垂直切割::vsplit :vsplit xxx(要打开的文件名) :vnew(在新窗口创建文件) :only 取...

2018-08-01 15:01:56 788

原创 Ubuntu vimrc配置文件存放位置

Ubuntu如何设置VI 下文对Ubuntu vimrc的设置适用于Ubuntu与Fedora系统,其他系统没有得到验证。 在Ubuntu中vim的配置文件存放在/etc/vim目录中,配置文件名为Ubuntu vimrcUbuntu vimrc已被广泛应用但是也在不断的更新,这里介绍Ubuntu vimrc安装设置使用,帮助大家安装更新Ubuntu vimrc系统。Ubuntu如何设置VI ...

2018-08-01 10:53:42 9175

原创 转载:使用 vim + ctags + cscope + taglist 阅读源码

vim+ctag+cscope+taglist 阅读内核代码利器

2018-08-01 10:12:14 351

原创 VFS中的read/write系统调用

VFS中的read/write系统调用​ VFS所隐含的主要思想在于引入了一个通用的文件模型(common file model),这个模型能够表示所有支持的文件系统。VFS是所有文件系统的抽象。​ linux内核对每个文件读写操作都必须使用一个指针,指向要访问的具体文件系统的适当函数。换句话说,当应用程序对read()或是write()调用引起内核调用相应的sys_read()或...

2018-07-15 14:56:06 1373

原创 QEMU+gdb调试Linux内核全过程

1、编译源码(Linux kernel 4.6.2)make menuconfig执行make menuconfig时报错缺少库文件需要安装依赖库sudo aptitab instab libncurses5-dev首先编译内核,编译内核时注意要选两个选项。(注意:除此之外kernel hacking选项下其他的选项都不要选,否则会出现断点无法拦截的情况。这个说法有待验证)...

2018-07-09 15:41:52 21516 15

原创 linux和Windows下用sublime text3编译运行C,C++

安装MinGW1、首先安装MinGW,默认安装位置是C:\MinGW。2、安装完成后,右键“我的电脑”->属性 ->高级->环境变量,在系统环境变量PATH里添加C:\MinGW\bin;3、 新建LIBRARY_PATH变量,在值中加入C:\MinGW\lib。(标准库位置)4、 新建C_INCLUDEDE_PATH变量,值设为C:\MinGW\include。...

2018-07-03 19:57:52 1645

原创 GCC编译源码出错:Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0

接上篇博客,因为上一篇博客没有解决实际问题,所以这次继续解决问题:之前测试过gcc4.4.0版本,发现不适合这个方法(具体原因,后面会说)。测试版本:gcc4.6.2See Installing GCC: Configuration for the full documentation. A major benefit of running srcdir/configure fro...

2018-07-02 20:34:11 5892

深入Linux内核架构(中文版)

Linux内核学习最经典的数据。本资源是超高清版本,不是影印版本!! Wolfgang Mauerer 资深Linux专家,有数十年Linux开发经验。从1997年最初发表关于内核的系列文章开始,他就醉心于解释Linux核心的内部机制、编写相关的文档。此外,他还著有LaTeX排版方面的图书,其撰写的大量文章已经被翻译成7种语言。

2018-04-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除