minix3中的read系统调用

1.定义

n = read(fd, buffer, nbytes);

参数说明:

fd:文件描述符

buffer:存放取回数据的缓冲区?

nbytes:要读取的字节数

2.步骤

对于调用者来说,一般是构造一条消息,包含以上三个参数,发送给系统,然后自己阻塞起来。

read函数从消息中提取出fd,找到相应的filp表项以及目标文件的inode。

然后将读请求分段,分段后每一次的操作都对应与一个块,即将跨块的操作分解。

分解之后,检查需要读取的块是否在高速缓存中。若不在,调入之。

fs(文件系统)向task(系统任务)发送一条消息,请求将数据复制到用户缓冲区中。当然复制也是分块操作的。

发送应答消息给库函数,库函数再回应用户(调用程序)。

read操作到此为止,但在具体实现的时候还有一步,就是预读下面的文件块,

这样需要的时候,他们就已经在高速缓存中了。

 

 

 

posted @ 2012-12-08 16:04  Jun14  阅读(263)  评论(0编辑  收藏  举报