0

嗨,伙计们,我有问题,希望你能帮助我。我有一个关于为我的操作系统制作一个简单的脂肪系统的作业。我最后有我的代码。我在我的 floopy_0 上写了一些字符串,我正在阅读它,但我怎么能在上面编辑或制作一些东西呢?我不知道。在我读过我的软盘后,我必须阅读我的胖系统,我必须解密它。所以我必须在 floopy 上访问我读取的 fat 文件,而不是在屏幕上进行比较或显示。它是如何工作的:在表标签中我有我的 cripted 数据,前 7 个字节是我的程序名称,8 是它的种类-可以是 0 或 1(asm 或 txt)9-10(clinder 编号)11-12(扇区编号) 13(磁头编号)和 14-15 是大小(它有多少扇区)。例如:

table db "apple  0001002", 0Dh,0Ah 
  db "orange 0010102", 0Dh,0Ah 
  db "clean  0020502", 0Dh,0Ah 
  db "story  0001502", 0 

这就是我在我的 clinder 1 扇区 1 和头部 0 上写的内容(我的脂肪在哪里)。我必须从读取的文件中读取 clinder 扇区和磁头编号才能读取在我的内核中键入的程序,这是我的问题:“我如何使用它在屏幕上显示以及我可以做些什么来选择程序?例如:当老师在我的内核中写“apple”。它必须启动苹果程序。我有程序,我可以运行它,但我不知道在我读了我的脂肪并比较我的程序列表中的“apple”之后该怎么做。我可以运行如果它在我的列表中,但如何检查它是否在我的列表中???

最大的问题是我必须从我的 FLOOPY 中读取我的 FAT,并且我必须检查老师给我的姓名是否已阅读 FAT 文件?请帮我我怎么能做到这一点?

4

1 回答 1

0

编辑文件是将其内容读入内存,在内存中更改其内容并将其写回磁盘。

例如,在接收到openFile来自用户应用程序之一的系统调用时,您加载文件,记录它正在被应用程序使用(因此没有其他应用程序可以同时使用它),创建包含数据的文件信息块像一些资源标识符(例如文件路径),无论是打开还是追加,一个文件指针保存文件内部当前要访问的内存地址(例如,最初为 0 并随着读/写操作向上增长)、文件的大小以及内存中文件开头的地址。此外,指示内容是否已被修改的标志也很有用。完成后,您将文件信息数据结构的地址返回给用户应用程序。

然后应用程序可以调用,将指针与其他必要参数一起传回,以readFile从文件中读取给定数量的连续字节,writeFile从缓冲区向文件写入给定数量的字节,seekFile文件指针设置为文件中的给定偏移量(文件缓冲区中的第 *N* 个字节,即内存中文件的基地址 + N),并closeFile单独使用句柄(信息块的地址)从内存中写回更改到磁盘并释放文件,以便其他进程可以使用它。

当然还有比这更复杂的方法,但是这个简单的东西对于小型系统来说效果很好。


显示数据是另一回事,是另一个模块的责任(实际上甚至不是一个模块,而是其中的几个)。在这里,事情围绕着 80x25 字符屏幕展开,从 0xB8000 (0B800h:0000) 开始排列为连续的内存区域,每个字符都有两个字节:第一个字节用于 ASCII 字符代码本身,第二个用于元属性,如背景颜色、前景颜色,闪烁。字符颜色用 4 位指定,最高位是“light-flag”,其余位分别用于 RGB(例如 1100b 或 0Ch 是浅红色)。上半字节控制背景颜色,但最高位,而不是“灯旗”,是闪烁的旗帜,对于 BG you

请记住,您作为内核不是显示文件数据的人。决定如何处理从文件中读取的数据不是您的责任。用户应用程序可能会调用您的writeLine系统调用来显示任何字符串 - 这也可能是它刚才向您请求的文件数据。


稍微偏离主题,但属于上一段的是,用户键入命令(或单击其中的窗口和按钮)的shell只是一个常规用户应用程序,它根据用户请求利用操作系统功能。

于 2013-05-05T17:44:28.797 回答