半月谈——2013年11月下半月

  又有半个月的时间没来梳理一下自己的收获了,这半个月有一周的时间在与感冒作斗争,身体状况一度不佳,而心情也受到了波及,不过,首先要恭喜自己从病痛中走出来O(∩_∩)O~

  第一周除了休养身体还实现了对于HTTP数据包的解析工作,就是上周还没有实现的抓取数据报后,获取HTTP数据包的源IP,以及目标URL,这主要是通过截取数据链路层的数据包后,按照帧格式,跳过以太网头部、在IP数据包部分的目的端口部分为80可认定为HTTP请求包,通过对数据包的分析,这一特征信息位于数据包的第37及38字节,为0x00 0x50时(即80时),就是需要进一步解析的HTTP请求包,对于URL的抓取,主要是根据在HTTP请求包中URL必定跟在“GET字段+空格的后面,且结尾后跟随空格+HTTP版本标记”这样,通过字符串的操作,就可以把URL信息提取出来,从而完成了对于HTTP请求包的解析工作。

  感冒有些好转,就用了一天完成了一个叫做greed的小游戏的编写,我会将游戏的要求粘贴在文章的最后,自己实现了两个版本的游戏方案,在完成了单线程版后,为了练习一下关于多线程间的信号量通信以及进程控制,又将其升级成双线程的版本,虽然没有用到多高明的算法,总体上还是实现了游戏要求的。由于发烧的困扰,我第二天就只能躺在床上修养喽~~~~(可能是写了一天的代码劳累加重了感冒症状~~)

  第二周,渐渐地从感冒中走了出来,开始对之前学习的《深入理解计算机系统》进行复习(感冒加重后,连续4天没看),理清了在用float强制转换int型变量时内存中的数据内容的变化规律(以32bit系统为例)。与int到unsigned的转化不同,在强转float时,实际上改变了原来存储的内容,是编译器企图用一个float型的编码近似地表示int变量的原始值,而当int型变量的数值较大时就会造成数值的失真,比如说对TMAX的float强转就会转为01000000 00000000 00000000 00000000,这实际上是2^31,而不是2^31-1.因为23位的尾数部分已经无法精确地表示同为32位的TMAX:01111111 11111111 11111111 11111111,因此取了一个误差最小的2^31作为近似值。我还进行了一个有趣的尝试,就是先对TMAX强转float,再强传回int,嘿嘿,结果是-2^31,理由就是2^31已经溢出了TMAX,TMAX+1=-2^31.即:10000000 00000000 00000000 00000000.由于通常情况下,都是在小段机器上面进行调试的,因此在GDB查看变量的值的时候,是以小端模式给出的,乍一看我还真的糊涂了.至于GDB的简单使用我就不在此记录,因为自己也是个半吊子,要学习的还很多很多,简单用法可以参考:http://blog.csdn.net/liigo/archive/2006/01/17/582231.aspx

  对于第三章关于汇编语言的部分也是读起来常常给我醍醐灌顶的感觉,对于使用disassembler调试程序有很大的帮助,尤其是当程序遇到段错误或内核崩溃的时候,这部分内容不在这里详细阐述,等到第三章阅读完成后,进行总结时再详谈。

  另外,对于Cavium的开发部分,自己设计了一个内核分工的实现方案以实现对于多任务的多核协作,以提升各个核的使用率为目标,将可用于发包的核分成三组,利用一系列标志位的限定实现三组核的负载均衡。

  

 

 

                                Greed游戏
本游戏使用6个立方体骰子,可供两个以上游戏者集体游玩。骰子的六面分别标有阿拉伯数字1~6的点数。游戏时若干个骰子同时集中掷下,依据所得到点数组合计算得分。
游戏计分规则如下:
·获得一个1点得100分;
· 获得一个5点得50分;
· 获得三个1点得1000分;
· 获得六个1点得3000分;
· 获得三个相同点(三个一点除外)将此单独点数乘以100后计算得分;(例:三个2点得分为2×100=200分)。
游戏控制规则如下:
· 游戏者依次获得一轮游戏机会,得分由各轮游戏的得分累计获得。
· 每一轮开始时有六个骰子可以投掷。每掷一把后计算得分并将得分的骰子取出,再汇集其余的骰子掷下一把。逐次掷下去直至掷完骰子或主动放弃再掷。
· 游戏开始时,掷一把得到300分或以上分既可入局(已得积分带入)。否则将失去本轮游戏资格须待下一轮机会。
· 在入局后的每轮投掷中,若有一把未能得分,则本轮已得的全部积分作废且失去本轮游戏资格须待下一轮机会。
· 首先获得3000分者为赢家。

你可能感兴趣的:(半月谈——2013年11月下半月)