自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 慎用进程间条件变量pthread_cond_t

条件变量是用于多线程/多进程间同步,是一种典型的睡眠唤醒用法。P1等待某个事件的发生,P2触发事件,唤醒P1。条件变量在初始化时,可以通过接口pthread_condattr_setpshared指定该条件变量可用于进程内的线程间同步,还是用于进程间同步。但是,在linux的glibc实现中,进程间同步却存在着一个缺陷。将导致问题扩散,非常严重。原因如下:pthread_cond_t结

2013-01-09 23:47:21 5333 1

原创 抽象公共化,实现具体化

有个内存管理模块对应用屏蔽了不同环境的内存差异,提供了统一的内存管理接口及机制。其内部层次大致如下:facade ----------> 抽象实现 ------->具体的内存接口(根据实际运行内存管理配置)。在三种实际环境中会用到某个库的内存申请释放操作,而这个第三方库的内存操作接口在两种环境下是一样的,在第三种环境下则是不同的,差异在某个接口的参数上。如内存申请的ID号,在前

2013-01-07 23:53:24 910

原创 一种典型TCP的通告窗口变化情况

前段时间有位同事抓包分析了报文交互的通告窗口大小,有些不理解。下面是他的描述:有一台机器(下面称为客户端C)通过TCP与服务器交互(下面称为S),抓包后发现通告窗口(下面简称为窗口)如下变化,C的窗口在变小,而S的窗口一直保持不变。他的疑问是,1、C的收包已经很及时了,为什么窗口还在变小;2;S的窗口为什么不变;3、窗口能为0吗?实际上,这是一种很典型的客户端与服务器端通信的场景,窗口的变

2012-12-16 21:50:58 4065

原创 转发乱序与TCP

我们知道,基于网络分层的思想,TCP与IP转发,可以说是互不干涉的,转发平面(或者路由器)尽力而为的转发报文;而TCP对下层链路是不感知的,为了最大带宽的利用率,启动后以慢启动方式快速的扩大拥塞窗口,直到丢包发生,进入拥塞避免阶段(收到对方3个冗余ACK)或者慢启动阶段(超时丢包)收缩拥塞窗口,接着又开始继续扩大拥塞窗口发送报文。虽然IP转发可以不理会TCP的处理方式,协议并没有要求。但如果I

2012-12-16 21:17:20 5875

原创 linux互斥信号量pthread_mutex的两个问题

pthread mutex是glibc实现,在linux下实现互斥的信号量,可用于进程内或者进程间。下面是使用上碰到的两个问题。问题一、超时时间基准pthread mutex超时采用的是系统时间(如windows右下角的时间),这个时间是会被修改的,如果使用者本来是想延迟等待一段时间的,刚好时间 被修改了,将导致超时时间不准。这个问题在代码从vxworks移植到linux下,很

2012-11-29 00:07:09 2236

原创 The Second-System Effect

The Second-System Effect 是人月神话中的一节。意思是说在做第一个系统的时候,设计师很是谨慎仔细,倾向于精炼和简洁的,对很多的润色功能会被放在一边。而在做第二个系统的时候,由于有了第一个系统的经验和自信,倾向于增加更多的功能,过多的设计。这就是我们常说的不要加法,要采用减法。实际上,除了软件设计领域,感觉很多方面都有类似问题。比如很多的公司

2012-11-28 23:27:54 786

转载 TCP协议疑难杂症全景解析

转发说明:这篇文章写的太好了,可以看出作者有非常丰富的TCP经验,忍不住转发了,推荐给朋友们看一看,但前提是有一定的TCP知识和经验。如何理解TCP,个人经验是:设计TCP协议的目的是在充分利用带宽的基础上进行可靠传输,而基于网络协议的分层思想,TCP确是建立在不可靠传输IP之上的,且对底层带宽毫无感知,底层链路存在着丢包,时延,抖动,乱序等问题。因此,在学习TCP的时候,一定要牢记TCP的目

2012-09-18 00:07:18 1196

原创 从某个实例看公共库的设计

先看一个实例:有一个公共库(下面称之为D),提供了很多公共模块,内存管理是其中之一,内存管理包括了内存分区(静态内存区,动态内存区,扩展内存区),申请释放,泄露检测,破坏检测等功能。某一个组件(下面称之为V)使用了公共库的内存管理,从扩展分区中申请了内存,V组件会有缓存--会把申请到的内存缓存起来使用。问题来了,由于D默认会使能泄露检测,导致认为V缓存的内存是泄露了,然后报

