I/O系统调用,你未必懂吧!!

今天给大家讲讲IO吧!首先是IO的原理:IO的原理其实也是很简单的,而要知道原理,那我们势必要知道一个小的知识点,那就是什么是IO设备。很多人其实误认为IO设备其实仅仅只是一个键盘啊,显示器啊,网卡什么的,其实怎么说呢,这其实说的不完全正确,因为他还有一个,也就是说还有一个设备,组合起来才可以说是完整的IO设备,这个设备就是IO控制器,是的,IO控制器是一个电子设备,IO设备是电子设备加机械设备,只有这样才可以说为是IO设备。现在说说原理如下:IO的原理其实也是很简单的。我就以键盘为例说说吧!

其实这个也很简单,也容易理解,首先CPU在进行IO 读取键盘输入的内容时,是以字符为单位进行读取的。IO控制器中有寄存器,当我们的程序中有需要读取的代码时,cpu会给IO控制器中的寄存器发送指令,然后此时的CPU会去干自己的事情,处理一些进程或者其他事情,而我们只需要输入内容即可,输入完成之后,OS就会给CPU说,“我好了”。而这个“我好了”其实是OS给我们的一个“上帝”,那就是中断,然后CPU会发生调度,保存上下文信息,找到相应的中断程序,执行,并且调用相应的驱动程序,来进行读取,这就是输入的基本原理(注:这里只是一种IO输入方式,具体情况看操作系统是采用了那个IO的方式,这里并不是唯一)。其余的IO原理就不详细讲了,有兴趣的小伙伴可以私信,一起探讨一下。还有要注意的事项就是输入输出,有缓冲区,不要忘了这个缓冲区。

IO设备的图像给家看看,不然害怕有的人懵。如下:

大概图像就是这样的,CPU怎么取指令,给指令,看IO控制器具体是哪个寄存器,这里画的只是为了方便理解。

那么,此时大家疑惑的是,就这?其实我想说的不是这个,而是linux下的IO系统调用,例如read、write这些。其实不知道大家有没有疑惑的就是,我们读取文件或者输入字符的时候,所用的库函数不一样,其实根本原因就是不同IO硬件的驱动程序不一样,也就是IO控制器不一样,例如IO控制中的寄存器不一样(打个比方,也有其他东西不一样)。所以这造成了OS势必要考虑到各种情况。我们也不可能每到输入的IO程序不一样,就去修改OS的代码,这个不符合逻辑,所以这就造成IO的驱动程序不一样,所以这就造成了我们在读取不同IO设备的时候,需要用不同的系统调用来读取。而磁盘,键盘的IO设备也是不一样的。因为读取键盘的设备的时候,键盘是以字符为单位的,所以我们要用的系统调用是get/put等,而磁盘是以块为单位读取的,所以用read/write等系统调用。

到这,有些人或许又疑惑了,那为什么socket编程的时候可以用read或者write来读取,这个是网络编程,IO设备是网卡啊,读取文件的IO设备是磁盘,为什么网络编程中可以用这个呢?你切记!!!!socket编程的时候,他返回的是一个文件描述符,而linux下,一切皆文件,他有文件描述符,那么他势必是文件,所以,我们就可以用read/write来读取。

今天就分享到这里,下次会给大家说说文件总体的知识。希望大家支持!!!!!!!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值