• why
    2019-06-13
    - 用设备控制器屏蔽设备差异
        - I/O 设备多种多样, 通过设备控制器范文设备( 类似代理商 )
        - 控制器像小电脑, 有芯片和寄存器, CPU 可通过读写寄存器访问设备
        - I/O 设备可分为两类: 块设备, 信息存于块中, 有自己的地址, 例如硬盘; 字符设备, 信息为字节流, 无法寻址, 例如鼠标.
        - 块设备控制器有缓冲区, 数据缓冲区即内存映射 I/O; 控制器寄存器有 I/O 端口, 可通过汇编指令操作.
        - 如何通知设备操作已完成:
            - 轮询检测控制器寄存器的状态标志位
            - 中断通知, 通过硬件中断控制器通知 CPU; ( 而软中断是在代码中调用 INT, 可触发系统调用 )
        - DMA 功能, 设备在 CPU 不参与下, 自行完成内存读写; 由 DMA 协调控制磁盘控制器, 并发送中断通知 CPU 操作完成
    - 驱动程序屏蔽设备控制器差异
        - 设备控制器不属于操作系统的一部分; 而驱动程序属于, 可以被内核代码调用.
        - 驱动程序应有统一的接口, 中断处理也在驱动里完成
        - 驱动初始化时, 注册中断处理函数; 中断统一出发 do_IRQ, 其找到注册的中断处理函数并执行
        - 对于块设备, 驱动与文件系统之间需要通用设备层; 通用设备层实现与块设备相关的通用逻辑, 位于与设备无关的操作
    - 用文件系统接口屏蔽驱动程序的差异
        - 统一设备名称, 设备在 /dev/ 下有特殊设备文件, 其有 inode 但不关联存储介质数据, 只建立与驱动的连接; /dev/ 是在 devtmpfs 文件系统下, c→字符设备文件, b→块设备文件; 设备号: 主设备号(驱动程序), 次设备号(相应的单元); 可对设备文件使用文件的操作命令
        - 添加新设备, 需要安装驱动( Linux 中即加载一个内核模块 ), 用 lsmod 查看加载的内核模块, 可通过 insmod 安装; 有了驱动, 可用 mkmod 在 /dev/ 下创建设备文件.
        - 或 /sys/sysfs 中是实际设备数的反映
            - /sys/devices 所有设备层次结构
            - /sys/dev char block 中用设备号链接到 /sys/devices 中
            - /sys/block 所有块设备
        - 守护进程 udev
            - 内核检测到新设备插入, 或创建 kobject 对象, 通过 sysfs 展现给用户, 并发送热插拔消息, udev 监听到消息并在 /dev/ 中创建设备文件
            - ioctl 可用于配置和修改设备信息.
    展开
    
     7
  • 安排
    2019-06-08
    直接读写操作/dev/sdb是操作的裸设备吗?也就是这时候的读入和写出的数据都不经过文件系统?
            直接读写/dev/sdb1具有相同的效果吧,只不过sdb代表整块硬盘,sdb1只代表一个分区,但是他们都是裸设备?
            只有操作文件才会经过文件系统层吗?

    作者回复: 是的,读写操作/dev/sdb是操作的裸设备,所以读写他没啥意义。也不经过文件系统。只有mount之后,才走文件系统层

    
     3
  • 刘強
    2019-06-19
    老师,可不可以这么理解。假设硬盘被格式化为ext 文件系统。如果我们直接读写裸设备,相当于绕过ext文件系统的这部分代码直接让驱动程序指挥硬盘。当然这种指挥由于没有一定的规则,没有什么意义。而把文件系统挂载到某个目录下后,我们访问这个目录,相当于特定于ext文件系统的这部分代码代替我们刚才的“瞎指挥”,还是通过驱动程序操作裸设备,现在由于有了特定文件系统的规则,所以就能读写文件了。 这么理解文件系统 驱动程序 裸设备之间的关系,对吗?

    作者回复: 是的,裸写肯定会写坏

    
     2
  • 许童童
    2019-06-07
    这篇文章讲得很好,深入浅出,给老师点赞!
    
     1
  • 石维康
    2019-06-07
    在Linux正常运行的过程中,如果用 int 0x80来调用系统条用,是否要走文中所画的通用中断处理流程?

    作者回复: 要的

    
     1
  • hello
    2019-09-23
    在高速SSD设备上面创建文件系统,读写文件的速度非常慢。而通过/dev目录下的设备文件去读写SSD时,能发挥出他的性能。
    
    
  • 一塌糊涂
    2019-08-09
    麻烦问下 是在阻塞 和非阻塞 体现在哪
     1
    
  • 靠人品去赢
    2019-07-01
    ls -all 命令用的好多,这个块设备和字符设备之前只是一个概念。现在其实可以理解块设备就是类似于硬盘这种存储类的,而字符流类似于我们用的触屏,鼠标等更面向用户的输入输出设备。

    作者回复: 对的

    
    
  • kkxue
    2019-06-23
    [作业]
    插入U盘后:
    [root@openstack-rocky ~]# fdisk -l

    Disk /dev/sdb: 31.5 GB, 31490834432 bytes, 61505536 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0xcad4ebea

       Device Boot Start End Blocks Id System
    /dev/sdb4 * 256 61505535 30752640 c W95 FAT32 (LBA)

    [root@openstack-rocky ~]# ll /dev/sdb4
    brw-rw---- 1 root disk 8, 20 Jun 23 08:54 /dev/sdb4

    在openstack上创建卷(硬盘)后:
    Disk /dev/mapper/cinder--volumes-volume--6549d51c--9c4f--47f0--aaa6--5bf924b206ec: 1073 MB, 1073741824 bytes, 2097152 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 65536 bytes / 65536 bytes

    [root@openstack-rocky ~]# ll /dev/mapper/cinder--volumes-volume--6549d51c--9c4f--47f0--aaa6--5bf924b206ec
    lrwxrwxrwx 1 root root 7 Jun 23 09:01 /dev/mapper/cinder--volumes-volume--6549d51c--9c4f--47f0--aaa6--5bf924b206ec -> ../dm-7
    展开
    
    
  • alexgzh
    2019-06-11
    /dev 下的文件和设备驱动程序关联,通过对/dev 下的文件进行api操作可以和设备互动

    作者回复: 是的

    
    
  • 大龄小学生
    2019-06-09
    买了个新机,安官网下的centos,安不起,查网上说要改几个配置,毛用没有,好吧,ubuntu,安装十分畅快,想从另一个机子登,ssh,远程桌面,按网上的改了十几个配置,重装系统四次,然而毛用没有,ssh远程桌面能给用一个我就很好了,现在只能说windows万岁。

    作者回复: windows单机好用,集群难管理,越大的集群越难管理。因为业内很多开源工具都是用于linux的。当然微软会推出工具,但是可能就贵了。

    
    
  • 安排
    2019-06-08
    /dev/sdb这个设备文件是在devtmpfs文件系统上的,假设将这个设备挂载到/mnt/sdb目录下,这个时候读写这个硬盘上的文件时,最终是否还会通过/dev/sdb设备文件来找到设备驱动程序?毕竟读写文件最底层也是操作具体的磁盘。

    作者回复: 对的,这比较绕,后面会讲,这里涉及到三个文件系统,倒腾过来倒腾过去

    
    
我们在线,来聊聊吧