Archive

Archive for May, 2011

读书笔记 – APUE2e Chap4(2)

May 27th, 2011 2 comments

/////////////////////////////////////////////

stat, fstat, lstat

Specification:

#include<sys/stat.h>

int stat (const char *restrict pathname, struct stat *restrict buf);

int fstat(int filedes, struct stat *buf);

int lstat(const char *restrict pathname, struct stat *buf);

Return:

All three return: 0 if OK, –1 on error.

Comment:

Given a pathname, the stat function returns a structure of information about the named file.

The fstat function obtains information about the file that is already open on the descriptor filedes.

The lstat function is similar to stat, but when the named file is a symbolic link, lstat returns information about the symbolic link, not the file referenced by the symbolic link.

The returned information is filled in the structure pointed by buf. See 读书笔记 – APUE2e Chap4(1) for detail about struct stat.

 

/////////////////////////////////////////////

access

Specification:

#include<unistd.h>

int access(const char *pathname, int mode);

Return:

0 if OK, –1 on error.

Comment:

When we open a file, the kernel performs its access tests based on the effective user and group IDs. access allows testing the file accessibility based on the real user and group IDs. Similar strategies is used in the testing (Four steps). See 读书笔记 – APUE2e Chap4(1) File Access Test (replace effective with real in these four steps.)

The mode is bitwise OR of any of the following constants:

  • R_OK: test for read permission
  • W_OK: test for write permission
  • X_OK: test for execute permission
  • F_OK: test for existence of file

Read more…

0522之一周瞎扯

May 22nd, 2011 2 comments

暑假生活的第一周。Jardine车少了,不用再烦找停车位的问题。学校里人少了很多,开车去系里的路上只见到若干人和几辆其他的车,或许我出门的时间太晚了。系里业几乎见不到其他学生,basement就更不用说了。我只在meeting的时候才能在main office见到些人,小蜜们。就这样,周遭顿时安静下来,只剩下夏天的风,摇摆着那些已经茂盛的树枝。去锻炼的路上,经过垃圾箱时,偶尔能看到胡乱摆放的各种家具,毕业的季节,又有多少人离开了。这段时间不是很热,正是享受Manhattan夏天的好时段。风,树,云,蓝天,这一切美得像画卷。虽已在这呆了三年,早已看惯这些景致,但我仍然很享受这一切,真如处于画中,而我俨然成了画中人,留个背影什么的。嗯,背影就好。

周二的时候出成绩了,CIS722得了A,总算没白辛苦。本来说要补完地project没补,虎头蛇尾的本性露出来了。也罢,现在确实提不起兴致倒回去折腾Minix。倒是在读Unix操作系统设计时,经常会回想起课上学过的东西,然后把Unix和Minix进行对照,似乎这样读起来更能记下东西,学过的东西的有用性就体现出来了。要是过了很久再回想学过的,八成都已经忘了,然后读Unix书的时候,也会想起Minix,但因为时间已久远,想不出个所以然来,最终导致更多的郁闷。所以,所以,一定要趁热打铁。

CPSNET,我还在Computation Layer上晃着,不断得细化每个component,定义新的data structure,message type,function。还要考虑好这些都在什么情况下会使用到。对于函数,往往是在自己的脑子里,从系统启动开始模拟一下可能的message flow,紧接着是function flow。越是深入,发现我要写的要考虑的东西越多。meeting时和老板说,要考虑的东西太多了,大脑不顶用,老板笑了笑。Anyway,现在要趁着有灵感有idea的时候,尽可能多地深入地考虑问题,涵盖各方面细节。这个framework,我从零开始,做完理论做实践,感觉还是不错的,有点像带孩子,虽然没带过孩子,囧。程序是用C++写的,每当遇到不熟悉的,就翻C++ Primer,再学习。感觉之前学的C++真是shit,就不评价本科学校里学的C++课了,人挫不能怪学校,自个的问题。此外,我也会花时间看C++ Primer,从头开始,看那些不熟悉的,一看到第7章。

