getblk 内核服务

用途

将缓冲区分配给指定块。

语法

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/buf.h>
struct buf *getblk 
( dev,  blkno) 
dev_t  dev; 
daddr_t  blkno;

参数

描述
dev 指定包含所要分配的块的设备。
布尔克诺 指定要分配的块。

描述

getblk 内核服务首先检查指定的缓冲区是否在缓冲区高速缓存中。 如果缓冲区驻留在该处,但正在使用中,那么将调用 睡眠 服务以等待缓冲区不再使用。 在唤醒时, getblk 服务会再次尝试访问缓冲区。 如果缓冲区在高速缓存中并且未在使用中,那么会从空闲列表中除去该缓冲区并将其标记为 "繁忙"。 然后返回其缓冲区头。 如果缓冲区不在缓冲区高速缓存中,那么将从空闲列表中获取另一个缓冲区并返回。

执行环境

只能从 进程环境 调用 getblk 内核服务。

返回值

getblk 服务返回指向缓冲区头的指针。 缓冲区头 (buf结构) 的 b_flags 字段中 B_ERROR 的非零值指示错误。 如果发生此情况,那么调用者应使用 brelse 内核服务来释放块的缓冲区。

在支持存储密钥的平台上,将从受 KKEY_BLOCK_DEV 内核密钥保护的存储器中分配缓冲区头。