四、I/O

九、什么是I/O:

  9.1、在Windows程序中,基础的运行单位为线程,为每一个线程分配一个处理器,可以让系统执行多个操作,

  9.2、当线程进行一个I/O操作时,会被挂起,从而影响性能,为了解决这类问题,Windows使用了一套非常好的机制I/O完成端口

  9.3、用于进行输入输出的操作都可以叫I/O,如:文件、USB、设备操作都统称为I/O操作、网络通信也是I/O。

  9.4、和外部通信的都统称为I/O。

十、端口机制:

  10.1、Windows是一个多任务(可以执行多个进程)多线程(在一个进程中可以执行多个线程)的操作系统。

  10.2、进程指的是当前程序的单位,线程是执行工作的工人。

  10.3、多核:每一个内核可以对应一个线程,每一个核心执行一个线程(并行处理)。

  10.4、线程挂起:等待I/O操作完成。

  10.5、为了解决线程挂起这个问题,Windows做了一套机制:I/O完成端口。

  10.6、I/O完成端口:线程不再等待I/O操作完成,而直接返回又来执行线程,直到这个I/O完成了再来处理(这里整个是一个并行)。

  10.7、总的来说I/O完成端口机制是为了在执行I/O操作的时候能够来进行其他的一些操作。

十一、文件内核对象:

  11.1、I/O其实都是相对于设备而言的,除了内存之外的都可以称之为设备(因为内存是我们运行所有程序的载体)。

  11.2、文件是一个设备,目录也是一个设备。

  11.3、逻辑磁盘驱动器:可以将Windows上的原始磁盘空间配置为逻辑驱动器,逻辑驱动器在编程中常被用于格式化驱动器。

  11.4、物理磁盘驱动器:常被用于获取分区表。

  11.5、Windows中可以将物理磁盘分成多块的逻辑磁盘。

  11.6、不管是逻辑磁盘也好,目录也好都是为了让用户好的来整理。

  1.7、文件是二进制数据的集合。文件格式列表必须要了解、熟悉。

  11.8、文件内核对象:类(实际是一个结构体),代表了文件的内存区域。

  11.9、内核对象就是用来指代一个个的单位。

十二、设备类型:

  12.1、串口(单通道)、并口(8通道):属于两种不同的通信方式。

  12.2、邮件槽:一对多,通过网络传输。

  12.3、命名管道:一对一,通过网络传输。

  12.4、匿名管道:一对一,本机传输。

  12.5、套接字:报文或数据流传输,通过网络传输。

十三、R3和R0文件对象的交互:

  13.1、R3(用户层)和R0(核心层)两个层是断开的。

  13.2、以文件为列:打开一个文件:

  13.3、首先调用对应的API,然后R3层发送请求,通过各种的检测到R0层中,然后R0层去取数据

  13.4、R0取到数据后,会在R0中产生一个标识(文件对象,一个文件对象就代表了硬盘中的某一块内存空间)。

  13.5、这个标识存在内存中,因为操作系统是存在内存当中。

  13.6、然后R0层返回给R3层,然后API返回,而返回回来的这个东西,就是一个文件内核对象。

  13.7、而R0和R3又是隔开的,两者不可能直接进行通讯的。

  13.8、所以R0到R3之后只能得到一个文件内核对象的一个编号,这个编号反应在R3层中,而这个编号就是句柄。

  13.9、这个句柄就对应了一个文件对象。

  13.10、有了这些句柄之后,我们就可以通过句柄进行文件内核对象(一个内核对象代表的是某一个设备,某一个具体的事物)的操作。

  13.11、所以句柄就是某一类事物的抽象。

  13.12、内核对象并不希望被暴露出来,这是风险很大的事情。所以R3到R0层会经过各种的检测,这样保证安全。

  13.13、就类似于银行的柜台一样,银行并不希望客户来直接自己操作取钱,而是通过身份,还用卡上余额等等的一些检测才能进行取钱。

时间: 2025-01-02 17:51:20

四、I/O的相关文章

Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor

