自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 要过年了

<br />马上就要过年了,今年没有老猫,没有回家,我决定带着怀孕5个月的老婆去旅游,宝宝5个月了,先去苏州,然后去杭州,然后回上海。苏州还好,宾馆景点价位都还可以,杭州就另说了,都贵啊,不知道为什么。以前都是上有天堂下有苏杭,为何苏州和杭州就如此不同呢...所以准备在苏州多逗留一些时间,不但玩好了,也省了不少银子啊。明天上午11点多的高铁出发,二十多分钟到苏州,比上班坐地铁还快,一点都不像旅游的样子...不管怎样,这是我们第一年没有年夜饭,没有放炮,没有对联,没有和长辈团聚的过年了,很是兴奋,放得开,方才

2011-01-31 17:58:00 3213

原创 x86的段页式存储管理

<br />x86页表项中有一个U/S位,表征是否允许一般用户访问,页表项的位明显是基于页式存储管理的,然而访存系统mmu是怎么知道访问者目前是u还是s呢?是u还是s是在哪里设置的呢?根据又是什么呢?其实这个根据并不再页式管理的范畴,而在段式管理范畴,段寄存器中的dpl表征了是u还是s,页式管理是很简单的,仅仅知道页表项的结构和cr3寄存器的作用就可以了,段式管理相对复杂,需要理解int X,异常,中断等导致的cpl切换,从而导致的段寄存器的重新加载。x86已经没有能力再轻松升级了,在沉重的负担背后,它不得

2011-01-31 17:39:00 4225

原创 虚拟化的内存和中断

我个人以为,在一台物理机器上运行虚拟机器,并且虚拟机器还和物理机器公用一套硬件,最复杂的东西只有两个,那就是内存管理和中断管理,对于内存管理,影子叶表已经解决了绝大多数的问题,对于中断问题,还有很多的不同的解决方案有待选择。     以x86系列处理器为例,当中断发生的时候,总是会有intr信号发送到cpu的,如果此时正在运行的是guest os的话既然guest os运行在ring1,那么很显然vmm会捕获到这个信号,那么既然vmm捕获到了这个信号,那么它肯定有办法将此信号转交于host os的中断处

2011-01-30 17:06:00 4132

原创 感悟之三者

<br />之一:地铁上看见了时髦女人和要饭人的一幕<br />在地铁上看见有一个乞丐,明显是装的,有幕后的那种,踱步乞讨,走过一个女人,女人衣着时髦,发型考究,对之不理不睬,然则乞丐走出十五步有余之后,时髦女人追上来,从包里掏出一堆硬币,仔细挑拣后,拿出一枚一角的投入乞丐的盘子。此时,乞丐扬然而前行,女人飒然而归位,其间是女人的做作还是“乞丐”的不屑...<br />之二:买train tickit和买house<br />哪个更难?给我二十年,我肯定完成前者,我有二十年时间;而后者,我只有不

2011-01-27 21:27:00 3708

原创 vmware的vmmon--部分代码以及虚拟机嵌套

<br />vmware的vmnet是开源的,因为linux下需要编译模块,而编译模块必须需要源代码,并且网络协议栈完全是linux操作系统内部的事情,因此它必须完全开源才可以,然而vmware的另一个重要的内核模块vmmon却可以尽量少的开放源代码,而保留一些闭源的内容以二进制的方式提供,因为这些内容不依赖于linux操作系统,而只依赖于x86 cpu的指令系统,因此比linux操作系统更加底层,换句话说这些二进制代码不论在哪种操作系统上,只要硬件是x86的,那么它们的代码和执行效果都是一样的。然而,仅有

2011-01-27 21:11:00 5033

原创 vmware的原理和影子页表

<br />vmware启动的时候同时会有一个vmware-vmx启动,二者通过pipe或者socket通信,实际上,vmware只是一个输入/显示客户端,类似X服务器,它一般在一个窗口中运行一个虚拟操作系统。真正工作的是vmware-vmx这个进程,它和内核中monitor通信完成虚拟操作系统的执行和数据向vmware的传导和接收,通信的接口是/dev/vmmon字符设备,使用最多的就是其ioctl例程。<br />     执行32位保护模式虚拟操作系统的虚拟机实现中最复杂的不是别的,正是虚拟OS名

2011-01-27 21:10:00 8681

原创 vmware的vmnet-组网,升级和应用

<br />openvpn的组网方式很单一,仅仅通过配置路由,将数据导向tap,然后从字符设备中将之读取出来。如果能充分利用上述vmnet的方式的话,那就灵活多了,这里不考虑vmware-vmx以及vmnet-natd这种不开源的进程,仅仅考虑userif/netif/bridge/hub这四种卡口之间的相互组网。另外在vmware的6.5.x版本中,两个新东西被引入,第一新增加了filter,就是注册了几个netfilter的nf_hook_ops,这样的话,很多在用户空间的过滤操作就可以放入内核了,提高

