LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1139|回复: 9

read/write的运作方式不懂

[复制链接]
发表于 2004-2-1 20:57:40 | 显示全部楼层 |阅读模式
看到对read/write 函数的描述是:

在read/write方式,内核要在用户缓存和它自己的缓存之间进行复制,然后用其缓存做I/O。

什么是用户缓存?什么是它自己的缓存?


对mmap()的描述是:
内核直接对映射存储缓存作I/O操作。

mmap是我心中默认的方式。
发表于 2004-2-1 23:38:08 | 显示全部楼层
我只知道read函数是从一个套接字读取数据放到一个缓存里
write则相反。。。
发表于 2004-2-1 23:41:29 | 显示全部楼层
复杂,关注中。。。。。。
发表于 2004-2-2 01:29:33 | 显示全部楼层
你是不是说gcc的read/write?
搞不懂你的意思

man 2 write
ssize_t write(int fd, const void *buf, size_t count);

说write 从buf所指的缓存中读取count个字节数据写入fd所对应的文件描述符(socket等)中去,返回实际写入数据字节数 -1为没有写入,出错则错误代码保留在errno变量中
是系统调用,就是直接内核的调用了
用户缓存就是 buf(当然你先要malloc申请)
内核缓存??不知道
对于mmap
quote:
”对mmap()的描述是:
内核直接对映射存储缓存作I/O操作。
mmap是我心中默认的方式。“

搞不懂

man 2 mmap
void  *  mmap(void *start, size_t length, int prot , int flags, int fd,off_t offset);
DESCRIPTION
The mmap function asks to map length bytes starting  at  offset  offset from  the  file  (or  other object) specified by the file descriptor fd into memory,preferably at address start.  This  latter  address  is  a hint  only,  and is usually specified as 0.  The actual place where the object is mapped is returned by mmap, and is never 0.

大概就是mmap这个函数从fd文件描述府中start指向的地址开始偏移offset字节找length长的数据,(start一般设为0);并把这些数据复制,最后mmap返回这些数据的地址。
port参数是描述内存保护模式的设置(一定要不能对文件的open mode模式有冲突),可以用PORT_NONE或者用OR(就是或操作)方式采用一中或几种PROT_* flags。

不知翻译的对不对?
发表于 2004-2-2 19:28:57 | 显示全部楼层
楼主指的是系统调用还是C语言的标准库函数调用。两者虽然名字相同,但它们是不一样的。
 楼主| 发表于 2004-2-3 18:15:24 | 显示全部楼层
不是指write/read AND mmap 的语法,是想知道read/write函数具体是怎么运作?

这句的描述不清楚。
在read/write方式,内核要在用户缓存和它自己的缓存之间进行复制,然后用其缓存做I/O。

什么是用户缓存?什么是它自己的缓存?
发表于 2004-2-3 18:46:45 | 显示全部楼层
这个问题其实去看看操作系统的原理就清楚了。
对于cpu来说,进行I/O操作时,不可能一直等待I/O处理完成才去处理其它任务,而是通过在核心中定义一个缓冲,然后让DMA来把数据从设备中传送到缓冲,传送完成之后,由DMA以中断方式通知cpu来进行下一步处理(通常就是把数据再复制给用户缓冲)。如果不定义一个核心缓冲,那么cpu就必须直接把数据用设备中读入用户自己定义的缓冲中,整个数据传送过程都需要cpu的干预,以高速的cpu来等待低速的设备传送数据,效率将会非常低下。这就是要定义一个核心缓冲的原因。
 楼主| 发表于 2004-2-3 20:49:10 | 显示全部楼层
谢谢麥頭兄和版主的讲解,我的意思是C应该使用mmap的方式读或些数据,想不到还有比较笨的方法,笨的方法怎么会不淘汰它?
发表于 2004-2-4 20:21:53 | 显示全部楼层
每种I/O方式都有它的特点和适用场合。如果在各种条件下都不适用,这些技术恐怕早就被淘汰了。
mmap虽然在处理大文件时很快,但它也有限制,就是文件的尺寸必须是内存页的整数倍。如果小于这个尺寸,剩余部分就要用0填充。宝贵的内存资源就这样被浪费了,难道不可惜吗?
 楼主| 发表于 2004-2-5 00:36:23 | 显示全部楼层
:thank 长见识了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表