IO介绍

1 篇文章 0 订阅

一:用户空间和内核空间
    学习Linux时经常可以看到User space(用户空间)和Kernel space(内核空间)。
    简单来说,kernel space是Linux内核的运行空间,User space是用户程序的运行空间。为了安全,他们是隔离的,即使用户的程序崩溃了也不受影响。

    虚拟内存操作系统划分成两块:内核空间和用户空间,内核空间是内核代码运行的地方,用户空间是用户程序代码运行的地方。当进程运行在内核空间时就处于内核态,当进程运行在用户空间时就属于用户态。

    Kernel space可以执行任意命令,调用系统的一切资源;user space 只能执行简单的运算,不能直接调用系统资源,必须通过系统接口(system call)才能向内核发出指令。
示例:

str = "aaa"; //用户空间
int a = 2;
file.write(str);  //切换到内核空间
b = a + 5; //切回用户空间

二:PIO与DMA
  简单说明慢速I/O设备和内存直接的数据传输方式。

  • PIO:拿磁盘来说,很早之前,磁盘和内存之间的数据传输是需要cpu控制的,也就是说 如果我们读取磁盘文件到内存中,数据要经过cpu存储转发,这种方式称为PIO。显然这种方式非常不合理,需要占用大量的cpu时间来读取文件,造成文件访问时系统激活停止响应。
  • DMA(直接内存访问,Direct Memory Access):DMA取代了PIO,它可以不经过cpu而直接进行磁盘和内存(内核空间)的数据交换,在DMA模式洗,cpu只需要向DMA控制器下达命令,让DMA控制器来处理数据的传送即可,DMA控制器通过系统总线来传输数据,传输完毕再通知cpu,这样就在很大程度上降低了cpu占有率,大大节省了系统资源,而它的传输速度与PIO的差异其实并不十分明显,因为这主要取决于慢速设备的速度。

可以肯定的是,PIO的设计模式的计算机我们现在已经很少见到了。

三:缓存IO和直接IO

  • 缓存IO:数据从磁盘先通过DMA copy到内核空间,再从内核空间通过cpu copy到用户空间。
  • 直接IO:数据从磁盘通过DMA copy到用户空间。

四:IO的访问方式
1:磁盘IO
在这里插入图片描述
具体步骤:
当应用程序调用read接口时,操作系统检查在内核的高速缓存有没有需要的数据,如果已经缓存了,那么就直接从缓存中返回,如果没有则从磁盘中读取,然后缓存在操作系统的缓存中。

2:网络IO
  操作系统将数据从磁盘复制到操作系统内核的页缓存中
  应用将数据从内核缓存复制到应用缓存中
  应用将数据写回内核的socket缓存中
  操作系统将数据从socket缓存区复制到网卡缓存,然后将其通过网络发出

五:磁盘IO和网络IO对比
    磁盘IO主要延时是由(以15000rpm硬盘为例)机械转动延时(机械磁盘的主要性能瓶颈,平均为2ms)+寻址延时(2~3ms)+块传输延时(一般4k每块,40m/s的传输速度,延时一般为0.1ms)决定()平均为5ms
    网络延时主要是由 服务器响应延时+宽带限制+网络延时+跳转路由延时+本地接收延时 决定(一般为几十到几千毫秒,受环境干扰极大)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值