ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

IO模型基础

2021-08-10 10:00:07  阅读:166  来源: 互联网

标签:文件 模型 基础 内核 IO 磁盘 PageCache 内存


文件系统

  虚拟文件系统

     Linux VFS 虚拟文件系统
     每个目录可以挂载不同类型的文件系统
     linux的系统目录就是虚拟文件系统

     虚拟文件系统是实现docker文件目录隔离的机制
     chroot来实现子目录做为shell环境的根目录,相当于每个容器的执行环境

物理文件系统

      Windows 物理文件系统
      每个目录只能挂载同一类型的文件系统

PageCache

     设置数据从内核管理的pagecache写入的物理磁盘的模型就是文件IO模型

     可以没有PageCache,由应用程序直接调用磁盘驱动读写文件。但这样会导致程序读写文件延迟比较高,耗时较长

     IO的实现依赖PageCache方案
     只要内存空间够大,内核会优先把所有的内容PageCache缓存到内存

      

      

    1.cpu把文件内容从磁盘读取到寄存器然后再把内容从寄存器拷贝到内核的PageCache
    2.DMA协处理器
        cpu只需要发送读取指令
        文件内容直接从磁盘读取到内核的PageCache,不再经过CPU的寄存器

     服务器关机
          1.正常关机的话会给内核发送一个关机中断信号,内核收到信号后会立即把内存中所有的脏页同步到磁盘中,保证数据不会丢失
          2.服务器直接断电关机,内核无法及时的把脏页数据同步到磁盘,导致缓存在内存中的数据会全部丢失

     redis和mysql的三个持久化级别
         1.每一次写操作都要直接刷磁盘
         2.跟随内核写脏页的策略
         3.每隔一秒钟写一次磁盘

     bufferIO和普通IO
         bufferIO会缓存一部分内容后再调用系统调用
         普通IO每一次都要调用系统调用

     文件描述符
          描述的是打开对应文件的文件类型,读写模式,文件inode,读写指针偏移量

   重定向和管道
       重定向是一种机制,不是命令
       0标准输入  1标准输出    2标准错误
       <标准输入  >标准输出

   管道
       shell会分别为管道两边的命令启动单独的子进程来执行
       $$的优先级高于管道

    

    

 磁盘IO

         设置数据从内核管理的PageCache写入的物理磁盘的模型就是文件IO模型
         1.应用程序每次修改数据后立即把PageCache数据flush到磁盘保留的数据多,但效率低
         2.交给内核自己决定什么时候把脏页数据写入磁盘效率高,但是丢失的数据会比较多

      mmap直接内存映射

      

        mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存.普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用read(),write()等操作
        mmap映射内存必须是页面大小的整数倍,面向流的设备不能进行mmap,mmap的实现和硬件有关

        mmap调用的一个进程和内核共享的内存区域,进程无需通过系统调用就可以直接访问到内核态的内存

         

网络IO

      tcpdump -nn  -i  eth0  port 9000
      lsof  -p  pid(进程id号,不是端口号)
      TCP是面向连接的,可靠的传输协议。只要在传输层成功建立三次握手,那么客户端和服务端就可以相互发送数据
      这些数据会缓存到内核的内存中,如果应用程序没有通过fd关联到此内核连接就暂时无法读取内存中的数据

      

    

     TCP keepalive
     Http keepalive
    负载均衡 keepalived

      

     文件描述符fd

        服务端socket调用accept函数的时候返回文件描述符对象
        文件描述符是属性某个进程下的,不同进程下的文件描述符可以重复
       每个进程下都有三个默认的文件描述符0标准输入 1标准输出 2标准错误

      应用程序关联文件描述符fd
      fd关联内核的socket
      socket关联内核的缓冲buffer,buffer满了后就会丢弃后面的数据

      端口号占用2个字节16个bit位(65535)

              

标签:文件,模型,基础,内核,IO,磁盘,PageCache,内存
来源: https://www.cnblogs.com/yxh168/p/15115416.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有