Linux DirectIO机制分析

DirectIO是write函数的一个选项,用来确定数据内容直接写到磁盘上,而非缓存中,保证即是系统异常了,也能保证紧要数据写到磁盘上,具体写文件的机制流程可以参考前面写的<Linux内核写文件流程>,DirectIO流程也是接续着写文件流程而来的。 内核走到__generic_file_aio_write函数时,系统根据file->f_flags &am...

如何成为一位技术专家

标题党了,谈一下自己对于做技术的想法,做技术前后大约也3年,回头看看,还是有些东西整理一下,提醒自己,走好未来的路。 做技术的人总是希望自己在技术上能有所增长,一般总是想着成为一个技术专家吧,虽然专家都快被滥用成“砖家”了,也是标志着技术的进步。成功学上有“一万小时定律”理论,要成为某个领域的专家,需...

ext3目录索引机制分析

ext2在设计之初的时候就是通过链表的方式管理目录下的文件项目,ext3,ext4也是直接继承过来了,但随着单个目录下管理的文件越来越多到几十万个,线性的链表查找文件,创建文件(先要查找同名文件)越来越慢,时间复杂的达到了O(n)的级别,尤其对于当前云存储大数据等概念,读写速度是不能接受的。 为了能快速...

Linux内核死锁检测机制

死锁就是多个进程(线程)因为等待别的进程已占有的自己所需要的资源而陷入阻塞的一种状态,死锁状态一旦形成,进程本身是解决不了的,需要外在的推动,才能解决,最重要的是死锁不仅仅影响进程业务,而且还会占用系统资源,影响其他进程。所以内核中设计了内核死锁检测机制,一旦发现死锁进程,就重启OS,快刀斩乱麻解...

KVM源代码分析1:基本工作原理

13年的时候准备挖“KVM源代码分析”的坑,陆陆续续2年过去了,坑也没有填上,当时是因为对KVM了解的肤浅,真正的理解必然要深入到代码级别,所谓“摈弃皮毛,看到血肉,看到真相”,当时计划写KVM基本工作原理、虚拟机的创建、VCPU调度原理、KVM内存管理、KVM设备管理等,实际发现代码过程还是很多,估计后续会针对于不同的...

内核调试方法:Jprobe与硬件断点

Jprobe在之前经常使用用来对内核流程中的函数挂钩子,劫持相关参数,进行debug调试分析。 但在内核调试中经常碰到需要监视的模块数据,而这些数据往往在很多函数中修改,需要程序员人工从大量的内核代码中过滤出这些函数,使用jprobe就需要监控每个函数的入口,涉及的内容比较复杂,而且很多时候的函数符号并没有导出,...

i9305手机CM刷机指导

Iphone丢了之后,准备更换成android机,看当前4.0版本具体是什么样子,选择三桑的9305,当前看性价比还是可以的,淘宝有一个“永荣数码”,目前看还是不错的,机器买了2个多月还是不错的。android机买到之后第一件事就是刷机,当前rom也就小米和CM(CyanogenMod)优化的不错,本着原生系统选择了CM,主要是当前只有CM由官方...

Haystack与TFS:对分布式文件存储系统的理解

从《Finding a needle in Haystack: Facebook’s photo storage》大致对比着翻译看了几遍,有些理解和想法,便记录下来。 Haystack和TFS都是面向对象的分布式存储系统,最主要的需求都是为了解决PB级别的图片存储问题,文中也提到了一些设计目标,但设计目标是问题驱动的,先看facebook前期存储模型: [caption id=...

Bash编程陷阱二

当前文章接着Bash编程陷阱一写下来。 24. for arg in $* bash使用$*或者$@来承担脚本的所有入参,但用for遍历的时候需要注意 for arg in "$@" # 或者更简单的写法 for arg 这里的$@需要添加上"",此处的"$@"相当于"$1","$2","$3",而非"$1 $2 $3" 加引号的目的自然是预防空格,如果$1存在空格,那么就多出一个参数 25. f...

Bash编程陷阱一

Bash编程陷阱:bash-pitfalls里面介绍了43条shell陷阱,都是一些很常见的应用场景,新手和老手都有可能犯的错误,为了加深记忆,自己就大致记录下来,英文文章用wiki编辑,条目随时可能增加,建议直接看英文。 如下的内容不完全翻译原文,穿插了一些自己的修改。 1. for i in $(ls *.mp3) bash编程中最常见的错误之一就...