Poedu_Windows_IO操作
来源:互联网 发布:云计算应用架构 编辑:程序博客网 时间:2024/06/05 11:54
什么是windows的IO
系统与外部设备进行交互的操作
对外部设备的操作都称为I/O操作
IO完成端口机制
提高效率
windows是一个多任务多线程的操作系统
多任务:执行多个进程
多线程:一个进程内执行多个线程进程所代表的是当前程序的单位,线程所代表的是实际工作的工人
多核:多核操作系统下,可以让每一个核心运行来运行一个线程,真正达到多任务并行处理
单核:伪多任务
外部设备的瓶颈,会使线程挂起
例如从外部设备读取需要2分钟,那么线程会被挂起,直到设备读取完毕才能进行下面的工作:会影响效率,IO完成端口机制可以帮助解决这个问题
有IO处理请求的时候,会发送请求,不会等待,线程继续做事情,设备操作结束后,给线程一个通知,再回来做这件事情,相当于自己做了一个并行,不会导致程序卡死
能够让程序被挂起的时候来执行其它的一些操作
文件内核对象的理解
IO操作都是基于设备:除了内存之外的都可以认为是设备
内存是运行所有程序的载体
标准IO操作
文件
存储在硬盘中,属于文件设备
目录
windows下包含着很多目录,也属于一个设备
逻辑磁盘驱动器
系统中的分区,从操作系统的角度看,哪块空间到哪块空间是属于C盘的
物理磁盘驱动器
一般一台电脑只装了一个磁盘,那么就只有一个物理磁盘
windows可以将一块物理磁盘分成逻辑磁盘,逻辑磁盘和目录都是为了方便用户的使用,在目录下面,就是文件(有一个文件格式表,可百度查看),在系统层面下,每一个文件都是二进制数据的集合(二进制文件)
广义上的文件的是由格式来区分:通过扩展名能够知道编码格式,才能正确的打开文件
但是,文件的最终意义是二进制的集合
物理磁盘 -> 逻辑磁盘(可以跨物理磁盘) -> 分成一级级的目录 -> 文件
逻辑磁盘和目录都是由操作系统做出来的,真实存在的只是物理磁盘和文件(文件的概念也是虚拟出来的,其实就是二进制数据)
文件是由文件系统维护的,文件只是一个内存区间,但是在逻辑上要组织成一个单位
文件内核对象:代表从A到B这块区域
就像一个类(其实内核对象是一个结构体),这个对象指代了A到B这块区域,都是一个个的对象,都保存在文件内核中,所以文件内核对象,都是为了做一件事情,只是为了指代出一些单位,或者指代类似于文件的一些事物
每个设备都有自己的一个对象
获取对应的对象:处在核心态,没办法new出来,所以需要用API
使用内核对象,更多的是对文件以及目录设备进行操作,增删改查,对逻辑磁盘的操作只能做些格式化和大小更改,对物理磁盘的操作只能是获取分区等
所有的设备类型讲解
串口
并口
串口和并口是计算机和外部设备进行交互的一种方式
但是是两种不同的连接方式,相当于是一个接口,主要做信号交互,串口是单通道,并口是八通道,但并口并不一定比串口快,还要做排序什么的
邮件槽
通过网络传输
可以进行一对多的通信
局域网
命名管道
通过网络传输
一对一的通信
局域网
匿名管道
本机通信:进程与进程是隔离的。之间的通信可以使用匿名管道,也可以使用scoket
一对一
套接字
报文或者数据流的传输
R3和R0文件对象的交互
软件->R3层->一根分离线 ->R0层 ->作用到一个个单独的硬件中软件使用R3层提供的一些API,打开文件、读取的操作
过程
软件向R3层提出请求:打开文件;R3判定请求是否符合要求,再到那条线(不会越过这条线),再通过R0层调用硬件中硬盘,取到这个文件,R0层会有一个标识(在内存中保存一个文件内核对象),然后向上返回,返回到软件层,返回的东西其实就是文件内核对象,但是没法越过那条线,所以没法把东西直接给软件层,所以需要两个进程之间进行通信,通信的内容不能太大,所以会返回一个编号,这个编号在R3层就是一个句柄(HANDLE),通过这个句柄就可以对文件进行操作,操作后的内容放到一个内存共享区域,软件再从这个共享区域中拿东西
R3层的参数校验,是为了保证请求能够通过那条线的检测
设备的打开方式
文件
CreateFile:不止是新建,也会打开
参数:路径名或UNC路径(\)等
返回文件内核对象:HANDLE
目录
CreateFile
需要使用标志位 FILE_FLAG_BACKUP_SEMENTICS
逻辑磁盘
CreateFile(\?:):下划线加一个盘符(比如C)
物理磁盘
CreateFile(//PHYSICALDRIVE?)
问号是数字
串口
CreateFile(COM?)
COM+串口编号
并口
CreateFile(LPT?)
LPT+并口编号
邮件槽服务器
CreateMailslot(.\mailslot\邮件槽名)
邮件槽客户端
CreateFile(\servername(一般是UNC名)\mailslot\邮件槽名)
命名管道服务器
CreateNamedPipe(.\pipe\管道名)
命名管道客户端
CreateFile(\servername(一般是UNC名)\pipe\管道名)
注意邮件和命名管道,使用的时候再看一遍
匿名管道
CreatePipe
套接字
Socket; accept
- Poedu_Windows_IO操作
- 操作
- 操作
- 操作
- 操作
- jquery操作table操作
- JqueryDOM操作-样式操作
- JqueryDOM操作-属性操作
- 只用+操作实现 -,*,/操作
- string操作、文件操作
- 文件操作-路径操作
- VC操作操作Word
- 字符串操作&内存操作
- 位操作,移位操作
- sparkSQL操作基本操作
- IO操作(文件操作)
- 文件操作
- Cookie操作
- 查看、杀死进程
- spark on yarn 异常记录二
- 理解Java对象序列化
- jquey的parent()和parents()的区别
- String为什么要设计成final
- Poedu_Windows_IO操作
- 静
- 线程通信
- 第十一周作业: Find All Duplicates in an Array
- 矩形问题
- linux网路工具、网络、网络编程、网络库、网络内核学习(一)
- Unicode UTF-8 UTF-16 UTF-32区别与联系
- 网易笔试题:最大的奇约数
- 梳理caffe代码layer_factory