自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Cole的专栏

存储、内核、云计算相关

  • 博客(19)
  • 收藏
  • 关注

翻译 The end of block barriers

最近工作中涉及,也有很多人问我journal和barrier的问题,我都推荐他们去看这篇文章,今天把这篇文章翻译出来,方便自己,也方便他人。原文地址:https://lwn.net/Articles/400541/以下是正文: 在刚刚结束的Linux Storageand Filesystem 峰会上通过了一个影响很大的决定:在内核的存储子系统中废除对barrier 的支持。这是个很受

2017-05-01 10:51:58 354

原创 吐槽:Lsi mega Raid安装redhat 5.4

先吐槽一句,真是让人蛋疼菊紧啊。好不容易下了redhat 5.4的ISO, 刻成盘到机房里去装。问题来了,已经从光盘boot起来的redhat识别不到磁盘。那还装个毛啊。其实早就料到了,这台机器用的是LSI的mega Raid卡,redhat 5识别不出来。于是漫长的征程开始了。有个同事挺好心,找了个cent os 6.2 的live 盘,boot起来进去一看,没问题,完美识别。看来6.2的版

2014-05-28 10:21:23 1436

转载 Understanding Linux CPU Load - when should you be worried?

http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages

2014-05-22 17:46:18 471

转载 Firmware 加载原理分析

前言                    前段时间移植 wifi 驱动到 android 的内核上,发现 firmware 的加载始终出错,问了几个人,都不是很了解,没办法,只好自己研究一下。原理分析    从本质上来说, firmware 需要做的事情包括两件:1,  通知用户态程序,我需要下载 firmware 了;2,  用户态程序把用户态的数据 copy 到内核层;

2014-04-03 20:01:06 606

原创 大话中断

中断过程可以说几乎是每次面试都会被问到的问题,而且在平时工作中也是经常遇到的点。这里把相关的问题一起列出来,省得以后再找。同步与异步首先说为什么要用中断,中断是外部设备和CPU交互的方式,相比轮询来说CPU可以解放出来了。但因此带来的问题是,中断可能会在任何时候发生,所以说"中断是异步的"。与之相对应,异常就是同步的。怎么理解这个异步和同步呢?这是指的事件和引起这个事件的程序之间的关系。

2013-10-16 22:51:03 635

原创 Back Trace 的原理

最近做的项目在windows和Linux两种平台上运行,调试分别使用windbg和gdb,虽然平台不同,使用的工具不同,但思路都是一样的,都是先从call trace中查看当前运行到哪了。每当看到call trace一行行的打出来,就觉得先成功一半了。总结了一下call trace是如何实现的,放上来备忘。 从函数调用的过程开始说。每次函数调用都会产生一个栈帧,%ebp寄存器指向,

2013-09-03 23:23:35 1753

转载 why vfree() must not be called in interrupt context?