Unix操作系统设计,已经开始看有关process的内容了,这周看了第六章《The Structure of Processes》。APUE2e这周看第4章《File and Directories》,因为之前看过一遍,现在看比较快,重点是把内容彻底弄懂。有时候会写一些读书笔记,把书上重要的内容摘抄下来,方便阅读和记忆。

最近彻底晚睡晚起了,都是凌晨三点左右才睡,早上睡到十一二点。我也不纠结了,保证睡眠长度就行。暑假有个目标,减肥。现在又130斤,我想减到125斤,最好能把肚子上的肉给减掉,我看着都烦,sigh。每周会去几次gym,打篮球,练器械。之前运动一次休息一周,而且运动后的第二天浑身酸疼。现在运动得频繁了,倒没有这样的感觉了,身体适应这样的节奏了。俺要再接再厉,减减减。

NBA季后赛继续着,已经到了东西部决赛了。偶支持的Heat很有希望。Go Heat!淘汰公牛。

周五傍晚去钓鱼了,蹲了几个小时,中间只有一次鱼上钩,在我往岸上拉的时候,鱼脱钩了,可惜。今年还没破零记录呢。最近鱼似乎也不多,看大家都没什么收获。不够给力啊,看别的地方都钓得很high。而这里,都夏天了还没大动静,更别说春季了。继续等。

Categories: 博士五年 Tags: , , , , ,

Where the Hell is Matt

May 21st, 2011 2 comments

这视频,这背景音乐(garry schyman – praan),让我看了很是感动,尤其Matt一个人欢快独舞的时候。我想,人就该如此,即使孤单一人,即使舞技太烂,也不妨碍我享受这一过程,因为我正在通往梦想的路上。

Categories: 五味杂陈 Tags:

读书笔记 – APUE2e Chap4(1)

May 19th, 2011 No comments

STAT

struct stat{

mode_t st_mode;  //file types and mode (permissions)

ino_t st_ino;  //i-node number (serial number)

dev_t st_dev;   //device number (file system)

dev_t st_rdev;  //device number for special files

nlink_t st_nlink;  //number of links

uid_t st_uid;  //user id of owner

gid_t st_gid;  //group id of owner

off_t st_size;   //size in bytes, for regular files

time_t st_atime;  //time of last access

time_t st_mtime;  //time of last modification

time_t st_ctime  //time of last file status change

blksize_t st_blksize;  //best I/O block size

blkcnt_t st_blocks;   //number of disk blocks allocated

}

//////////////////////////////////////////////////////////////////

File Types

Regular File: The most common type of file, which contains data of some form. There is no distinction to the UNIX kernel whether this data is text or binary.

Directory File: A file that contains the names of other files and pointers to information on these files.

Block Special File: A type of file providing buffered I/O access in fixed size units to devices such as disk drives.

Character Special File: A type of file providing unbuffered I/O access in variable-sized units to devices. (All devices on a system are either block special files or character special files.)

FIFO: A type of file used for communication between processes. It is sometimes called a named pipe.

Socket: A type of file used for network communication between processes.

Symbolic Link: A type of file that points to another file.

Read more…

0515之一周瞎扯

May 15th, 2011 1 comment

本周是本学期最后一周,周三考完CIS722 final exam,三个月的暑假就此登场,撒花。

