美文网首页
IO知识小记

IO知识小记

作者: 魔焰之 | 来源:发表于2019-02-27 14:51 被阅读1次

Linux内存知识:

内存和进程的关系:

创建进程时,系统会为每个进程分配一个4G大小的虚拟地址空间,且每个进程都有3G的用户空间和1G的内核空间

1.32位操作系统中表示一个地址需要32bit,因此最大可表示的地址数量为pow(2,32)
2.在同一时刻,一个cpu中只有一个进程在运行,cpu只能看见正在运行的进程对应的4G虚拟地址空间,进程间的切换会导致正在使用的虚拟地址的切换
3.3G用户空间的私有的,1G的内核空间是共有的,且内核空间与物理内存空间的映射是位移映射,直接是虚拟地址-3G(可以这么做是因为映射到物理内存却总是从最低地址0x00000000开始,这也解释了“1G的内核空间是共有的”),用户空间与物理内存空间的映射方式是分页或者分段的。
4.由于内存分页,操作系统去获取数据的时候一般是按照一页一页的去获取。面向内存友好的代码是可以充分利用这一机制来提高效率的,比如遍历二维数组时的方式

日常io操作所触发的流程

在这里插入图片描述
当我们在应用程序中调用read等操作时,首先到达VFS虚拟文件系统(这个是具体文件系统的接口层,为了屏蔽不同文件系统的差别),如果在此时命中了文件cache,则会直接获取到数据,否则会去请求磁盘io,读取磁盘的数据到内存(这一步效率和硬件效率有很大的关系),再将数据拷贝到用户空间,这里可以使用mmap来进行io操作,没有缓存的情况下只需要一次数据拷贝
不同硬件效率
文件cache的说明:
在 Linux 的实现中,文件 Cache 分为两个层面,一是 Page Cache,另一个 Buffer Cache,每一个 Page Cache 包含若干 Buffer Cache。内存管理系统和 VFS 只与 Page Cache 交互,内存管理系统负责维护每项 Page Cache 的分配和回收,同时在使用 memory map 方式访问时负责建立映射;VFS 负责 Page Cache 与用户空间的数据交换。而具体文件系统则一般只与 Buffer Cache 交互,它们负责在外围存储设备和 Buffer Cache 之间交换数据。
参考文章:
Linux中虚拟地址
Linux内存分页
磁盘io那些事(美团)
Linux内存
Linux内核的文件cache管理机制

相关文章

  • IO知识小记

    Linux内存知识: 内存和进程的关系: 创建进程时,系统会为每个进程分配一个4G大小的虚拟地址空间,且每个进程都...

  • JAVA IO基本知识

    本部分总结一下JAVA IO的相关知识。 全部章节传送门: JAVA IO学习笔记: IO基本知识 JAVA IO...

  • RAC

    ReactiveCocoa入门 学习RAC小记-适合给新手看的RAC用法总结RAC稍深入-适合新手学习RAC iO...

  • Java基础-io知识回顾

    Java拾遗系列- io知识 简介 io分类及相关实例3.总结 1.简介 2.io分类及相关应用 2.1 io流...

  • 第17章:输入、输出和文件

    /* 使用结构来记录知识 - 知识体系 */本章主要讲解 IO 库的使用。5个点。 IO 类的关系a. ios 包...

  • 古典:知识晶体

    20170321学习小记 古典《写给努力去学不好,给大脑注入知识晶体》: 1.让你的脑子形成多少知识晶体,才是知识...

  • 《学习小组Day7笔记--面团》-- 一个终

    #一 测序知识 ![测序知识](https://upload-images.jianshu.io/upload_i...

  • 知识小记

    recyclerview 1.setSpanLookup 可以根据不同的行规则去设置每行的item数以达到不规则...

  • Socket.io 使用小记

    1. 服务端 我采用的是 nodejs,需要引入 socket.io 的 npm 包。 2. 客户端 可以使用 *...

  • Java中IO坑小记

    在java开发中肯定会使用到各种IO流,然鹅,IO流的使用可不是胡乱搭配,否则你会发现:之前的数据明明是那样的,用...

网友评论

      本文标题:IO知识小记

      本文链接:https://www.haomeiwen.com/subject/gohfuqtx.html