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

四、I/O的更多相关文章

  1. 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)

    通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...

  2. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  3. 如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户

    阅读目录 前言 怎么卖 领域服务的使用 回到现实 结语 一.前言 上篇中我们讲述了“把商品卖给用户”中的商品和用户的初步设计.现在把剩余的“卖”这个动作给做了.这里提醒一下,正常情况下,我们的每一步业 ...

  4. 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)

    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  5. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  6. “四核”驱动的“三维”导航 -- 淘宝新UI(需求分析篇)

    前言 孔子说:"软件是对客观世界的抽象". 首先声明,这里的"三维导航"和地图没一毛钱关系,"四核驱动"和硬件也没关系,而是为了复杂的应用而 ...

  7. 【翻译】MongoDB指南/CRUD操作(四)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...

  8. HTML 事件(四) 模拟事件操作

    本篇主要介绍HTML DOM中事件的模拟操作. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4.  ...

  9. 【原】AFNetworking源码阅读(四)

    [原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDe ...

  10. 带你实现开发者头条APP(四)---首页优化(加入design包)

    title: 带你实现开发者头条APP(四)---首页优化(加入design包) tags: design,Toolbar,TabLayout,RecyclerView grammar_cjkRuby ...

随机推荐

  1. Ubuntu14.04上安装openGL

    安装命令:sudo apt-get install build-essential sudo apt-get install libgl1-mesa-dev sudo apt-get install ...

  2. Android中的Drawable和动画

    Android中Drawable是一种可以在Canvas上进行绘制抽象的概念,种类很多,常见的颜色和图片都可以是一个Drawable.Drawable有很多种,它们表示一种图像的概念,但是它们又不全是 ...

  3. (Facebook开源项目)Fresco:一个新的Android图像处理类库

    在Facebook的Android客户端上快速高效的显示图片是非常重要的.然而多年来,我们遇到了很多如何高效存储图片的问题.图片太大,而设备太小.一个像素点就占据了4个字节数据(分别代表R G B和a ...

  4. Java Unicode编码 及 Mysql utf8 utf8mb3 utf8mb4 的区别与utf8mb4的过滤

    UTF-8简介 UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码.它可以用来表示Unicode标准中的任何 ...

  5. Android -- 自定义ViewGroup+贝塞尔+属性动画实现仿QQ点赞效果

    1,昨天我们写了篇简单的贝塞尔曲线的应用,今天和大家一起写一个QQ名片上常用的给别人点赞的效果,实现效果图如下: 红心的图片比较丑,见谅见谅(哈哈哈哈哈哈).... 2,实现的思路和原理 从上面的效果 ...

  6. 【Electron】Electron开发入门(六):项目生成setup安装程序

    把electron发布的exe打包成setup安装程序,需要使用nsis软件, nsis打包的详细教程,可以参考我的这篇文章: win7下nsis打包exe安装程序教程

  7. AngularJS1.X学习笔记3-内置模板指令

    前面学习了数据绑定指令,现在开始学习内置模板指令.看起来有点多,目测比较好理解.OK!开始! 一.ng-repeat 1.基本用法 <!DOCTYPE html> <html lan ...

  8. Ubuntu抛弃了Untiy转向Gnome,美化之路怎么办?不用怕咱一步一步大变身!

    跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux 常用软件安装+系统软件卸载:http://www.cnblogs.com/du ...

  9. python作业设计:多级菜单,并可依次进入各级子菜单

    '''作业三:多级菜单 三级菜单 可依次选择进入各子菜单 所需新知识点:列表.字典 ''' data = { "北京":{ "昌平":{ "沙河&qu ...

  10. 关于generator异步编程的理解以及如何动手写一个co模块

    generator出现之前,想要实现对异步队列中任务的流程控制,大概有这么一下几种方式: 回调函数 事件监听 发布/订阅 promise对象 第一种方式想必大家是最常见的,其代码组织方式如下: fun ...