2011-01-25 22:11:00 4068 2

原创 vmware的vmnet-理解全景后解答两个问题

<br />问题一:虚拟机中增加两块网卡eth0和eth1,均为bridge模式,两块网卡的ip地址配置到和真实机器真实网卡的同一网段,两块虚拟机网卡的arp_ignore均设置为1,然后真实机器上ping 虚拟机的eth0,在虚拟机的两块网卡上同时抓包,可以看出,eth0回复的arp回应也能被eth1收到,这是因为当在eth0和eth1上同时抓包时,两个网卡都将成为PROMISC(混杂)模式,而这两块网卡是由真实机器的两个userif的卡口代理的,可以在/proc/vmnet中看出,hub0.0由brid

2011-01-25 22:08:00 4178

原创 vmware的vmnet-有机会还要看源码

<br />实现这个虚拟交换机肯定需要内核的支持,linux的模块加载是严格依赖版本号的,因此vmware的linux版本必然要提供源代码并且在vmware安装的时候根据当前运行的内核版本重新编译,因此也就给了我们看一眼虚拟交换机以及虚拟网络是如何实现的机会。以VMware Workstation 5.5.1 Build 19175 for Linux这个版本为例,网络方面内核模块在VMware-workstation-5.5.1-19175/vmware-distrib/lib/modules/sourc

2011-01-25 22:03:00 4051

原创 vmware的vmnet-感官和视觉上的效果

<br />debian上启动一台系统为redhat的vmware虚拟机(版本为5.5.1),redhat有三块网卡:eth0,eth1,eth2,分别设置为bridge,nat,host-only模式,在物理机器debian上的/proc中可以看到网络连接情况:<br />debian:/proc/vmnet# ls<br />bridge0  hub0.1  hub1.1  hub8.0  hub8.3  netif1   userif10  userif5<br />hub0.0   hu

2011-01-25 21:59:00 4616

原创 vmware的vmnet-概念的解说

<br />vmware本身实现了一个很不错的虚拟网络-vmnet,这个虚拟网络完全可以脱离vmware而存在,我个人十分看好这个虚拟网络架构,它实质上是在内核实现的一个虚拟的链路层网络,至于它还有没有其它的组网方式,值得研究。<br />1.几个概念:<br />1.1.Virtual Switch:这是一个虚拟交换机,存在于安装vmware的真实主机的操作系统内核当中,这个switch提供了多个“插口”,这个交换机是一个链路层交换机,也就是说,插到它上面的是“网卡”,可以是虚拟网卡,也可以是真实

2011-01-25 21:57:00 7744

原创 windows和linux的协议栈驱动

<br />windows中没有将loopback当成一个网卡来实现,而是直接在比较高的层次解决了对127.0.0.0网段的访问,因此使用wiresharck是无法抓取这种loopback包的,pcap工作在非常低的层次,127.0.0.0网段的数据流是不会到这个层次的。因此你必须按照驱动或者自己写一个驱动去将127.0.0.0网段的数据包抓取,已经比较好的实现有CommView,然而它需要安装一大堆的驱动程序,而且没有微软徽标,很恐怖的,虽然它没有公布驱动的源码,然而很显然,它在比较高的层次截取了127.

2011-01-25 21:53:00 5584 2

原创 risc和cisc在嵌入式设备中的博弈

<br />cisc指令复杂,执行指令的时候必然功耗较大,并且由于指令多而复杂,必然消耗很大的芯片面积,在成本上也必然增加,制造难度大。而risc却没有这样的问题,小而精简,看起来更适合嵌入式设备。<br />     然而从软件上,risc指令少,必然导致同一个程序使用的指令要比cisc机器要多得多,因此编译出来的程序必然很大,纵然编译器有再好的优化技术也帮不上本质的忙,因此对于存储空间一般很小的嵌入式设备而言,形势更加严峻。<br />     软件硬件两方看似没有形成博弈之势,也许存储器的价值

2011-01-21 20:52:00 3597

原创 scapy-yield的含义和使用

<br />scapy的实现中,yield的用法很好,它使得loop成为一个生成器,从而使得__iter__返回一个迭代器,那么yield的本质是什么呢?<br />保有yield的函数返回的是一个迭代器,而返回迭代器的也就是生成器了,用yield构造迭代器将会非常方便,总的来说,设yield函数返回一个迭代器iter1,只有在你显式的调用其next函数或者隐式作for-in操作时,yield函数中的yield值才会依次按照其yield的顺序返回出来,yield函数如果你使用yield N,那么这和re

2011-01-21 20:50:00 3830