CIS722 Project 3我拖到了周一晚上才完成,虽然上周尝试着完成它(见0507之一周瞎扯),但不能如愿。周一下午找老师谈了一下遇到的问题,豁然开朗。搞清楚了两个问题。一是errno=38的,那是因为我没有把project放到指定的文件夹下运行才导致的。Project 3的description上没有关于这方面的提示,但它的project结构和Project 1很相似,我也应该想到的,按照Project 1的操作方法来运行project 3。第二个是如何建立一个semaphore waiting list,能够容纳下系统允许的process数目。这个在project开始前老师曾说过,我当时也明白了该怎么做,和我在Unix操作系统设计书里看到的文件系统的某个结构很类似,俺也在课件上做了笔记,无奈记得不够周全,让我自己给无视了。因为Project 3出的时间和我开始做的时间隔了一两周,之前记住的到后来也忘了,现在记起来完全是和老师讨论过程中突然想起的。具体的时间方法不是在每个semaphore里保留一个有NR_PROCS元素的数组或链表,因为这样做很占空间,而且很浪费。而是定义一个公用的有NR_PROCS元素的数组,数组的元素里有一个指向链表的下一个元素的指针,然后只要在semaphore里定义一个head和tail指针就可以,通过这两个指针来查找那些waiting process。这两个问题搞清了之后,project基本上没有大碍了,周一下午和晚上忙了一阵之后算是完成了,提交了project。

交了之后没多久,老师就grade完了,我的project 3还有一个问题,有关errno的设置。描述上说的是global variable,我以为只要直接设置就行了,但实际上这里头有很多文章,待我细细道来。这个Project做的是实现semaphore函数,比如create,init,p,v,delete等操作。实现分两层:一是用户层面的,提供一些可供用户调用的函数借口,这个老师已经给了;二是kernel里的,在process manager里实现对这些用户函数的响应,这个是我们要完成的。对于用户调用的函数,得有返回值,出错的话还得设置对应errno。minix里对system call的实现和message passing紧密相关。这也导致对返回值和errno的处理变得复杂。看了多遍源码之后,我才摸清返回值的处理问题,但忽略了errno的设置。我的程序里直接在实现的kernel函数里设置errno,但这时候程序处于pm的context中,设置的errno只是对应kernel里的pm的errno值,并不会反馈到用户程序中。所以errno不能直接这般赤裸裸的设置,而得通过message passing的方式完成。看了代码之后,大概知道如何做,试着修改了一下,没有成功,有错误。下一周内我得把它完成,做事要善始善终。

Project 3算是过了,然后只有一天的时间准备final,老师给定了范围。我把范围内涉及到的函数代码悉数过了一遍,就这样了,也没时间看课件和书本了。考试有两道大题,第一道是关于interruption mechanism的,第二道是关于pm exit的,即process调用exit后的处理过程。我先答了第二道,应该没有问题。第一道有两小题,题目描述看的我有点晕。第一小题算是答得差不多吧,第二小题就有点瞎扯了,希望没扯错。bless。我想拿A。PS:上学期修的CIS706到这时候才给成绩,拿到A了。现在的GPA是3.9/4.0。全A的梦早就破灭了,但我还是希望不要太残酷,不想再拿A之下的了。

Course结束了,回到Research上。好不容易周五逮到老板有空的时候和他谈了一下暑假的安排。大概意思是暑假就是coding,做实现,有两个重点。一个是我现在正在写的,CPSNET,general framework for CPS,暑假内完成并实现一个具体应用,应该是vehicle的问题,然后弄一篇paper出来;另一个是回顾一下上一篇paper的东西,找几个突破点,在它的基础上更进一步,再弄一篇paper。我也和老板夸下海口,这个月之内完成general framework的coding,6,7,8三个月做具体的应用实现。既然说了,就好好做吧。这个暑假,希望research有突破,为paper,为毕业。

暑假,我自己也有个充电计划,看书和编程,提高动手能力吧。注意力集中在Unix/Linix的C编程和操作系统理论上,这方面主要是三本书:APUE2e,Unix操作系统设计,Linux Shell。APUE2e之前已经看完了,现在重新过一遍,把书上的程序和习题都做一遍。Unix操作系统设计已经看完了File System的部分(到第五章为止)。Linux Shell主要是常用的Linux命令,编辑器和shell编程。PS:看过了Unix操作系统设计之后再看APUE2e感觉真的很不一样,之前看APUE2e时不知道Unix OS的数据结构等信息,看得半知半解。现在好了很多,了解了基础再看其上的应用,看得很自然,容易记住。

