BigOS/注释.md
2022-12-17 18:09:51 +08:00

20 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 代码注释
## 文件系统逻辑
文件系统里面的东西写的比较奇怪,他的目录构成是这样的:
```
<设备名>/<路径名>
```
在open调用里面有一个`get_index`(kernel/vfs.c:175), 它会自动把第一个`/`前面的部分作为设备名,然后在文件系统的描述符表中去匹配。然后返回设备编号。同时还会更新原来传进去的路径名,把前面的设备名称和`/`给去掉,取后面的路径名。这个东西写的真的很奇怪。。。由于它意义不明的代码,对于没有`/`存在的路径名,他的设备名就是路径名。
对于字节设备而言open/close/read/lseek/unlink貌似都是直接转发到`real_<operation>`(kernel/fs.c)里面也就是在初始化的时候给进去的函数指针。open/unlink有一个处理设备名的过程这个设计可以说是很智障了。write操作有些许不同他是将字节划分成512字节的小块写入设备不过他的实现好想有点小问题。。。
tty设备占据vfs表的前三项分别对应tty0-2然后每个设备都会分配一个超级块superblock不过这三个设备的操作都是一样的。
在文件系统初始化的时候会专门给tty分配inode然后把inode的`start_sect`设置为`(DEV_CHAR_TTY<<8)|<tty_id>`后面就用这个来确定tty号然后还会特地设置他的inode_nr以便后面匹配inode。然后在open的时候首先根据路径名从root inode开始匹配inode的名字然后返回一个inode_nr可以看做是inode指针会根据设备和inode_nr来获取最终的inode最后塞进文件描述符表中。
真正调用tty的地方是在kernel/fs.c:do_rdwt他会判断出打开的设备是啥然后调用`tty_read/write`来进行实际的读写。
## 键盘和tty