自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 资源 (4)
  • 收藏
  • 关注

原创 linux内核对伙伴系统的改进--migrate_type

<br />linux底层使用伙伴系统-buddy管理物理内存,buddy可以被证明是一种很有效的内存管理方式,但是它也拥有很多缺点,其中碎片避免的不完备性--仅仅寄托于释放时的合并操作而不考虑分配时的策略,这也许是它最大的不足,linux2.6内核的后期版本对这个问题进行了改进,大大避免了碎片的泛滥。在linux中,buddy是通过下列数据结构表示的(2.6的早期内核): <br />struct free_area {<br />    struct list_head    free_list

2010-12-30 20:21:00 9166 2

原创 linux内核模块的版本检查机制

<br />linux内核对插入的内核模块进行严格的版本检查,即使一个小版本号不一致也会导致加载的不成功,这完全是为了内核本身运行安全。由于linux内核的发布是基于版本号的,而所有的内核模块的开发必须依赖内核头文件--其使用的内核导出符号均在头文件中,该头文件肯定属于一个特定版本的源码树,因此模块也就间接依赖了该版本的源码树。那么到底为何内核对模块的版本检查如此严格呢?因为每当一个新的版本发布,可能导致接口的改变,如果不严格检查版本则可能导致内核crash,然而如果旧版本的模块难道没有任何办法载入到新版本

2010-12-29 20:50:00 7390

原创 sync_inodes和sync_filesystems

<br />[基于2.6.8内核]<br />这两个函数在do_sync的时候都要调用两次,这是为何?sync_filesystems这个函数的作用是什么?do_sync在什么时候会被调用?<br />     对于第一个问题,调用两次其实就是一个分类,do_sync的实现如下:<br />static void do_sync(unsigned long wait)<br />{<br />    wakeup_pdflush(0); //唤醒pdflush,使之帮忙在调用do_syn

2010-12-14 20:36:00 37739 3

原创 buffer_head和bio

<br />buffer_head完全按照设备块来进行io,块大小取决于设备但是普遍比页面小,bh的元数据比率开销过大,bio则按照页面大小进行io,然而一个bio中可以包含多个页面,因此聚集的基于page的io吞吐量更大些,这就好比用桶提水比用汤勺舀水效率高一样。因此2.6内核普遍使用bio代替了bh,然而传统的bh并没有消失,只是它完全用bio来实现了,在读取小数据的时候,基于设备块来读取还是很可取的,因此内核干脆设计出一个 bh_lru缓存结构体来缓存8个最近使用并且猜测还将被使用的bh,这可能是一些

2010-12-11 21:10:00 37381

原创 kexec机制

<br />kexec是一个内核机制,注意它的参数,一个是-l,一个是-p,-l加载的内核不能用于panic之后重启的,只有-p加载的内核才可以用于panic重启,另外使用linux的启动命令行也是可以的,效果和-p是一样的。<br />kexec -l加载的内核一般用于快速重启系统,前提是要确保硬件设备处于“和谐”状态(通过kexec重启就是为了跳过硬件的初始化这个漫长的阶段,所以只有和谐状态的硬件才能跳过的),而kexec -p加载的内核用于内核panic时转储使用,既然内核都panic了,硬件很可

2010-12-11 21:09:00 37156

原创 问题以及发现问题和解决问题

<br />发现问题比解决问题更重要,如果发现了问题的所在,解决它仅仅是一个时间的问题,可能有些问题永远解决不了,但是我们最终知道它永远解决不了也算是解决了问题。问题的实质其实是一种反差,也就是期望和实际的反差,这是好事,如果每件事都和我们期望的一致,那么我们的脑子里面就不会有问题了,思维就僵化了。解决问题的本质就是缩小这种反差,其实是两种方式,第一种方式是结果向期望靠拢,第二种方式是期望向结果靠拢,还有一种是同时向对方靠拢。将我不熟悉的东西往我们熟悉的东西上靠拢,这既是对之前经验积累的一种利用,同时又是一

2010-12-11 21:06:00 36046

原创 linux内核page结构体的PG_referenced和PG_active标志

<br />linux内核使用了lru算法来置换内存页面,但是实际上并不是纯的lru算法,里面掺杂了很多别的思想,比如第二次机会,比如双时钟指针等等。这里着重说一下第二次机会的体现。在内核中有一个mark_page_accessed函数,它实际上体现一个状态机,这是它的实现:<br />if (!PageActive(page) && PageReferenced(page) && PageLRU(page)) {  <br />    activate_page(page);   <br />

2010-12-11 21:03:00 7748 1

原创 linux内存管理系统后期的内核对zonelist的简化

<br />struct pglist_data {<br />    struct zone node_zones[MAX_NR_ZONES];<br />    struct zonelist node_zonelists[GFP_ZONETYPES];<br />...<br />}<br />GFP_ZONETYPES是一个宏,在2.6.8的时候它如下定义:<br />#define GFP_ZONEMASK    0x07<br />/* #define GFP_ZON

2010-12-11 21:01:00 38674 4

原创 linux内核内存管理中的pagevec结构体

<br />linux内核的内存管理中有一个2.6内核才加入的并不很张扬的结构体,那就是pagevec:<br />struct pagevec {<br />    unsigned long nr;<br />    unsigned long cold;<br />    struct page *pages[14];<br />};<br />以往要加入到lru链表的page都要加入到这个pagevec了,并不再直接往lru中加入了。可是不加入lru的page就不会被内存管理

2010-12-11 20:59:00 8859 1

原创 一个日志输出系统的设计

<br />本文介绍一个基于linux进程调度策略来调度的信息输出系统,多条信息可以显示多次,每次的显示时间也可以设置:<br />以下是头文件定义loglet.h:<br />#include <pthread.h><br />#define MAX_PRIO 8<br />#define MAX_LENGTH 512<br />static inline void __set_bit(int nr, volatile unsigned long * addr)<br />{<br

2010-12-11 20:58:00 35846

一个iptables的stateless NAT模块实现

如果你在寻找Linux上配置诸如Cisco设备上的static双向NAT的方法,这个或许就是你想要的; what?你觉得它完不成PAT?是的,它不行。但是想做PAT为何不使用现有的iptables实现呢?它可以自动为你解决元组唯一性问题。不要从概念上分析,事实上,static双向NAT是完全对称的,一对一的 ,也只有在BOX两边的网络在拓扑级别是完全对等的情形下,这种NAT或许才是有用的,Cisco设备经常处在这样的位置,比如一个很大的stub节点的出口位置,比如两个domain的中间位置... 我将名字取为STATIC-2-WAY-NAT,比较长也比较怪,完全不符合UNIX的小写短名传统,我的想法是:这样可以少写很多的帮助信息,因为名字就是自解释的。

2014-12-27

模块化的nf-HiPAC

原版的nf-hipac需要为内核打patch,且只支持较低版本的内核,构建起来相对比较麻烦。 模块化后的nf-hipac可以直接作为内核可加载模块编译,且适配了高版本的Linux内核。为了移植工作简化,去掉了和iptables模块的联动支持!

2014-11-21

配置文件还有一些other

代码和配置iptables配置文件,还有一些别的东西

2010-04-16

关于linux内核以及其他个人体会的文集

本文集是我用将近两年的时间写成的,大多数文章是关于linux内核的,另外还有一些我自己对计算机的理解,还有一些历史,音乐方面的东西。适合于对linux内核思想感兴趣的阅读,文章偏重于对于思想的理解。

2009-09-07

空空如也

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

TA关注的人

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