内核通过系统调用提供硬件抽象,例如read()
和write()
。其中许多都非常直观,但我真的不明白open()
和close()
是什么。
维基百科说
open
和close
分别初始化和终止对文件的访问。
当我打开/关闭文件时,在硬件级别实际发生了什么?
答案 0 :(得分:0)
在Unix系统上,想法是通过文件操作资源(主要是文件系统中的条目,以及最常见的读/写/打开/关闭/ ioctl访问)。
open()和close()因此可以被视为获取/释放特定资源上的句柄的方法。
在许多情况下,打开/关闭调用只是在软件级别执行资源分配(只是在某个框架中分配内存或寄存器,或者锁定等等),但显然它有时会生成硬件访问。
open()/ close()调用下的实现总是依赖于驱动程序,程序员可能会把特定的东西放在其中。
您可以在https://lwn.net/Kernel/LDD3/或http://idak.gop.edu.tr/esmeray/UnderStandingKernel.pdf中找到这些实现的概述,甚至可以阅读内核源http://lxr.free-electrons.com/source/drivers/input/mousedev.c?v=3.10#L530(鼠标设备的示例)
你甚至会发现你认为“相当直观”的东西实际上并非如此。例如,即使简单的read()在软件RAID磁盘上执行IO也会变得相当复杂。