2012-09-18 00:03:53 929

原创 从printk和logMsg看linux和vxworks的设计理念差异

printk是linux内核的打印函数,类似用户态下的printf,可在中断上下文调用;同样,logMsg是vxworks内核的打印函数,也可在中断上下文调用。linux开始作为桌面系统设计,后来广泛用于服务器领域,慢慢扩展到了嵌入式系统;而vxworks则以高性能实时嵌入式系统闻名。从这可以看出,它们的差异是很大的,考查两个同样的功能在不同系统的实现,管中窥豹,虽有不足,但也可以了解

2012-09-17 00:33:00 4311

原创 需求到代码的距离

需求到代码的距离有多远?也许很近,就在转角的街区,也许很远,就像6级专家与1级编码工的距离,取决于你的代码是如何实现的。先来看一个简单的需求:网口状态down时删除路由表项。非常简单的一种实现:int link_down(){do_something();delete_route();//删除路由 }需求与代码的距离如此之近,近的来不及反应就

2012-09-14 23:37:46 1161

原创 一种典型C语言开发思维及其可能的问题

先来看一个开发实例:静态内存模块主要功能是根据指定的(模块号,所需内存大小)从某个固定的区域划分内存,在运行过程中不会有申请释放操作。如有一块5M的内存空间addr,分别有5个模块,每个模块所需的内存为(1MB,2MB,1MB,0.5MB,0.5MB),则各模块分到的地址如下(addr,addr+1MB, addr+3MB, addr+4MB,addr+4.5MB)。当然还有其他的一些

2012-09-08 23:51:47 1262

原创 接口之惑:简单&滥用

接口设计上,简单、没有二义性是必须的。但是简单,则可能带来滥用。为什么这么说呢?先看一个例子。在vxworks里,共享资源的互斥一般可通过信号量、锁任务(tasklock/taskunlock--禁止/使能任务调度功能),锁中断(intlock/intunlock--关闭/使能中断)来实现。这几个接口,影响的程度不同,一般的编程手册(包括vxworks的帮助文档),都是建议首先

2012-07-18 23:41:41 1611

原创 食品安全问题的一个设想

食品安全问题关乎你我,现在这个问题是如此严重,有没有一些解决办法呢。前段时间掷之窗外似乎很火,但个人感觉仅凭兴趣并不长久。这里是我的一点设想:提供一个食品安全的举报网站,对举报者给予奖励,根据问题严重程度,给予几千,几万的奖励。我的设想是,举报来之于问题公司的内部员工(家庭小作坊产量小,影响也小一些,暂不考虑),因此,奖励的金额如果能达到他/她的工资水平的几倍,相信是有吸引

2012-06-29 22:40:53 2700 1

原创 pthread互斥信号量使用总结

----一年前写的东西,重新抄录以防遗忘。glibc提供的pthread互斥信号量可以用在进程内部,也可以用在进程间,可以在初始化时通过pthread_mutexattr_setpshared接口设置该信号量属性,表示是进程内还是进程间。进程内的使用较为简单,本文的总结主要是针对进程间的,进程内的也可以参考,其代码实现原理是类似的。一、实现原理pthread mut

2012-05-21 19:24:24 8215

原创 中断机制

一、中断概述中断的目的就是让CPU能响应某种突发事件并做出处理。如网卡收到了一个报文,需要通知CPU对该报文进行处理。这种一般称之为外部中断,让CPU与其他硬件设备能够配合工作。另外一类中断(或者说异常),是由CPU内部触发的,如代码执行过程中发生了除0错误,访问了不存在的地址等,这种一般称之为内部中断。由于这两类中断的处理机制与流程基本一致,因此,从中断处理代码来说,通常不加

2012-05-19 23:52:52 1801

原创 华为笑话一则

今天中午听到一则有关华为的笑话:话说一小偷潜入华为两周,最后空手而归,同伙问他原因,他说:每天24小时都有人加班,没机会下手。同伙说:那不是浪费了两周时间。小偷说:也不是,我已经学会了吹牛和写胶片。同伙说:这个有啥用?!小偷说:怎么没用,我已经获取了华为的offer,明天就要去上班了。

2012-05-19 22:37:58 2836

原创 每一个成功的问题背后都有一个美丽的假设

前段时间收到一位同事的邮件,就某个问题进行了阐述,读后如鲠在喉,不吐不快。邮件大意如下:进程复位重启后,等待3秒读取后台文件,发现读取不了,后来修改为6秒,还是不行,最后定位因xx原因导致后台文件没有生成。我想说的是,假如修改为6秒后,侥幸成功了,是不是就这样认为问题解决了?为什么3秒不行,就能假设6秒是OK的呢?开始读取失败的时候有没有分析问题的根因?还有多少类似的问题是这么解决的?

2012-05-12 22:49:29 1038 1

原创 高内聚低耦合

如何编好代码,无论函数间,还是模块间,架构设计上,似乎都逃不开这六个字,高内聚低耦合。抽象,抽象,再抽象,抽象出抽象接口,基于抽象接口编程,这就是低耦合。KISS,KISS,再KISS,保持代码简洁,功能单一,甚至一眼看过去就知道有没有错,这就是高内聚。非常赞同这一条,代码有两种:一种是简单的看过去就知道没有问题的,另一种是复杂的让人看不出有什么问题的。

2012-05-04 23:23:29 1239

原创 linux内核时钟与定时器的实现

一、概述在计算机系统,CPU是以一个节拍一个节拍运行的(cpu cycle),这就是CPU的频率(HZ)。类似的,操作系统需要提供超时功能,显示时间(如PC机右下角的时钟),统计(CPU占有率计算)等功能,也需要有一个节拍(操作系统的频率HZ)触发操作系统做上述相关功能处理,内核在内部使用了一个全局变量记录了系统从启动后经过了多少个节拍,这就是tick值,通常由另外一个更形象的说法“嘀嗒”,在

2012-04-21 23:39:22 5210

原创 胡思乱想

先穿好鞋再走路,还是边走路边穿鞋。似乎很明确是选前者。但假如不远的前方就是码头,后者可能先上船走了,等你穿好鞋后却只能在码头上等待不知道什么时候能到来的下一趟船。大树底下好乘凉,但大树底下的小树苗去无法长成参天大树,只能生长小草及附生植物。毕竟,阳光雨露是有限的,在大树底下,只有剩下的才能轮到小树苗,而别人首先看到的也是大树,想到的也是大树。那么做大树旁边的小树呢,这要看底下的养料充不

2012-04-13 22:59:43 606

原创 楚门的世界

有多少人生活在自己内心的楚门世界里呢,乃不知有汉,无论魏晋,最后在夕阳底下,感慨时光飞逝,韶华不在。

2012-04-12 23:21:39 1342

原创 变,才是王道

迭代回顾会议上,很多人都提到了xxx需求的变化导致了大量的代码返工,抱怨需求变化,抱怨系统架构没有预先识别这个风险,抱怨其他模块没有屏蔽这个变化...我当时的想法是,为什么没有人提出自己写的代码有什么可以提升之处,只是抱怨其他人能提高个人的代码能力吗,能解决最终的问题吗?写代码时能不能尽量的少做假设和依赖?需求,变是很正常的,不变反而奇怪了。不过,当时我并没有坦然的说出这个

2012-02-22 23:36:33 938

原创 linux负载均衡调度算法的实现

按照计划,本想写一篇负载均衡的调度算法分析,但查看了网上的资料,发现这篇文章已经写的比较好,我都没用那么大的耐心写的那么详细。下面是我在网上找到的资料,这里发个链接。http://blog.csdn.net/dog250/article/details/6538240另外,在这里简单总结一下:1,负载均衡的调度只是针对非实时任务,原因,参考我前面的文章:实时任务调度算法

2012-02-20 23:11:31 2888

原创 linux非实时任务调度CFS算法分析

CFS算法是基于一个理想的,精确的多任务CPU设计的(在这种CPU下,各个任务的运行速度是一致的),实际上这个CPU并不存在,因此,算法模拟了硬件的实现,通过分割CPU的时间使得每个任务的运行时间总是相等的。实现上,在每个任务控制块的调度实体上有一个变量vruntime保存了本任务的运行时间,调度时找时间最小的任务运行,使得最后每个任务的运行时间都相等。当然,不会当运行时间最小的任

2012-02-12 17:04:44 3531

原创 半个系统软件工程师的困惑

前言:这篇文章之前发布在弯曲评论,有很多大牛的评价,值得一看:http://www.tektalk.org/2012/01/20/半个系统软件工程师的困惑/#comments半个系统软件工程师的困惑半个系统软件工程师,是对自己的评价,因为清楚成为一个系统软件工程师要求的掌握的知识实在太多了:OS,处理器,编译器,协议栈,硬件等,希望自己能达到半个的水平:)。开宗明义,我是H公司

2012-01-19 22:47:22 1472 2

原创 linux实时任务调度算法分析

鉴于最近有关cpu占有率的一些问题涉及到linux内核的调度算法,有必要进行了解。因此,写了这篇文章。linux常见的任务有两种,实时任务与非实时任务。实时任务的调度算法是大家都非常熟悉的优先级抢占或优先级抢占加时间片两种,其主要思想是效率优先。非实时任务的调度算法是CFS(完全公平算法),从名字就可以知道,其思想是公平优先,兼顾效率。由于我们使用上,实时任务比较多,本篇就先介绍实时任务的调度机制

2011-12-27 23:31:27 8854 2

原创 升级ubuntu8.10到11.04的过程

抽了个空,吧ubuntu给升级了,下面把升级的过程步骤描述下:  1、下载11.04的iso文件2、解压到d:如D:/ubuntu113、把casper目录中的vmlinuz,initrd.lz拷贝到d盘根目录下4、restart5、grub的启动菜单里,按c进入命令行模式6、执行kernel hd(0,4)/vmlinuz boot=casper iso-sc

2011-06-05 11:13:00 813

原创 散漫,无纪律,没追求

散漫,无纪律,没追求

2010-02-04 22:24:00 627

原创

佳人已北去,春梦了无痕,此情成追忆,空悲少年心。

2010-01-28 23:50:00 413

原创 渴望

觉得自己缺少渴望,没有对某个目标有特别的进取心,导致成绩不大。

2009-12-24 22:59:00 377

原创 颠覆者

这篇文章写于6月26日,见本人在MSN上的空间(http://tony-cn.spaces.live.com/)  信息技术的发展让一切都变得简单直接快捷!ipod+itunes让隔壁的音像店关闭了kindle让书店关门了!搜索让以前的百事通,学富五车者失去了魅力。体感游戏,无线,自然用户,更方便的人机交互。中间商的消亡,生产者直接面对消费者。集中生产者的将越来

2009-10-13 22:54:00 509

原创 山寨时代

 这篇文章写于8月12日,见本人在MSN上的空间(http://tony-cn.spaces.live.com/)  关于山寨,网上有很多的说法。有支持的,有谩骂的,抱怨的,等等。自从年前到华强北市场逛了一下,就想说点什么。我认为山寨是一个时代的开始。网络的发展,使得技术的获取门槛大大降低;而每个人在网络上的共享、贡献,各式各样的“轮子”更是层出不穷。每个人的需

2009-10-13 22:53:00 516

原创 我看百度的“框计算”

这篇文章写于8月19日,见本人在MSN上的空间(http://tony-cn.spaces.live.com/)   今天新闻上有很多有关百度提出的“框计算”。看了下,并没有特别新鲜的东西,“框”后面装着还是云计算,webos,在线软件方面的概念,是它们在客户端的延伸而已。“框”更多的体现了客户与后台的云资源的请求交互,是客户端应用。对客户端请求进行分析识别,如何获取到合适

2009-10-13 22:39:00 502

原创 深圳租房,难难难

   这两天在找房子,想租个好点的房子真难!俺想找个一房一厅的,又想要求环境不用太差的。但实在很难,小区很少有这样的房型,农民房倒是很多,但感觉都不太好。单身公寓通常是一个单房,像学生宿舍。 难到像我这样的需求很少,导致市场上房源稀缺。

2009-10-12 23:19:00 768

原创 软件商店真能使普通开发者收益?

上上周与同事的对话,让我对现在热闹的软件商店有些怀疑,软件商店真能使普通开发者收益?事情是这样的:上上周有同事新买了个智能手机,下载了一个重力传感器赛车游戏,推荐我玩玩。通过左右摇晃就可以控制赛车的方向,确实与通过按左右按钮的不一样。试了之后,我问他是否通过网上下载,是否付费的,他说谁还付费啊,网上大把,而且也没有这个习惯! "而且也没有这个习惯"! 网上常常看到有关苹果的

2009-09-21 23:37:00 1286 1

原创 开篇之作

想着在CSDN上开博已经很久了。今天终于抽空弄了一个。赶紧写一个。回想起了自己的开博之路,在2003年?还是2004年就在中国博客网上开了。那时候上班的中午休息,就常常上去逛逛,慢慢地就想自己也开一个。可惜,写了几篇之后就没在更新,一方面是自己除了在公司,回到住处没有上网,打字又慢,也就热情不再了。今年4月在msn开了新的另一个空间。但因为自己所从事的工作,所以,还是想在csdn上开博,毕

2009-09-20 23:22:00 517

空空如也

空空如也

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

TA关注的人

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