• 二十五、设备驱动程序(Linux设备驱动、GPU和COUA;存储设备抽象)


    一、IO设备抽象

    1、主要功能:输入和输出

    操作系统:设备=支持各类操作的对象(文件)

    1、read:从指定位置读取数据

    2、write:从指定位置写入设备

    3、ioctl:读取/设置设备状态

    二、设备驱动程序

    1、一些普通内核程序

    2、例子:

    (1)/dev/pts/[x]      //终端

    (2)/dev/zero        //零设备(读零)

    (3)/dev/null         //“null”设备(接收写)

    (4)/dev/random,/dev/urandom        //随机数生成器

    三、Linux设备驱动

    1、内核模块:一段可以被内核动态加载执行的代码

    (1)设备就实现了struct file_operations对象

    (2)在内核中初始化、注册设备

    1. struct file_operations {
    2. struct module *owner;
    3. loff_t (*llseek) (struct file *, loff_t, int);
    4. ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
    5. ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
    6. int (*mmap) (struct file *, struct vm_area_struct *);
    7. unsigned long mmap_supported_flags;
    8. int (*open) (struct inode *, struct file *);
    9. int (*release) (struct inode *, struct file *);
    10. int (*flush) (struct file *, fl_owner_t id);
    11. int (*fsync) (struct file *, loff_t, loff_t, int datasync);
    12. int (*lock) (struct file *, int, struct file_lock *);
    13. ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
    14. long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
    15. long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
    16. int (*flock) (struct file *, int, struct file_lock *);
    17. ...

    四、GPU的驱动

    Single Instruction, Multiple Thread

    共用PC指针的并行运算的运算单元

    五、存储设备的抽象

    1、以数据块 (block) 为单位访问

    (1)传输有 “最小单元”,不支持任意随机访问

    (2)最佳的传输模式与设备相关 (HDD v.s. SSD)

    2、大吞吐量

    (1)使用 DMA 传送数据

    3、应用程序不直接访问

    (1)访问者通常是文件系统 (维护磁盘上的数据结构)

    (2)大量并发的访问 (操作系统中的进程都要访问文件系统)

     

  • 相关阅读:
    vue高德地图(二):获取并标记用户位置
    基于SSM的古董拍卖系统
    每日一记 Java常用API
    基因调控网络及其模型
    实时大数据处理real-time big data processing (RTDP)框架:挑战与解决方案
    Java long类型转换易犯的错误
    nginx + tomcat
    taobao.trade.get( 获取单笔交易的部分信息),淘宝oAuth2.0接口,淘宝店铺订单接口,淘宝R2接口代码对接分享
    YOLO开发教程:从零开始构建自己的目标检测系统
    Java的数据类型
  • 原文地址:https://blog.csdn.net/liutit/article/details/125530213