介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? Java new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 1 2 3 4 5 6 7 new Thread(new

13- 整数划分插入乘号积最大(四)

/*                                            整数划分(四)时间限制:1000 ms  |  内存限制:65535 KB难度:3 描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到了一个难题,让他百思不得其解,他非常郁闷..亲爱的你能帮帮他吗? 问题是我们经常见到的整数划分,给出两个整数 n , m ,要求在 n 中加入m - 1 个乘号,将n分成m段,求出这m段的最大乘积 输入    第

java-分支结构(四种基本分支结构的认识)

分支结构:有条件的执行某语句,并非每句必走 1)if结构:1条路 2)if...else结构:2条路 3)if...else if结构:多条路 4)switch...case结构:多条路 优点:效率高.结构清晰 缺点:整数.相等 break:跳出switch 一.if结构的认识 /* * 1.if结构:1条路 * 1)语法: * if(boolean){ * 语句块 * } * 2)执行过程: * 判断boolean的值: * 若为true,则执行语句块 * 若为false,则不执行语句块 */

TCP四次挥手(断开连接)(未完待续)

正常情况下,调用close(),其中产生的一个效果就是发送FIN. 断开为什么需要四次握手: TCP协议是一种面向连接的.可靠的.基于字节流的运输层通信协议.TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了:但是,这个时候主机1还是可以接受来自主机2的数据:当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的:当主机2也发送了FIN报文段时,这个时候就表示主

《Inside C#》笔记(四) 类

类是对数据结构和算法的封装. 一 类成员 类成员包括以下几类,作者在后面的章节会详细讲解. 字段(用来保存数据,可用static readonly const来修饰).方法(操作数据的代码).属性(用来控制对类内部变量的访问).常量.索引器.事件和运算符. 二 访问修饰符 public 可被外部的类和派生类访问 protected 只能被派生类访问 private 外部的类和派生类都不能访问 internal 程序集内部可访问 不管类本身还是类成员默认的修饰符都是private 三 Main 函

2062326 齐力锋 实验四《Java面向对象程序设计Android开发》实验报告

北京电子科技学院(BESTI) 实 验 报 告 课程: 程序设计与数据结构  班级: 1623  姓名: 齐力锋 学号: 20162326 成绩: 指导教师: 娄嘉鹏/王志强 实验日期: 2017年5月26日 实验密级:非密级 预习程度: 优良 实验时间: 2 Hours 仪器组次: 必修/选修: 必修 实验序号: 04 实验名称:Java面向对象程序设计Android开发 实验内容 1.Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBI

MySQL 四种事务隔离级的说明[转]

很早之前写的文章,重新回顾和学习下: 按照SQL:1992 事务隔离级别,InnoDB默认是可重复读的(REPEATABLE READ).MySQL/InnoDB 提供SQL标准所描述的所有四个事务隔离级别.你可以在命令行用--transaction-isolation选项,或在选项文件里,为所有连接设置默认隔离级别.例如,你可以在my.inf文件的[mysqld]节里类似如下设置该选项: transaction-isolation = {READ-UNCOMMITTED | READ-COMM

Linux高级文本处理之sed(四)

模式空间是sed内部维护的一个缓存空间,它存放着读入的一行或者多行内容.但是模式空间的一个限制是无法保存模式空间中被处理的行,因此sed又引入了另外一个缓存空间--模式空间(Hold Space). 一.保持空间 保持空间用于保存模式空间的内容,模式空间的内容可以复制到保持空间,同样地保持空间的内容可以复制回模式空间.sed提供了几组命令用来完成复制的工作,其它命令无法匹配也不能修改模式空间的内容. 操作保持空间的命令如下所示: 这几组命令提供了保存.取回以及交换三个动作,交换命令比较容易理解,

Hadoop核心组件:四步通晓HDFS

Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件上的分布式文件系统,它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序,那么在实际应用中我们如何来操作使用呢? 一.HDFS操作方式: 1.  命令行操作 –FsShell:$ hdfs dfs 2. 其他的计算框架-如spark 通过URI,比如: hdfs://nnhost:port/file-,调用HDFS的协议.主机.端口或者对外提供的服务媒.以及文件,在spark的程序中实现对HDFS的访问. 3.  其

马哥2016全新Linux+Python高端运维班第四期-第一次作业

一.按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别 主流发行版有Slackware.Debian和Redhat,它们都属于GNU计划,特点如下: Slackware:  目录结构严谨:版本追求稳定而非追新:软件包管理器采用tgz/txz格式文件加安装脚本编译安装:SUSE Linux原是以Slackware Linux为基础,并提供完整德文使用界面的产品.SUSE集成管理界面不仅仅是软件,SUSE可以使管理员不需要对组件进行深入研究而进行配置,SUSE可以配置管理需要或者不需要的