二十五、设备驱动程序(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)在内核中初始化、注册设备

struct file_operations {
  struct module *owner;
  loff_t (*llseek) (struct file *, loff_t, int);
  ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
  ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
  int (*mmap) (struct file *, struct vm_area_struct *);
  unsigned long mmap_supported_flags;
  int (*open) (struct inode *, struct file *);
  int (*release) (struct inode *, struct file *);
  int (*flush) (struct file *, fl_owner_t id);
  int (*fsync) (struct file *, loff_t, loff_t, int datasync);
  int (*lock) (struct file *, int, struct file_lock *);
  ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
  long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
  long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
  int (*flock) (struct file *, int, struct file_lock *);
  ...

四、GPU的驱动

Single Instruction, Multiple Thread

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

五、存储设备的抽象

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

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

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

2、大吞吐量

(1)使用 DMA 传送数据

3、应用程序不直接访问

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值