停了两天电,忽然得空闲。找来破吉他,已然不成弦。

          丁丁当当敲,敲到电来到。为把时间捡,熬夜三四点。

从我的置顶随笔 x01.Lab.Download 中下载 x01.os.12.tar.gz, 解压后由终端进入 os 目录,输入 bochs  命令即可见到如下界面:

注意下面的四行,分别是 open,write, read, unlink 文件。调用代码如下:

 void TestA() {
int fd, n;
char path[] = "/test";
char bufw[] = "hello";
const int Len = ;
char bufr[Len]; fd = open(path , O_CREAT | O_RDWR);
Print("fd: %d\n", fd); n = write(fd, bufw, StrLength(bufw));
Print("write ok!\n"); close(fd); fd = open(path, O_RDWR);
n = read(fd, bufr, Len);
bufr[n] = ;
Print("read: %s\n", bufr); close(fd); if (unlink(path) == )
Print("unlink file: %s", path); // Spin("TestA");
while () {
MilliDelay();
}
}

TestA

按 F2 后,可切换到 tty2, 分别输入 hello 回车,this is a test 回车,可看到如下界面:

其调用代码如下:

 void TestB() {
char ttyName[] = "/dev_tty1";
int stdin = open(ttyName, O_RDWR);
Assert(stdin == );
int stdout = open(ttyName, O_RDWR);
Assert(stdout == );
char buf[]; while () {
write(stdout, "$ ", );
// Spin("write");
int r = read(stdin, buf, );
buf[r] = ;
if ( StrCompare(buf, "hello") == ) {
write(stdout, "hello world!\n", );
} else {
if (buf[]) {
write(stdout, "{", );
write(stdout, buf, r);
write(stdout, "}\n", );
}
}
} Assert();
while () {
MilliDelay();
}
}

TestB

两向对照,不难看出,文件的打开,读写,删除等功能已经具备,而 tty 也成功纳入了文件系统。

文件系统,本身并不复杂,不过超级块和索引节点两个结构。但文件系统的实现,却颇为繁难,不仅涉及到硬盘的操作,而且也涉及到 tty,进程间通信等诸多方面。在某种意义上讲,文件系统处于整个操作系统的核心。因为用户程序本身,也不过是个文件而已。搞清文件系统,一是看书,二是看代码,别无他途。

耗时多日,终于将文件系统运行成功,是为记。

x01.os.13: 文件系统的更多相关文章

  1. x01.os.14: 时间都去哪儿了

    时间都去哪儿了 老帕的“花儿为什么这样红”,三分钟引起六次欢呼,却败给了张碧晨.试想一下,如果是人气更高的陈冰,即使唱得和张碧晨一模一样,可能仍然不敌老帕,为什么张碧晨就能取胜呢?有这么个笑话:一人弹 ...

  2. x01.os.9: 进程切换

    进入内核后,当然不能无所事事.先创建三个进程,分别打印 A,B,C.虽然只是简单的打印,但却是一切扩展的基础,不可等闲视之. 进程切换,涉及一系列的寄存器需要保护,于是,就有了 ProcessStac ...

  3. x01.os.8: 加载内核

    在 x01.os.7 中,借助 freedos,学习了保护模式.但操作系统必须完成引导:boot, 加载内核:loader,kernel,进而管理process,memory,file等. 引导比较简 ...

  4. x01.os.7: 傻子一样的等

    傻子一样的等 昨日出差,办完事后,下午 2:30,准备进长途汽车站买票回家,被一人拦住,说可以带我进去,车马上就要开了,买票来不及.我以为是汽车司机,就跟了进去.进去后,他打了个电话,说 3:30 车 ...

  5. Mac OS X文件系统的附加属性@如何彻底删除

    有时候在 Mac 系统下读写 NTFS 分区时,会发现一些文件不能打开. 显示错误为: 项目“XXX”已被 OS X 使用,不能打开. 如果再终端 ls -al 命令一下就可以看到: -rwxr-xr ...

  6. x01.os.20: compile linux-0.11 on the ubuntu

    为什么学习 linux 正如不能依靠美国的 GPS 为我们的导弹指示目标一样,很难想像用运行 windows 的电脑去同美国进行信息战.而朝鲜的网络崩溃,再次警示国人,信息战.网络战离我们并不遥远.l ...

  7. x01.os.18: MBR

    硬盘不同于软盘,它是要分区的.这时,mbr(master boot record)便不可少了.安装 os 硬盘的第一扇区,开始有一小段不多于 446 字节的程序,然后是分区表 512-446-2 字节 ...

  8. x01.os.16: 添加功能

    准备工作  1.确保是 win xp,如是 win 8,运行 nasm 需按提示同意安装组件.  2.确保 src 和 z_tools 在同一目录下,nasm 已包含在 z_tools 文件夹中.  ...

  9. x01.os.12: 在 windows 中写 OS

    在 windows 中写操作系统,需要一系列的辅助工具.在此,要感谢川谷秀实!所有工具,都在 z_tools 文件夹中.有了大师的帮助,不妨也来尝试在 windows 中写一把 OS. 源代码及工具可 ...

随机推荐

  1. 树链剖分求LCA

    树链剖分中各种数组的作用: siz[]数组,用来保存以x为根的子树节点个数 top[]数组,用来保存当前节点的所在链的顶端节点 son[]数组,用来保存重儿子 dep[]数组,用来保存当前节点的深度 ...

  2. 使用CTE解决复杂查询的问题

    最近,同事需要从数个表中查询用户的业务和报告数据,写了一个SQL语句,查询比较慢: Select S.Name, S.AccountantCode, ( Select COUNT(*) from ( ...

  3. js的动态加载、缓存、更新以及复用(四)

    本来想一气呵成,把加载的过程都写了,但是卡着呢,所以只好在分成两份了. 1.页面里使用<script>来加载 boot.js . 2.然后在boot.js里面动态加载 bootLoad.j ...

  4. Linux下Oracle重启问题

    一.切换成oracle用户 $ su - oracle 注意:不要写成“su oracle ”不然是没办法使用下面的命令的. 如下所示:将会报:command not found的错误 二.使用命令 ...

  5. Windows安装apache2.4

    The primary Windows platform for running Apache 2.4 is Windows 2000 or later. Always obtain and inst ...

  6. spring web MVC

    详情:http://blog.csdn.net/mic_hero/article/details/50237627

  7. jQuery.buildFragment源码分析以及在构造jQuery对象的作用

    这个方法在jQuery源码中比较靠后的位置出现,主要用于两处.1是构造jQuery对象的时候使用 2.是为DOM操作提供底层支持,这也就是为什么先学习它的原因.之前的随笔已经分析过jQuery的构造函 ...

  8. ABAP 数据字典中的参考表和参考字段的作用

         ABAP数据字典中的参考表和参考字段的作用 大家最初在SE11中创建表和结构的时候都会遇到一个问题,如果设定了某个字段为QUAN或者CURR类型,也就是数量或金额的时候,总会要求输入一个参考 ...

  9. ArcGIS Desktop 遇到严重的应用程序错误

    由于项目初验,忙了几个月(感觉忙得并不值),好久都没更新博客了. 一.问题 在关闭ArcMap时,ArcGIS Desktop 遇到严重的应用程序错误.环境是Windows 10,新装的系统.以前出现 ...

  10. sharepoint2010升级到sharepoint2013的升级步骤和过程