除了Unix和C,还想看看C++ Primer和算法。Research中的coding用的正是C++,正好借此机会补一补。算法的东西到哪都有用,本科时学过算法课,来这后也学过,但依旧没能记住多少。花点时间补一下,找intern时应该用得上。

我的计划没有具体到几点起床,几点到几点看什么书等的程度,算是一个大概的方向。至于时间,我觉得是,保证休息时间的情况下,好好地利用时间。

给自己加油!

PS:今天得知一位学长PhD毕业了(才花了四年),进Google工作了。偶像啊,我也得努力了。

读书笔记 – APUE2e Chap3(2)

May 14th, 2011 No comments

PREAD

Header: #include <unistd.h>

Declaration: ssize_t pread(int filedes, void *buf, size_t nbytes, off_t offset);

Return: number of bytes read, 0 if end of file, –1 on error

Parameters:

filedes: file descriptor

buf: buffer to store the contents that have been read

nbytes: number of bytes to be read

offset: offset from the start of the file

Comments:

Equivalent to: lseek+read, except that pread is atomic.

Reads up to nbytes bytes from file descriptor filedes at offset offset (from the start of the file) into the buffer starting at buf. The file offset is not changed.

The file referenced by filedes must be capable of seeking.

Read more…

读书笔记 – APUE2e Chap3(1)

May 13th, 2011 No comments

**********************************************

Unbuffered I/O (File I/O): each read or write invokes a system call in the kernel. Part of POSIX.1 and the Single Unix Specification, but not part of ISO C. Including open, read, write, lseek, close. (Different from Standard I/O)

**********************************************

file descriptor (say, filedes): 0<= filedes <= OPEN_MAX

0 (STDIN_FILENO in POSIX): standard input

1 (STDOUT_FILENO in POSIX): standard output

2 (STDERR_FILENO in POSIX): standard error

Read more…

新的博客订阅按钮

May 13th, 2011 1 comment

