一、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)大量并发的访问 (操作系统中的进程都要访问文件系统)