ddstrategy 设备驱动程序入口点
用途
通过调度对块设备的读或写操作来执行面向块的 I/O。
语法
struct buf *bp;
参数
| 项 | 描述 |
|---|---|
| bp | 指向 布夫 结构,此结构描述执行数据传输所需的所有信息。 |
描述
当内核需要块 I/O 传输时,它将调用该设备的设备驱动程序的 ddstrategy 策略例程。 该策略例程调度对设备的 I/O。 这通常需要以下操作:
- 必须将一个或多个请求添加到需要由设备处理的 I/O 请求的列表中。
- 如果请求列表在上述新增项之前为空,那么必须调用设备的启动 I/O 例程。
必需处理
ddstrategy 例程可以接收具有多个 布夫 结构的单个请求。 但是,它不需要以任何特定顺序处理请求。
可以向策略例程传递要执行的操作的列表。 该av_forw布夫 头中的字段描述此以 null 结束的 布夫 头列表。 此列表不具有双重链接:av_back字段未定义。
块设备驱动程序必须可以执行多个块传输。 如果设备不能进行多次块传输,或者在特定条件下只能进行多次块传输,那么设备驱动程序必须通过多次设备操作来传输数据。
内核缓冲区与使用 buf 结构
在内核内存空间内预留一个内存区域,用于缓冲程序与外围设备之间的数据传输。 每个内核缓冲区都有一个头,即 布夫 结构,它包含执行数据传输所必需的所有信息。 ddstrategy 例程负责将此头中的字段更新为传输的一部分。
策略例程的调用者应该将b_iodone字段以指向调用者的 I/O 已完成例程。 当 I/O 操作完成时,设备驱动程序会调用 约奥 one 内核服务,然后该内核服务会调用在以下位置指定的 I/O 完成例程:b_iodone:NONE. 约奥 one 内核服务会从 INTIODONE 中断级别进行此调用。
以下项的值:b_flags字段是通过逻辑 ORing 零个或更多可能的b_flags字段标志值。
- 请勿修改传递到 ddstrategy 入口点的 布夫 结构中的以下任何字段:b_forw,b_back,b_dev,b_un,或b_blkno:NONE. 修改这些字段可能会导致不可预测的灾难性结果。
- 请勿修改使用 盖特布尔克 服务获取的 布夫 结构中的以下任何字段:b_flags,b_forw,b_back,b_dev,b_count,或b_un:NONE. 修改其中任何字段都可能导致不可预测的灾难性结果。
执行环境
必须将 ddstrategy 例程编码为在中断处理程序执行环境 (设备驱动程序下半部分) 中执行。 即,例程不应该触摸用户存储器,也不应该触摸缺页故障,也不应该沉睡。
返回值
ddstrategy 例程与其他设备驱动程序例程不同,它不会返回返回码。 任何错误信息都将在 英国石油 参数所指向的 布夫 结构内的相应字段中返回。
如果适用,那么必须使用 POSIX 1003.1 标准中为 read 和 write 子例程定义的返回值。