又到本周的发牢骚时间。发现如果周末能什么事都不做,没有research,没有assignment,没有project,边上放杯喝的,开着音乐,吹着风,晒着太阳,手捧本书慢慢看,那得是多悠闲的生活。不过,现在来看,这样的日子只能偶尔发生,长期享受就不好了。YY结束,进入正题,流水账。
CIS722。Project 3上周就出来了,但拖到现在我还没开始写,拖延强迫症。我不是那种一拿到作业就开始写的人,经常是拖到我觉得差不多得开始不然就来不及的时候才开始动手。这之前,我也不是就把作业丢在一边。一开始我会大致看下作业的内容,知道作业里面涉及到什么部分,需要看书的哪些章节,需要看哪些课件,这样我心里有个底,然后慢慢看那些该看的,算是做些前期准备吧。然后到不能再拖的时候才动手写。这些所谓的“前期准备”其实也不是必须,因为作业里不一定要用到这些内容。很多人都是拿到作业立马开始写,边写边学边查。以至于每次我被问到“开始做project了没”,我的回答总是“没有”,而对方不是觉得吃惊,就是觉得我在骗他。而我之所以不像他们这么做,说不清。可能因为做这些多余的“前期准备”差不多已成了我的习惯,大概是从初中开始的。也许这么做让我写作业时有更多信心,因为书都看了,肯定会做啊,虽然事实并非如此。总之,我就是不喜欢直接投入战斗,而是观察再观察,准备再准备,等万事俱备之后只欠动手时才动手,一举拿下。貌似扯远了,说到底就是个拖延症,还是强迫型的。Project这周末肯定得开始写了,看了下描述,好像看了那些书和课件之后,我还是没有头绪。写完博客洗个澡后再看看。
MINIX学到现在,也还只是了解个大概,我也没有花很多时间去研读代码,只是知道一些比较笼统的方法。对于学够了操作系统理论知识的人,MINIX还是很值得一读的,因为从它的源码里可以看到操作系统是怎么实现的。这真是很难得的资源,也正是它的创造者Andrew S. Tanenbaum想要达到的目的之一。
Read more…
我觉得应该每周写个小结,总结一下这周都做了些什么事情,不会花太多时间和精力。发现养成每天记事的习惯还是很好的,把每天里做的主要事情写下来,当周末要写个总结时,翻一下记事本,便能提醒自己做了哪些,而不用绞尽脑汁去回忆,而且回忆往往会有疏漏。从10年7月12日起,坚持把每天做的事都写下来,没有间断过。虽然有时候会忘了写,但之后都会一一补上。712之前也记过,从6月底开始的,但终究中断了几天,没补上。这一习惯要保持下去。天天写日记我不行,写个概括完全做得到。
废话不说了,开始总结。
CIS 722 Project I
CIS722这周有project要交,上上周就布置了,但一直拖到上周末才开始做。这次的project任务是修改minix内核的hardware interrupt处理部分,修改hwint_master和hwint_slave函数。原代码中这两个函数是以汇编macro形式出现的,我们的任务是把它改写成C函数和汇编函数。除了这个,还得修改其他涉及到的函数,比如调用点等。修改完之后编译,得到新的minix内核,然后在虚拟机上运行,如果能正常启动和登录,那算是做对了,否则就有错。改写成C函数的部分比较简单,只要把那两个macro代码实现的功能用C来实现就可以了。改写成汇编函数的麻烦了一些,主要原因是没理解题目,实现上其实还算简单。把问题描述看了好几遍,然后对照了代码和课件上的内存堆栈图,分析着该怎么写。上周末尝试了几次都失败了。到周二的课上,老师回顾了一下问题,我才大概搞清楚要怎么写。关键是我得保证修改后的函数的内存堆栈图和课件上的一致,因为系统启动时有些程序用到这些堆栈,不能改变它们。周二晚试了一个方法,修改后的minix能启动,也能登陆。但有个疑问,我做的的方法和老师上课提到的不大一样。他说我们得写自己的save函数,功能和已有的那个save函数一样,而且不会用到pushad命令。我的solution里,没有写自己的save函数,直接用了原有的。我觉着奇怪,发邮件给老师,提到了这问题。他回复我让我周四给他看下代码。
周四讨论的时候,他说我的做法按理说是不可能work的。我的做法里在调用save函数保留寄存器数据之前,把函数参数放到了其中一个寄存器。这么做就修改了寄存器的内容,这内容是硬件中断发生后存入的,为内核程序运行准备得(调用interrupt handler)。所以才要用到save函数,把寄存器中的数据先保存下来,然后才能使用那些寄存器。按这么说,我的程序在save之前直接修改了寄存器内容,会导致后面的kernel程序无法运行。但诡异的是,我分别用了寄存器edx和ecx保存函数参数(但栈的结构没被改变),然后调用save,然后在回到hwint_master和hwint_slave函数里调用对应的interrupt handler,都work了。老师有点不相信,跑了几次程序,查看了makefile,但最后都是一样,minix能启动,也能登录。探讨之后,我对这project才算真正了解,sigh。老师说,虽然我的方法能work这事有点incredible,但我也算完成了,可以直接交这个,不必修改了。鉴于我也熟悉那些内存堆栈图,因此也不用画出来了。我想了想,图我就不画了,但程序我还是再改改吧,改成他提到的两个方法,一个是用jmp命令调用hwint_master和hwint_slave,另一个是用call命令调用hwint_master和hwint_slave。两个的区别就是会对内存堆栈结构造成不同的影响,要做的就是把这些影响消除了。老师说,如果我不介意已经花了那些时间做project,可以修改。
当天晚上我就开始修改代码,一开始试了几次都不行,进死胡同了。然后我在那死钻,都没能改变。写程序最怕这个,一旦进入这一状态,要做的就是放松,先把这事放着吧,在再怎么钻也没用,人偶尔会死脑筋。之后偶就去睡了,实在太困。日有所思,也有所梦。当晚偶就在梦里继续想这问题。抗压力也太差了,或者是我有强迫症,没写完不舒坦。不管怎么样,还是有点效果的,找到了困扰我的原因,而且找到了解决办法。为了保险,我还在那想了代码该怎么写。然后在那猛记,好像知道自己在做梦似的,怕梦醒之后就全忘了。也不知道我到底处于什么状态,迷迷糊糊,不知道是梦还是现实。周五早上起来,还记得梦里想的那个方法,试了一下,可以了。然后用同样的原理改写了用call调用的版本。喜出望外,当天心情也格外好,困扰了几天的project终于写完了。
这个project之后,还有一个,关于semaphore,要实现系统的semaphore功能,5月6日due,还没开始写。
Read more…
APUE2e书于上周末看完了,不容易啊。这学期是狠了心看的,就怕一直拖着到毕业也看不完。算一下,断断续续,看了一年多的时间。不过我只是看,并没有把书上的代码都敲一遍,虽然代码都仔细读了,但还不够。于是想装个linux练一下,导致我这周基本上都在双系统安装上折腾。Ubuntu 10.10之前作为client os装在Win7上,像应用程序一样,没有问题。但这次我想单独安装,毕竟像应用程序一样安装在Windows上,一个不小心就可以把它卸载了,上面的东西一下就没了。单独安装,问题出现了一堆。Ubuntu 10.10在我的Thinkpad W500安装了三次,都以失败告终。这里的失败不是完全的失败,系统第一次可以启动,虽然会报错,但能进入图形界面。第二次就不行了,进了命令行模式。想着可能安装过程出了问题,于是重装。就这样装了三次,而且每次都会尝试着找些解决办法。试过安装图形界面包,试过修复所有的package,试过设置BIOS里的显卡,都不work。我记得之前也装过双系统的,也是Ubuntu,那时候都没有问题。也许是版本不行,于是找了10.04的安装,可以了。接着一番折腾,总算把系统基本设置好了。
回到正题。APUE2e的编译问题,我在之前的一篇文章说过。如果想自己练一遍所有代码,那得搭个环境,省去些麻烦。APUE2e的大部分程序里都用到了头文件apue.h,这是书上自带的,linux的库函数里没有这个。此外,还有两个关于错误输出的文件,error.c和errorlog.c,都是APUE2e自己定义的,也无法在linux的库函数中找到。这两个文件在APUE2e源码解压之后得到的文件夹的lib子文件夹里。error.c定义了“error functions that output to standard error”,代码在书地附录B的Figure B.3上; errorlog.c定义了“error functions for daemons”,代码在书地附录B的Figure B.4上。两个文件里定义的函数在apue.h中都声明过了,而error.c和errorlog.c都有#include “apue.h”语句。编写C程序时,对于指定的头文件(include语句),一般在project当前文件夹(#include “xx.h”)和/usr/include中查找(#include <xx.h>)。为了方便,我就把apue.h,error.c和errorlog.c都放到了/usr/include底下,但要做一定的修改。具体如下:
Read more…
动画版的海贼王,马琳梵多一役已经结束了,白胡子和艾斯战死。历尽千辛终于救下兄长艾斯的路飞,亲眼看着艾斯为了救他而把自己送到了赤犬的拳下。那一刻路飞崩溃了,昏死过去。从493话开始,进入回忆篇,路飞回忆起小时候和艾斯的种种经历。小时候的路飞被爷爷卡普带到山贼达旦那里寄养,之前卡普已经送了艾斯到那寄养。刚见到艾斯时,路飞要和他做朋友,但艾斯却吐了路飞口水。路飞并没有因为这个而放弃,相反,他原谅了艾斯吐口水的事,虽然艾斯并没有感到歉意。为了能和艾斯交朋友,路飞每天都跟着艾斯出门,而艾斯每次都会用各种办法阻止路飞,压到大树下,踢到深渊里,诱进鳄鱼池等等,用尽了各种手段。被丢进深渊的那一次,路飞花了一周的时间才回到家,满身伤痕。虽然如此,但路飞一天都没有放弃过,就这样坚持着,不停地追赶着艾斯。三个月之后,路飞终于穿过了那片森林,到达艾斯每天都会到的地方,不确定之物终点站。这一段情节,和之前的主题曲《One Day》很合拍,One Day的歌词如下:
每当仰望雨后的晴天
便会想起那个爱哭的自己
曾经不顾一切地追赶着某个人
深切渴望「变得更强」
现在消逝风中的那声「谢谢」
我是否有变得更加坚强呢?
全因这个答案依然未曾明了
果然还需努力向前呢
好了出发吧 永不停息
为了不输给时代的潮流
无论几度亦奋勇面对
只因不愿再失去重要的人
宛如夕阳下起舞的鸟儿
奋力追寻着未知的明日
纵使害怕受到挫折
也决不伏下视线 勇敢面对
虽然泄气的话满口尽是
然而不愿放弃的目标唯有一个
经历过种种喜怒哀乐之后
再一步步稳定前行
把手伸向无边无际的高空吧
内心坚信着唯独仅有的未来
哪怕宝贵的时光已轻逝
我亦不愿再失去重要的人
响彻我胸口的声音
一直一直都支撑着我
虽然那淘气的雨前来阻挡
我再也不会逃避了
好了出发吧 永不停息
为了不输给时代的潮流
无论几度亦奋勇面对
只因不愿再失去重要的人
迈向深信的未来
过去的二十几年了,是否也有过我曾追赶着的人。我哥应该算一个。那时候还小,每次都缠着我哥,要跟着他,但他每次都不让我跟。后来我也就学乖了,自己玩。但像艾斯对于路飞这样的,应该没有。不曾有过这样的人,让我不停追赶着,为了某天能达到他/她的高度,为了某天能和他/她并肩前行,为此而不断自我激励,自我超越。我觉着我一直都是个孤独的旅行者,我行我素,想别人没想过的,做别人没做过的,匆匆前行,不留恋停留,只向远方。有时候很希望自己生活在那个漫画中的海贼世界,找一群伙伴,一起闯荡,一起乘风破浪,一起驾驭在时代的潮流中。而今,已习惯了一个人奋斗。内心里的我依旧不甘示弱,如初高中时志在远方,不管之前发生的种种意外和不幸,不管现在身处的环境如何让人不满,我想说,不逃避,不放弃,出发吧,永不停息,为了不输给时代的潮流。
功课和学术上的就不提了。
发现读书的感觉真的很好,不管是专业书,还是闲书。APUE2e剩下一章了,chap21,已经开始读了,《Communicating with a Network Printer》。这一章和chap20一样,源代码占大部分。打算这周末把它看完,给这本读了一年多的书画个句号,然后开始编程练习。《His Dark Materials》第三部《The Amber Spyglass》读了有些日子了,但只看了一半多一些,相比前两部,读的速度明显放缓了。不是不想读了,也不是突然不感兴趣了,而是忙着其他的书和事情。刚读完24章,这段故事的主内容是Lyra和Will到the World of Death里找已故的朋友和亲人,他们打算把那地方地ghosts都放出来。嗯,keep reading。去NYC玩的是买了三本书,开始看的有两本。一是《志摩的诗》,我没有花很多时间,因为诗本身很短,意思也很直白,只在有兴致时才拿出来翻几页。二是柏杨的《丑陋的中国人》,昨晚看了【上辑 沉痛出击】的《丑陋的中国人》,是柏杨先生一九八四年九月二十四日再爱荷华大学的演讲词。虽然我也才二十七岁,但也在社会的各种繁杂里呆过好些日子了,眼见耳闻过很多。对照柏杨先生所述的,深深感觉到,中国人和中国社会的各种怪相。确实如此。虽过去了二十几年,但文中提到的那些现象在今天依然存在着,而且有更甚之的表现。不提台湾,香港,只看大陆,大多数人都知道社会中存在的各种问题,但能有改变的,很少。原因有很多,我也不想深入探讨。我尤其喜欢这样的杂文文章,就像我初中读的鲁迅杂文一样,犀利而且有力,直截了当,直击要害。以前我也学着写过一些杂文,初中的时候,扯过学校,扯过教育,但也仅此而已。我的作文其实很烂,因为写不来那些优美的散文和惹人的小说,我只好吐槽,以显示我的“深度”,显示我的“与众不同”。年少轻狂,但年轻真好。现在已没有兴致了,我只能顾着小家。社会上依旧有很多的勇士,在那里奋斗者。我做不到,但我支持。
除了读书,读网上的技术或评论文章也是种享受。TechCrunch,CSDN,还有ACM TechNews。前二者的内容基本是IT行业的文章,ACM的TechNews则侧重和CS相关的research的最新情况。TechCrunch上的文章有太多是关于Startup的,此外是一些对IT业现象的评论。CSDN上的文章原创的较少,不是翻译来的,就是转载的。这样也好,帮我们搜集信息了,省去一个个网站浏览过去。ACM TechNews我是在手机上看的,有个专门的APP。我主要看abstract,有感兴趣的再看全文,因为很多研究方向,即使我看了也不会了解,所以知道个大概就好了。
最近也不断为一些事苦恼着,但基本上是无能为力,事情并没有如我预料般发展着,反而有恶化的倾向。我觉着还是要认清主次,当下不能改变的,不去纠结,先暂放;把能解决的拿出来先解决,做到松弛有度,主次有分。
最近找了好些新歌老歌来听,发现Eminem的歌很不错,说唱的。还有Linkin Park的。我觉着我对歌很挑剔,听的都是那些我听了不会厌的歌,稍有一些让我不喜欢,就被我筛除了。
钓鱼证renew了,貌似最近的鱼情也不好。上周去Rocky Ford看了一下,钓鱼的人不多,而且都是一无所获的。我应该自己去试试。我认为能钓到鱼的地方都没人在那钓。
傍晚去Rec打球了,杯具地发现racquetball那一层要重新装修,九月一日才会再开放,未来五个月内都没得玩racquetball了。
今晚做了红烧五花肉,加了土豆,味道很好,赞下自己。
宅不可怕,但要宅的有意义。嗯。
博士的第三年很快就要过了,如果正常时间毕业,那还有两年多。最近俺一直在问自己一个问题,Am I Ready? 答案是NO。毕业之后,我想进工业界,而不是academia。如果进academia,那research得有所成,否则以KSU的排名,毕业之后要找教职会比较难(本来就很难),一般都是去比KSU靠后的学校,这些学校往往都在偏僻地方。首先,我自己对学术研究的兴趣不大,当初申请phd的初衷是想着把能读的书都读了。本科毕业时的想法的确是这样,那时候不知道自己以后想做什么,只知道自己还没准备好到社会上闯。几番考虑之后,我就走上了这条出国求学的路。其次,虽然学校里的生活能够过得悠闲一些,但我还是很想到IT界去闯荡,想看看自己到底能走多远,凭我的能力我能达到什么样的层次。我对Startup的兴趣很浓,但目前这只是天方夜谭,还是那句话,没有ready,没有在industry的experience,寸步难行。最后,从前途的对比上,industry会更promising一些。我想去城市,更喜欢城市生活,而不是乡村养老式的清闲;我喜欢职场的竞争,当然不是说academia就没有竞争,只是这种竞争不适合我。走上industry的路,更容易实现个人对未来生活的期待,更容易让我体会到自我价值,而且计算机的就业前景和钱景都算不错。
我进业界的想法已经很明确了,现在该做的就是prepare myself。有个前提,是我得完成phd学业上的任务。该做research的时间还是做research,该看paper的时间还是看paper,不会去忙其他的。学业上的work是我顺利毕业的关键,不想输在这上面。我也想过只专注于research,但就我做的CPS方向来看,毕业之后能应用到的很少,太新的东西,现在的硬件和软件技术都没达到将之产业化的条件。而且软件公司们的职位要求都是很具体的关于一些语言和技术的掌握情况。假使我只做research,毕业后我觉得我当个好的programmer都成问题。那该准备什么呢?在计算机界如此混乱的当下,繁多的编程语言,各种各样的技术,得选一个自己有兴趣且会去深入钻研的方向,做到术业有专攻。最近看了不少书,也从网上了解了很多phd job的要求,纠结了一段时间,最后才把我的方向确定下来。
Read more…
今天的天气实在好,很久没这般的好天气了,冬天已远,春天已至。于是,偶开车出去晃了一圈,主要是去我钓鱼的地方看看。
4月1日
长夜漫漫,无心睡眠。其实今天我应该是很困的,但这会整个人兴奋了,写篇博客吧,扯。
昨晚两点睡的,早上八点多就被电话吵醒,CSSA的新webmaster问我网站的事,虽然我已经很业余了,他比我还业余,所以问题比较多。一般我睡到十点多才会起来。今天白天不在状态,不睡够八小时果然不行(有点心理作用)。到系里厨房拿了杯咖啡,冲得太淡,一杯下去,没效果。看了会paper,刷会微博,然后,然后,不知道怎么就玩上游戏了,植物大战僵尸。这app我买了有些日子了,都没怎么动过。一直玩到七点多,罪过,看了2/3的paper被我扔在一边。我发现自己有点强迫症了,上网强迫症,微博强迫症,etc,无法集中精力去做一件事,看篇论文都断断续续的,真要不得。要反省一下,不能这样一心多用。这可能也是太宅的恶果之一,生活太倚赖网络,已经有点主次不分了。开春了,天气暖和了。我这个宅男要变得阳光一点,改天去钓鱼,晒晒太阳吧。出行不能总是两点一线,生活不能总是一本小黑,思想不能总是一度空间。最近思维有些乱,想这想那。喜欢上了一个人,单方面的,应该就会这样吧。不过我也很淡定了,顺其自然吧。
无意中看到一句话:熬夜,是因为没有勇气结束这一天;赖床,是因为没有勇气开始这一天。我觉着,前半句就是我的情况。一般睡到十点多起来,上会网,吃个饭。十二点半左右去学校。下午呆办公室,做点事。晚上回家做饭,看会小说,上会网,聊会天,看会书,洗个澡,十一二点了。一般人都睡了,但往往这会是我最清醒的时候,可能因为刚洗完澡。这时候我都会想今天干嘛了,然后在小册子记下来。记下之后,经常发现这一天我也没做多少有意义的事,或者一件都没有。有人和我说过,应该把自己的梦想做成计划,把计划融入每一天的生活当中。看看自己每天做的事,想想如果要实现梦想应该做的事,就大概知道哪些事有意义,哪些没意义。当然不是说,和梦想计划无关的都是没意义的,看情况,这个自己心里清楚,有一个清晰的衡量标准。到这时候,我才会想认认真真的看会书,与专业相关的。之前也看了些,但如我之前说的强迫症,都是不专心地看着。不想一天就这么过去,会睡得不踏实,所以我就静静的一人在那看书,看到困了,两三点的时候,爬上床睡觉。按西部时间看,我这算早睡早起。都说熬夜不好,但我总觉得这是相对而言的,除非它跟local的日出日落扯上联系了。虽然我在中部,但我保持着西部的作息,从西部的时间来看,还是很healthy的。不过,也许别人说的“熬夜”,是指晚睡而且睡眠时间少。Anyway,我已经忽视这个了,每天至少八小时,不管几点睡,除非早上有meeting得起来,或者,我醒了且实在睡不着了。
Read more…