失效链接处理 |
Java IO 模型常见面试题总结 PDF 下载
本站整理下载:
相关截图:
主要内容:
⾯试中经常喜欢问的⼀个问题,因为通过这个问题,⾯试官可以顺便了解⼀下你的操作系
统的⽔平。
IO 模型这块确实挺难理解的,需要太多计算机底层知识。写这篇⽂章⽤了挺久,就⾮常
希望能把我所知道的讲出来吧!希望朋友们能有收货!为了写这篇⽂章,还翻看了⼀下
《UNIX ⽹络编程》这本书,太难了,我滴乖乖!⼼痛~
个⼈能⼒有限。如果⽂章有任何需要补充/完善/修改的地⽅,欢迎在评论区指出,共同进
步!
I/O ⼀直是很多⼩伙伴难以理解的⼀个知识点,这篇⽂章我会将我所理解的 I/O 讲给你
听,希望可以对你有所帮助。
I/O(Input/Outpu) 即输⼊/输出 。
我们先从计算机结构的⻆度来解读⼀下 I/O。
根据冯.诺依曼结构,计算机结构分为 5 ⼤部分:运算器、控制器、存储器、输⼊设备、
输出设备。
输⼊设备(⽐如键盘)和输出设备(⽐如显示屏)都属于外部设备。⽹卡、硬盘这种既可
以属于输⼊设备,也可以属于输出设备。
输⼊设备向计算机输⼊数据,输出设备接收计算机输出的数据。
从计算机结构的视⻆来看的话, I/O 描述了计算机系统与外部设备之间通信的过程。
我们再先从应⽤程序的⻆度来解读⼀下 I/O。
根据⼤学⾥学到的操作系统相关的知识:为了保证操作系统的稳定性和安全性,⼀个进程
的地址空间划分为 ⽤户空间(User space) 和 内核空间(Kernel space ) 。
像我们平常运⾏的应⽤程序都是运⾏在⽤户空间,只有内核空间才能进⾏系统态级别的资
源有关的操作,⽐如如⽂件管理、进程通信、内存管理等等。也就是说,我们想要进⾏
IO 操作,⼀定是要依赖内核空间的能⼒。
并且,⽤户空间的程序不能直接访问内核空间。
当想要执⾏ IO 操作时,由于没有执⾏这些操作的权限,只能发起系统调⽤请求操作系统
帮忙完成。
因此,⽤户进程想要执⾏ IO 操作的话,必须通过 系统调⽤ 来间接访问内核空间
我们在平常开发过程中接触最多的就是 磁盘 IO(读写⽂件) 和 ⽹络 IO(⽹络请求和相
应)。
从应⽤程序的视⻆来看的话,我们的应⽤程序对操作系统的内核发起 IO 调⽤(系统调
⽤),操作系统负责的内核执⾏具体的 IO 操作。也就是说,我们的应⽤程序实际上只是
发起了 IO 操作的调⽤⽽已,具体 IO 的执⾏是由操作系统的内核来完成的。
当应⽤程序发起 I/O 调⽤后,会经历两个步骤:
1. 内核等待 I/O 设备准备好数据
2. 内核将数据从内核空间拷⻉到⽤户空间。
UNIX 系统下, IO 模型⼀共有 5 种: 同步阻塞 I/O、同步⾮阻塞 I/O、I/O 多路复⽤、信
号驱动 I/O 和异步 I/O。
这也是我们经常提到的 5 种 IO 模型。
BIO 属于同步阻塞 IO 模型 。
同步阻塞 IO 模型中,应⽤程序发起 read 调⽤后,会⼀直阻塞,直到在内核把数据拷⻉到
⽤户空间。
|