I/O子系统
- runtime system(runtime environment/runtime)
- I/O子系统
- 用户空间I/O软件(用户I/O软件)
- 内核空间I/O软件(系统I/O软件)
- 与设备无关的I/O软件
- 设备驱动程序
- 中断服务程序
- I/O硬件
- I/O总线结构
- I/O接口(设备管理器,I/O端口)
- I/O设备
- 用户程序中I/O函数
- C标准I/O库函数
- 文件I/O函数
- 控制台I/O函数
- 缓冲
- _IOFBF: fully buffered
- _IOLBF: line buffered
- _IO_NBF: no buffering
- 系统调用封装函数
- 头文件unistd.h
- int creat(char *name, mode_t perms);
- perms:访问权限:文件拥有者+拥有者所在组成员+其它用户的读、写、执行权限
- int open(char *name, int flags, mode_t perms);
- perms = 0: 非创建方式
- flags: 定义在 fcntl.h(System V UNIX)或sys/file.h(BSD) 中
- O_RDONLY
- O_WRONLY
- O_RDWR
- O_WRONLY | O_APPEND
- O_RDWR | O_CREAT
- O_WRONLY | O_CREAT | O_TRUNC
- 返回值:成功为文件描述符,失败为-1
- ssize_t read(int fd, void *buf, size_t n);
- ssize_t write(int fd, const void*buf, size_t n);
- long lseek(int fd, long offset, int origin)
- int stat(const *name, struct stat *buf); 获得metadata
- int fstat(int fd, struct stat *buf);
- stat 结构
- st_dev 设备ID
- st_ino 节点编号
- st_mode 文件访问权限和类型
- st_nlink 连接链的数目
- st_uid 文件拥有者ID
- st_gid 文件拥有者组ID
- st_rdev
- st_size 文件大小
- st_blksize 块大小
- st_blocks 块数
- st_atime 最近一次访问时间
- st_mtime 最近一次修改时间
- st_ctime 最近一次修改文件状态的时间
- void close(int fd)
- int unlink(const char* pathname)
- terminal: 键盘+显示器
- 文本文件(ASCII文件):每行以’\n’结束
I/O硬件与软件接口
- 机械部分
- 北桥芯片:MCH, Memory Controller Hubb, 主存控制器集线器,本质是DMA控制器
- 南桥芯片:ICH, I/O Controller Hub
- FSB: Front Side Bus, 前端总线,处理器总线,处理器和北桥芯片信息交换
- QPI: Quick Path Inter-connect
- 储存器总线
- I/O总线
- I/O接口
- I/O编址
I/O控制方式
- 程序之间控制I/O方式(polling)
- 中断控制I/O方式
- 处理器调度程序
- 进程三状态:运行态、就绪态(就绪队列)、阻塞态(被挂起)
- PIC: Programmable Interrupt Controller
- IRQ线连到PIC的IRQ引脚
- 中断响应优先级–中断查询程序/硬件判优电路
- 中断处理优先级
- DMA控制I/O方式
I/O内核空间软件
- 与设备无关的I/O软件
- 设备驱动程序统一接口
- 缓冲区处理
- 错误处理
- 打开关闭文件
- 逻辑块大小处理
- 设备驱动程序
- 中断服务程序