Windows I/O操作

简介

在windows 程序中,基础的运行单元为线程,为每一个线程分配一个处理器,可以让系统执行多个操作!当线程进行一个IO操作时,会被挂起,从而影响性能!为了解决这类问题。windows使用了一套非常好的机制I/O完成端口. 系统和外面交互(设备操作) 统称IO

完成端口机制

windows是一个多任务多线程的操作系统

多任务是指在操作系统下面可以执行多个进程,

多线程一个进程里面可以执行多个线程,

进程代表我这个程序的单位

线程是我实际工作的工人


并行

多核 每个核心都在做这个事情   同步

挂起

假设需要读取1GB,可能需要2分钟,你进行文件打开的操作(执行打开操作的线程会被挂起 等待2分钟之后)IO操作完成之后才能返回 ..影响了性能,于是微软做了一套完成端口  也就是他自己帮我们做了一个并行,不会导致程序被卡死,也就是 IO被挂起的时候 线程可以干别的事情。。。

设备

除了内存,所有的操作都是设备,为啥内存不是,因为内存属于载体,

显卡也属于IO操作 不是标准的 IO操作


文件设备

硬盘操作 文件的定义  

二进制数据集合

广义文件定义

根据文件格式定义不同意义的文件

文件内核对象

把一块内存的区域当中一块,然后内核对象指向这一片区域,只带出 单位或者事物,因为他是内核对象  我们想操作的话只能 通过win32的 API来实现

目录设备

在计算机活相关设备中,一个目录或文件夹就是一个装有数字文件系统的虚拟容器。在它里面保存这一组文件和其他目录(文件夹)

逻辑磁盘驱动器

分区 

物理磁盘驱动器

装几个硬盘有几个   都是为了方便用户整理

串口

外接设备,也有内核对象但(不一样)

通过电话线发送信号,单通道

并口

8通道 不见得就比  串口快 

邮件槽

一对多,通过网络传输   

很早之前

命名管道

一对一,通过网络传输    

用的不多

匿名管道

一对一,本机传输

进程与进程的通信  

套接字

网络传输


打开方式

我们的程序会调用 ring3层的API

ring3会判断这个请求是否合理,是否合法

合理 通过某种机制  到ring0层   

ring0 找到 然后做一个标记(文件对象)

最后返回文件内核对象的话 会很大很浪费

所以返回一个内核对象的编号。他就是HANDLE句柄

就可以操作这个文件了。


\\.代表本机


设备 打开方式
文件 CreateFile(路径名或UNC路径)
目录 CreateFile(路径名或UNC路径)|  需要FILE_FLAG_BACKUP_SEMANTICS标志
逻辑磁盘 CreateFile(\\.\?)
物理磁盘 CreateFile(\\.\PHYSICALDRIVE)
串口 CreateFile(COM?)
并口 CreateFile(LPT?)
邮件槽服务器 CreateMailslot(\\.\mailslot\邮件槽名)
邮件客户端 CreateNamePipe(\\.\pipe\管道名)
命名管道客户端 CreateNamePipe(\\servername\pipe\管道名)
匿名管道 CreatePipe
套接字 Socket。Accept




你可能感兴趣的:(PoEdu培训(po学校),vc++,windows,visual,studio,c++,io)