Q: Why vfree must not be called in interrupt context?A: the tlb flushing can deadlock with IRQs disabled as it relies on IPIssuppose two cpus are in interrupt context (with interrupts disabled

2011-11-01 16:41:13 500

原创 块设备与软中断

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->块设备层无非两件事情,一件是下发,即submit,一件是返回,即callback。下发过程举个例子:在进程上下文,用户通过系统调用向文件系统层写数据。文件系统层向下到pagecache层封装成bio发下来,submit_bio调用g

2011-06-22 09:40:00 1413

转载 gedit 不能打开空文件

<br />前段时间为了在linux下用gedit打开windows下的文件不出现乱码,于是在gconf-editor --> /apps/gedit-2/preferences/encodings/auto_detected中增加了GBK,GB18030等编码,并把GBK移动到了最上面,结果发现gedit无法打开空文件,在unbuntu论坛上也发现有人有同样的问题,解决办法就是在gconf-editor --> /apps/gedit-2/preferences/encodings/auto_detect

2010-12-30 21:18:00 806

原创 在内核中读取磁盘相应位置的数据

<br /><br />涉及到一个问题,在内核态读磁盘固定的位置的数据应该怎么办。如果是在用户态,有C库函数可以做到,read, lseek 等都可以。但是在内核态呢?最直接的办法就是自己发bio去读,但这样有点麻烦,还有两种比较简单的方法。<br /> <br />一种是用buffer_head, 一种是用 dm_io_sync_vm。<br />第一种:buffer_head.<br />代码如下:<br /> 22static int __init bread_init(void)<br /> 23

2010-08-20 16:00:00 1403

原创 getopt函数的使用

#include #include int main(int argc, char * argv[]){    int aflag=0, bflag=0, cflag=0;    int ch;    while ((ch = getopt(argc, argv, "ab:c")) != -1)    {        printf("optind: %d/n", optind);        switch (ch) {        case 'a':            printf("HAVE o

2010-08-11 11:38:00 379

原创 从硬raid导出单盘并创建软raid

<br />从硬raid导出单盘:<br />第一步:登录<br />#hptraidconf<br />login: xxx<br />password:xxx<br />第二步:查看盘的情况 <br />query devices<br />只有状态为single的盘可以导出<br />第三步:导出单盘<br />create JBOD disks=1/1<br />create JBOD disks=1/2<br />create JBOD disks=1/3<br />可以导出多块盘,导出后fdis

2010-08-11 11:31:00 804

原创 安装perl模块和sort命令

<br />安装perl模块:<br /> perl -MCPAN -e shell<br />初次运行可能需要配置,全部默认即可。<br />进入命令行后:<br />cpan> h  帮助<br />cpan> m  列出所有模块<br />cpan> install DBI 安装模块<br /> <br /> <br />sort命令:<br />sort命令用法:<br />按第8列排序,即按第7个域排序<br />sort +7 -8 test<br />但这是以字符顺序排列的,也就是说 5要排在

2010-08-03 20:57:00 732

原创 深入理解ext2/ext3文件系统真相

摘要:我们对于ext2/ext3文件系统的了解大多来自操作系统的课本或者《understanding linux kernel》这本书,但是最近做了一个项目,需要根据文件的inode结点号找到inode本身。因此需要对ext2/ext3文件系统做深入的理解。在做的过程中才发现,原来书上讲的理论和现实的差距太大了。可能是因为书比较早,或者书上只是讲了一个概念模型,以至从实际工程的角度来看,课本上有好多的东西简直可以说是错误的。本文就把在工程中发现的问题和ext2/ext3文件系统的真相展示出来。第一章:经典而

2010-07-22 18:08:00 2861 2

原创 内核修改初探

上午还在为修改内核的问题发愁,到现在已经不为这件事情发愁了,又更愁的事了。今天要做的事情很简单,在 fs/block_dev.c 里保存一个变量, 在 fs/ext3/inode.c 里去调用。我开始看到这两个文件都包含了一个头文件 mpage.h , 就想用最传统的方法,在头文件中加一句 extern ..., 然后随便在一个文件中定义这个变量就可以了。可是事实是,内核在编译了近一个小时的时

2010-04-20 21:46:00 533

原创 修改sbull的一点体会

今天在修改sbull的 open函数时出现了一些问题,本来的想法是拿到设备文件系统的 inode 结点后,把其中的 i_data 中的 a_ops 里的prepare_write 替换成我们自己的。就是三两句代码的事,可是调了一个下午才通过了。开始是编译不过去,好不容易编译过了,insmod 和 mkfs 时都没有问题,最后在mount 时发生了几次 kernel panic. 下面把发生的原因和

2010-04-19 21:27:00 665

原创 编译小记:

用我们自己定制的centos 编译ldd 中的 sbull,开始总是报错说没有 modpost, 上网查了一下,说是在内核目录下make scripts一把,生成这个脚本工具就可以了。可是我在运行这个命令的时候生成了为数不多的几个,没有这个工具。不知道怎么回事,后来问了李静,她说是没装好devel 和 head 两个rpm包,于是再次找到那些rpm包安装,安装之后再编译sbull,还是提示没有mo

2010-04-15 10:46:00 379

原创 Linux的引导启动程序

离上一篇日志很长时间了,中间当然是因为过年,事情很多,书没看多少,现在有时间了,再发一篇笔记存档,是关于系统启动过程的: 一切从加电开始。加电以后,所有的寄存器清0,只有CS寄存器为全1,于是指针指向了0xffff:0, 这个地址是 ROM-BIOS地址, 在此放置和程序开始做的事情是执行一些系统检测,并在物理地址0处开始初始化中断向量,这个时候初始化的中断向量,就是在上一篇日志中打印“H

2010-02-23 22:48:00 486

原创 不用操作系统写HelloWorld

原因是前些天在杨老师的讨论课上杨老师提出了这个问题:没有操作系统的光板机器,要写一个HelloWorld怎么办?有一个哥们提出了可以用bios的中断写,我也记得于渊的《自己动手写操作系统》一书中提到过,但是忘了具体要怎么办。回到宿舍找到于渊的书,看到了如下的代码,并按书上的方法实验了一下,运行成功了。代码如下:org 07c00hmov ax,csmov ds,axmov es

2010-02-05 18:50:00 925 1

空空如也

空空如也

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

TA关注的人

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