高级Io操作

举报
xcc-2022 发表于 2022/05/27 09:33:50 2022/05/27
【摘要】 高级IO操作4.1 IOC ioctl函数接口 IOC命令码 ioctl接口主要是负责read及write不能完成的操作4.2 Proc文件目录在驱动中的作用proc中间层的作用驱动是服务与设备的,在linux中设备又是以一个设备文件体现在系统中,所以我们proc就是一个中间层可以在用户界面反映内核驱动功能的临时状态。4.3非阻塞io什么叫做资源可用与不可用,明确了我们采用非阻塞io的时候遇...

高级IO操作
4.1 IOC ioctl函数接口 
IOC命令码 ioctl接口主要是负责read及write不能完成的操作
4.2 Proc文件目录在驱动中的作用
proc中间层的作用
驱动是服务与设备的,在linux中设备又是以一个设备文件体现在系统中,所以我们proc就是一个中间层
可以在用户界面反映内核驱动功能的临时状态。
4.3非阻塞io
什么叫做资源可用与不可用,明确了我们采用非阻塞io的时候遇到资源不可用会返回一个错误信息EAGAIN
非阻塞的优点:发生错误信息的时候,用户可以第一时间感知
非阻塞的缺点:会占用部分cpu资源,导致拉低系统的效率
4.4阻塞io
当发生资源不可用,我们会将对应进程加入到等待队列。
阻塞的优点:将进程加入休眠后不会占用cpu,linux中默认的io模式
阻塞的缺点:发生错误信息的时候,用户无感知
等待队列:实现是wait函数来实现,当有对应唤醒的操作会执行wake up 函数将休眠的进程唤醒执行
注意:信号量,排他性,超时时间,等待队列头的初始化
4.5 io的多路复用
poll监听函数的应用
典型的例子就是老式的插线键盘,在使用键盘的时候我们涉及到两个驱动来支持一个功能。
我们就必须考虑两个驱动进程可能发生的阻塞情况,所以我们的解决方案是使用poll监听我们关心的事件
只要我们的键盘发生阻塞后,串口传输与键值转换中发生了任意一个我们关心的事件,我们的poll函数就会
强制将进程执行。
int   poll (struct pollfd*fds,nfds_t nfds , int timeout)函数原型  
struct pollfd*fds  类型指向struct pollfd 的fds指针 
pollfd类型的三个成员 
1、int fd poll要监听的文件描述符  
2、short events 监听的事件                              事件:POLLIN,POLLOUT 无阻塞的读,无阻塞的写
3、short  revents  返回的事件
nfds 我们监听的文件描述符个数
time out 超时值 以ms为单位
timeout为一个负数,一直监听我们的fd,直到我们的fd发生了事件,返回
Ret=Poll (fds,2,-1);   表示 我们监听fds成员 ,监听两个成员 ,一直监听直到返回事件产生
{
  if(ret=POLLIN)
}
4.6异步io
aiow或者aior读写控制块
异步io:阻塞发生在我们驱动层面,可以用这点区分之前的三种io模型,异步io同时具备了非阻塞io的特点以及阻塞的特点。
异步会继承非阻塞的优点,会反馈给用户一些可视化信息,阻塞的特点异步也有,就是不占用cpu,将进程加入等待队列,
其独特的特点是阻塞发生在驱动层面。之前的三种io阻塞发生的地点都是在应用程序中
异步可以在发生资源不可用的情形下,报错或者报其他参数显示给我们用户,让用户感知。
以及在阻塞的时候不占用cpu资源。
之前给大家举例,大家读小说100w字,以一个大的read进程去读,但是我们一次只能读10w字
以这样的方式使用aior控制块实现了我们在一个大进程下面多个子进程运行,直到在进程执行到中段的时候发生了资源不可用
比如说我们100w字的小说读到40w的时候,我们人困了睡着了,读的进程无法继续了。
我们的aior控制块会把我们已经读的40w字(也就是我们走完了的子进程)反馈给我们用户感知
同理,我们的aiow控制块也是一样的道理。
通过控制块我们才能实现异步io,也就是可以在发生资源不可用的情形下,报错或者报其他参数显示给我们用户,让用户感知。

4.7几种io模型的总结
io模型的话总的大类来说就是分为两种,阻塞与非阻塞
无等待队列:非阻塞与io的多路复用
有等待队列:阻塞与异步io
同步:一个进程一次执行完
异步:控制多个进程

4.8异步通知
通过信号的方式让我们应用程序直接能够在底层的驱动程序上读或者写数据,并通信关键信息给用户



4.9mmap 设备文件操作

映射,将内存映射到物理空间,再由物理空间映射给应用程序使用。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。