Jiajun's profileCyan MysteryPhotosBlogListsMore ![]() | Help |
|
|
May 18 毕设终于完成大前天正式发布,由于MSN Space一直当机,现在才发布消息
毕设创意的初衷是因为去IBM后要接触很多这种系统级的东西,因此借机深入学习操作系统实现,
以及自学欠缺的编译技术。因此作品就是FileSystem+ScriptInterpreter,一个简单的模型。
整个项目除了之前叙述的文件系统以外,更有意思的就是架构在其上的脚本解释器。
这是我为其设计的一个小型脚本语言,叫ML(My Language)。
麻雀虽小,五脏俱全,ML语言特性支持流程控制( if-else ; while ; for-range ; for-iteration ; ),变量,表达式计算,赋值,输入输出,系统程序调用(调用储存在我自己的文件系统上的程序,主要是对我的文件系统进行文件操作);作为动态类型语言,支持三种数据类型String , Integer 和 Void ,并且提供对以上数据类型的表达式计算支持 ; 支持动态编程(写完一个语句马上执行),和执行脚本文件; 语句,表达式支持嵌套 ;
基本上,ML具有一个脚本语言应有的大多数特性。下面写个示例程序,展示一下:)
print "variable declaration"
var a
var b
var c
print "assignment"
a = "/bin"
print "now listing the file under '/bin' in my file system"
v_ls ( a )
print "now we repeat"
for a in [ 2 to 5 ]
do
for b iter { "hello" , "ML" }
do
c = "/bin" + a + b ;
print "we make a file"
v_mkfile( c )
print "we write a file" v_wrfile( c , "This is a test string" )
print "we read a file" v_rdfile( c )
done
done
print "now listing the file under '/bin' in my file system, again"
v_ls ( "/bin" )
print "now we calculate"
print "hahaha" + a + b ;
print 10 + 20 * 4 ;
print "we take a while"
a = 10
while a>=0
do
print a
a = a - 1;
done
print "we try if" for a in [0 to 9]
do
if a>6
do
print "Mr.Big:" + a ;
done else
do
print "Mr.Small" + a ;
done
done
以上代码全部可运行(经测试)
整个项目(脚本解释器+文件系统)包含8226行C代码(特意写了个小程序计算了一下)
词法分析阶段和语法分析阶段借住了FLex,Yacc工具
手工写的在6000行左右吧
这个折磨我脑细胞和手指两个月的东东终于结束了,剩下的工作就是写成论文了
祝我好运
March 20 写一个文件系统作为毕业设计的一部分,一个Unix-like的文件系统正在被实现着。 它支持Unix文件系统的基本功能(读,写,删除,修改 目录/文件) 我把一个2进制文件虚拟成一个硬盘,在其上建立此系统。 文件组织,存储分配的算法基本参照Unix内核。 规格如下: Total Size:16MB (16*1024*1024 Bytes) Section Size:1024 Blocks Block Size:1024 Bytes Architecture: Super Block for control information I-node List storing i-nodes for specifying files Data Blocks binary data storage Operation Supported: File/Directoy naming Multiple blocks "inside" one file Making/Deleting/Opening/Writing/Reading files/directories and changing there names. File system navigation & traversal. Features Not Supported: Additional file information such as Time of Last Altering or Time of creation. Indirect file blocks. Logical file addresses. (To be implemented later) Buffering for blocks and inodes. (To be implemented later) 上个星期开始些文档,上周末开始编码。刚刚实现了建立/删除/写普通文件。预期会以 文件-目录-块缓冲-索引块缓冲 的顺序完成。 December 07 终于装了个让我满意的Linux,真是享受啊这些天也变成装机王子了 RH9,FC4,Debian 一个个装过来 今天终于在台式机上装了向往已久的Suse 10 那显示效果真爽啊(尤其是对于长期在本本上用800x600的我……) 写程序都倍儿(用京腔)有劲啊 Suse10自带了一个叫做amaroK的音乐播放器 提供了一些国外的网络音乐广播地址 于是我addicted in no time 今天看到控制设备驱动程序一章 还满有意思的 Linux下写程序最大的感受就是 所有的实现,所有的机制,所有的接口都很透明 也许是因为封装少的缘故把 可以不太费劲的调用一些很低层级的机制 还有就是这帮写C程序的家伙真是牛x 很多命令行工具功能都非常强劲 为了实现那些功能,他们设计的机制也挺好玩的 比如把设备抽象为文件,就大大简化了编程 要继续看书才行了 I've got more than half a book left to get on with November 29 Fedora不认识我本本的显示器.....只有在800x600的分辨率下工作,极为不爽 这两天学会了安装一些常用的东东 apt-get, xmms, Acrabat Reader... 挺麻烦的:P |
|
|