原创 scapy-其中迭代器的实现细节

<br />前面知道了在scapy中,不管是ip包,还是以太包,还有tcp包,或者它们集合在一起的包都是一个Packet,这是在数据包组织意义上讲的,另外从数据包最终组合的意义上讲,scapy最引人入胜的地方还在于Packet本身也是一个生成器,即generator,这是python中一个很重要的概念。Packet是一个生成器并不是为了方便或者美观,而是scapy本身要求的。<br />     由于Packet表示的是一个单独层的数据包或者多层组合后的数据包,比如tcp数据段作为ip数据报的载荷(pa

2011-01-21 20:48:00 4536

原创 scapy-协议数据组织结构与细节

<br />是使用继承还是使用包含,这也许是OO中永远讨论不完的话题,其受到争议正是因为这两种方式都太灵活了,让人不能轻易以一个的优点作为根据迅速推翻另一者,正是因为二者都很好,scapy则同时使用了二者,恰巧正是这种scapy的使用方式将继承和包含结合在了一起,结束了它们的争吵。<br />     首先不管是tcp段,ip数据报还是以太帧,实现它们都是Packet,正因为如此,IP,TCP,Ether等各层的数据包(格式)类都继承于Packet这个父类,然而由于这些协议彼此是分层的,一个层次的协议头

2011-01-20 21:49:00 7629 2

原创 scapy-整体设计和数据发送流程

<br />scapy涉及了pf_packet套结字编程,路由以及面向对象设计等诸技术,它本身使用python编写,熟悉python的家伙这下有福了,可以目睹这个优秀的软件而无需下载编译源码之类的了。<br />scapy中到处都是class,不过要说起来,使用class表示协议栈是再方便不过的了,协议栈本身实现的每一个层就是一个class,而每一个经过该层的数据包就是该class的一个对象,一个class拥有很多属性,比如针对ip层来讲,它有源地址,目的地址,ttl等属性,同时它还有send,rece

2011-01-19 21:06:00 8269 2

原创 arp_ignore背后的rp_filter与arp_filter

<br />操作系统:Debian 3<br />机器和网络配置:<br />测试机器eth0:<br />inet addr:192.168.1.82<br />当事机配置:<br />eth0:<br />inet addr:192.168.1.247/HWaddr 00:15:17:F4:9A:E0 <br />eth1:<br />inet addr:192.168.1.246/HWaddr 00:15:17:F4:9A:E1<br />eth0和eth1插于同一

2011-01-18 21:19:00 15332 1

原创 除了鱼刺还有花椒

<br />鱼肉好吃,然则卡了嗓子就不爽了,故吃鱼的时候总难放开,总难开怀,因此鱼之美味也就在这紧慢之中焦急之中令人吃不爽,令人回味。不似牛羊肉,大块啃食,肚饱之后忽觉索然无味,顷刻前的口水骤然变为一团由胃翻滚至上的饱嗝汤水,喷出口外,食鱼则不然,虽食前尽有口水,食之却不能尽兴,食罢其美味仍尽在想象,在平缓之中保留了鱼肉鲜美之印象,令人从来不会有食腻之感觉。所以,鱼虽然容易被刺卡了,但是也就是因为它有刺,令人不能大块食之,才有了吃鱼的趣味,可是这世上竟然存在另一物品,尽是阻碍了美食入口,毫无意义可言,而且一

2011-01-16 17:31:00 3973

原创 OOM-KILLer的演进与新的启发式策略

<br />linux在2.6.36内核中修正了oom-killer的行为,oom-killer在引入之初就曾引发过争论,这个东西到底应不应该存在,内存不够用了的时候,到底应不应该由操作系统内核替我们做一些事,比如选出一个吃内存的大户,然后干掉它,这种行为甚是鲁莽,按照机制和策略分离的原则,内核其实应该将这件事报告给用户,让用户空间进程判断应该怎么做,然而此时已经没有内存,机器可能已经无法操作,起码已经是死寂之神态,内核又如何通知用户,因此索性就oom-killer了。<br />     早期的oom

2011-01-14 21:36:00 5668

原创 ipmi对于统一硬件管理的意义

<br />ipmi-智能平台管理接口是一个标准,它的实现核心是一个芯片,叫做BMC,它独立于计算机常规部件比如cpu,内存等等然而却真真的存在于主板或者刀片上。基于BMC使用ipmi,你可以不依赖操作系统对机器进行监控或者管理,甚至远程管理,管理的范畴甚至可以是电源操作,比如开机,关机,重启等,比运行于操作系统的SNMP软件要灵活很多,之所以管理的范畴如此之宽就在于BMC芯片的独立性,它独自存在于板卡上,独立供电,只要接通电源它就被供电,甚至可以使用单独的电池给与供电,这样的话,致命的停电(设想ups已损

2011-01-13 20:29:00 7129

原创 仿佛回到了初中

<br />昨天下班到家疯狂地唱黑豹,零点,庾澄庆,唐朝,崔健的歌,不是一般的唱,是完整的,大声的唱,终于发现自己还没有老,还没有迷失在利益和欲望的此岸,彼岸仍然是无尽的洒脱,歌声尽毕,哎...才周二,还要上三天班!放声歌唱,只是觉得身边少了一个敲架子鼓的,事后又没有老师请家长,真是不过瘾,歌声又一次扬起来,《无是无非》《无地自容》《别来纠缠我》《荒原困兽》《...》只是少了当时的疯狂,不过还好,我自己还没有被现实彻底埋没,还能从中引起很多的回忆,这很好!

2011-01-11 20:56:00 3538

原创 kmap_atomic的细节以及改进

<br />kmap_atomic用于高端内存映射,用于紧急的,短时间的映射,它没有使用任何锁,完全靠一个数学公式来避免混乱,它空间有限且虚拟地址固定,这意味着它映射的内存不能长期被占用而不被unmap,kmap_atomic在效率上要比kmap提升不少,然而它和kmap却不是用于同一场合的。不管怎么说,它的设计是很完美的。<br />     kernel可以在多个cpu上同时运行不同的task,然而它们共同使用一个内存地址空间,也就是说,地址空间对于多个cpu看到的是同一个,kmap_atomic使

2011-01-11 20:37:00 13718 6

原创 一个关于组播的网络问题--暂没有时间确定真实原因

<br />操作系统:Debian 3(内核2.6.8-2-686-smp)<br />网卡:四块网卡,驱动程序为e1000(e1000.ko)<br />应用程序:在其中一块或者多块网卡上启动heartbeat(向组播地址发包)<br />现象:heartbeat绑在ethx发送组播,然而ethx没有插网线,网卡口本身状态up,此时modprobe ip_conntrack,然后rmmod ip_conntrack,rmmod将会阻塞,通过ps查看它是running状态,发送SIGKILL给它

2011-01-11 20:35:00 4154

原创 对待实时进程(RT)抢占的问题

<br />一个进程被唤醒,在linux中是调用try_to_wake_up函数,对于RT进程也不例外,对于一般进程而言,如果在一个cpu运行队列上被唤醒的进程的优先级大于该cpu的当前进程,那么就会发生抢占,而如果两个进程都是RT进程则不会发生抢占,理由是cache的保持,如果发生抢占的话,被抢占的RT进程将丢失其所有的cache,可是这样做合理吗?<br />     先看一下RT进程的特征,这种进程一旦运行,除非自愿放弃cpu,一般是不会停止运行的,对于高优先级的RT进程总是优先运行,如果对于RT

2011-01-11 16:35:00 4744

原创 关于android移动开发

移动开发如今异常火爆,只因为移动装备异常火爆,可是这里有几个问题,拿个手机看电影真的很舒服吗?手机的功能越多越好吗?真的希望ipad能改变这一切,想看电影,看电子书,想玩玩游戏,你可以选择一款平板电脑而不是一部手机,手机拥有那么多功能真的是一种负担,对于开发人员来讲也是一种误导,拿moto xt701来讲吧,它根本就不是一部手机,它能打电话吗?它不能!因为它的通话质量十二分差,能把一切噪音放大;它能发短信吗?它不便!因为电容触摸屏让甚至女人都相对很粗的手指不知道往哪里放!然而它的应用却很多,很多

2011-01-09 20:51:00 4441 1

原创 asm goto与JUMP_LABEL

越来越多的工作现如今都交给了编译器,甚至连动态代码修改的数据组织这种事都交给了编译器。gcc提供了一个特性用于嵌入式汇编,那就是asm goto,其实这个特性没有什么神秘之处,就是在嵌入式汇编中go to到c代码的label,其最简单的用法如下(来自gcc的文档):int frob(int x){    int y;    asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"                 : : "r"(x),

2011-01-07 21:18:00 11237

原创 linux2.6.36之后对工作队列的改进

<br />linux自从引入工作队列之后,越来越多的工作都交给了它,工作队列有什么优点?有进程上下文?可延迟?是的,这些都是它的优点,但是总不能因为它的这些有限的优势而将所有的工作都交给它来做吧,可是驱动或者子系统的开发者却把它当成了银弹,动不动就create_workqueue,然后随便一个什么小小不言的动作就queue_work,结果呢?结果导致了内核空间充斥了大量的工作队列,这些工作队列的本质是每个工作队列(仅限于MT)都会在每一个cpu上创建一个内核线程,实际上没有被queue_work根本就没有

2011-01-05 17:03:00 5718

一个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关注的人

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