之前博客的feed一直是用feedsky烧制的,但现在feedsky已经不行了。某天不小心在feedsky上把俺博客对应的feed给删除了,后来怎么加都加不上了,导致原来是用的博客feed订阅地址(http://feed.feedsky.com/zhuhuang)失效。原来博客右上角的那些订阅按钮是通过feedsky生成的,现在博客的feed失效,不知道是否会影响到订阅。其他也没有比较合适的feedsky替代品。

也罢,不偷懒了,花了点时间,到抓虾,鲜果,九点,有道,QQ邮箱,Google Reader各自的网站上找订阅按钮对应的代码,把原来feedsky生成的那些订阅按钮都替换了。如果有人以前通过那些订阅按钮订阅了本博客的,请重新订阅一次吧。现在的没有使用feedsky的feed地址(http://feed.feedsky.com/zhuhuang)了,而是直接用博客的feed地址(http://www.zhuhuang.com/feed/)。

0507之一周瞎扯

May 8th, 2011 1 comment

Manhattan的春天是短暂的,最近的气温一直呈上升态势,宣示着夏日的到来,二十几度的天气过去了,三十几度的天到来了。我不讨厌夏天,但有一点让我比较困扰,夏天会让人睡得不爽,不是早上热醒,就是晚上热得睡不着。房子里有空调,但是安在客厅里的,晚上除非不关门,否则感觉不到什么效果。暑假里我要少开些车,弄辆自行车,骑着去系里。我喜欢那种在学校里飚自行车的感觉,暑假人少,正好适合。

好了,该做总结了。

CIS722周四结课了,下周三final,开卷。话说,课都结束了,Project 3我还没写完,真的很拖。Project 3要我们实现Minix上的Semaphore系统调用,包括initialize,create,p,v,delete这些semaphore操作和这些函数的调度函数do_sem。之前上课时对system call没有深入去了解,为了做这个project,我minix的从interrupt产生到调用对应的system call处理interrupt的代码跟了一遍,还挑了几个例子看了一下,比如do_fork,do_waitpid等。就像老师说的,这样trace code让人获益匪浅,基本上把原理和处理过程搞清楚了。project的代码我完成了,在testing。剩下的问题很诡异,一直不明白为什么会出错。我需要在process manager的main函数里初始化semaphore的数据结构。我把semaphore.h加入到main的头文件。正是这个include语句,老是报错,我觉得不应该有错误。semaphore.h和main.c在同一个文件夹,我用#include “semaphore.h”应该是对的(我也试了其他的,在semaphore.h前加路径)。诡异的地方在于,semaphore.h只包含了data structure的定义,未涉及到其他头文件,但我把它放到main.c的include语句组的不同位置(我挨个试了一遍),会爆出不同的错误,经常是说#include “semaphore.h”的下一句include开头的“#”is not expected。我把#include “semaphore.h”放到include语句的最后,错误原因是“./semaphore.h”的“.”is not expected。“.”应该是main当前所处的文件夹,这应该没有错。在我编译老师提供的其他文件上,头文件也出现了问题。不知道老师的机子上是否成功了,至少在我用的上面,编译会出问题。后来我调整了那些文件里的include语句顺序才能通过编译。这也让我怀疑是不是minix自身的问题,对include语句的处理上,不得而知。今天我就继续test,力求把#include “semaphore.h”导致的问题解决了,如若不行,只好向老师咨询一下了。昨晚为了这问题,调程序调到三点,到最后都想骂人了。(这个问题解决了,原来是semaphore.h定义的某个变量pid的问题,似乎和某个头文件里的变量重名了,但也不至于出错,因为我把该变量放在结构体内的,这错报得很奇怪。又出现了新的问题,怎么把我写的这些函数弄成system call,我在测试的时候返回的errno是38,function not implemented,这就意味着test函数没有如我预想的那样调用do_sem。这个问题也解决了,原来是把project放错了地方,默认是放在/usr/src/cis722_projects里的,但我直接放在了/root底下。

CPSNET:这周在这个项目上没有什么进展,我没花多少时间在上面。只是周一的时候把project的结构重新调整了一下,并build了当前的project,为了得到message对应的头文件和CPP文件,因为随后的代码需要用到其中的函数。待我考完final,就要好好写了。因为CPSNET的代码主要是用C++写的,而我的C++本来就不熟,而且隔了那么久没用,深深让我怀疑我是否真的学过C++。于是只好看书恶补。我看C++ Primer,这周看了Library Types,包括string,vector,iterator,biset,还有bitwise operator和type conversion。这次我算是从头看起,但是跳着看的。那些我还能记住的比较熟悉的就跳过去了,只看我不熟的部分。那么厚的一本书,实在无法一页一页看。发现这样看书更有效率,更容易记住看过的东西。看得太多,脑子一下子无法记住,反而得不偿失,所以挑重点看比较好。现在已看到两百多页,速度还可以,那么厚的书也不会让人感觉到压力,甚好。

Unix操作系统设计这周只看了一个小节,mounting and unmounting file systems,包括mount和unmount两个函数。看这书的感觉真的非常好,讲的东西是我之前了解但只知道表面的,现在是将之层层剥离,深入了解内部,让人有兴趣去读。

周五是子俊和达汝同学的wedding ceremony。他俩和我一年来到曼哈屯的,也算是老相识了,真心祝福他们。这该是我到这后第一次参加学生的婚礼。

这周看了三部电影《单身男女》,《洞穴》和《迷踪:第九鹰团》。不评价。NBA继续着,Heat表现还不错,希望他们成功做掉凯子,挺进东部决赛,然后挺进总决赛。

周日母亲节。昨晚给老妈打了个电话,祝她节日快乐。老妈一般是不会知道什么节日的,在家整天忙碌着。我和她说今天是母亲节。她忙着带慧欣,这小家伙一直要强她的手机,导致老妈也无法专心听电话,寒暄了几句就挂了。

这个暑假,我要闭关修炼,“打怪升级”,全面提升自己,不成才便成虫。