文件系统(一)

    技术2025-04-24  27

    文件系统占得代码比较多,我们将从提供给用户的api开始逐步进入核心,顺藤摸瓜!最终获取文件系统的抽象+设备的组织。

    【设备号】

    /* * 系统所含的设备如下:(与minix 系统的一样,所以我们可以使用minix 的 * 文件系统。以下这些是主设备号。) * * 0 - 没有用到(nodev) * 1 - /dev/mem 内存设备。 * 2 - /dev/fd 软盘设备。 * 3 - /dev/hd 硬盘设备。 * 4 - /dev/ttyx tty 串行终端设备。 * 5 - /dev/tty tty 终端设备。 * 6 - /dev/lp 打印设备。 * 7 - unnamed pipes 没有命名的管道。 */

    【用户APIs】

      1. read

      2. write

      3. open

      4. close

      5. create

      6. link/unlink

      7. mknod

      8. chmod

      9. chown

      10. mount/unmount

      11. fstat

      12. access

      13. sync

      14. rename

      15. mkdir

      16. rmdir

      17. dup

      18. pipe

      19. ioctl

      20. fcntl

    【块设备驱动】

    linux/kernel/blk_drv/

    +---------  blk.h           块设备驱动头文件

    +--------- ll_rw_blk.c  块设备驱动模块接口文件, 向上层的文件系统提供

    +--------- floppy.c       软盘驱动程序

    +--------- hd.c             硬盘驱动程序

    +--------- ramdisk.c     内存虚拟盘驱动程序

    块设备驱动模块工作原理图:ll_rw_block()为对上层的接口函数

    【字符设备驱动】

    TTY抽象了字符设备,统一了字符设备的读写操作.

    共存着三个TTY设备,一个为控制台,2个为串行终端。工作原理类似

    现在考察下TTY的read_q, write_q, secondary中的内容及转换规则.

    copy_to_cooked()函数,这个行规则函数的主要作用是把read_q中的字符经过适当的处理后放入规范队列secondary,并且在处理过程中,若相应终端设备设置了回显标志,还会把字符放入写队列(write_q)中。从而最终在终端屏幕上显示出刚输入的字符。

    1. 串行设备直接将收到的字符放入read_q, 然后由TTY进行cooking:-),分发到secondary和write_q队列。

        将write_q的内容如实发送给远程。

    2. 控制台设备与串口设备类似,这里有意思的是字符序列(控制序列)规则。

        keyboard.S 是键盘驱动程序, 将功能键F1-Fn扫描码变换成转义字符序列并存放在read_q中,将普通按键变换成ascii码,将Ctrl+keyDown变换成控制字符(0x00--0x1F)。

        (ASCII:http://www.96yx.com/tool/ASC2.htm)

    A. 转义序列

    B. 控制序列

    【补充】

    TTY模块向上层文件系统提供的接口为tty_read() && tty_write()。

    a. 对输入字符的处理从copy_to_cooked()分析。

    b. 对输出字符的处理从con_write()分析。

     

    下一章总结高速缓冲区、文件类型、内核文件表、文件系统格式开始…

    最新回复(0)