当我 open/close 一个文件时会发生什么?
What happens when I open/close a file?
内核通过 系统调用 提供硬件抽象,例如 read()
和 write()
。很多都挺直观的,但是我真的不明白open()
和close()
是什么。
维基百科说
open
and close
respectively initialize and terminate access to a file.
当我 open/close 一个文件时,在硬件层面上实际发生了什么?
在类 Unix 系统上,想法是通过文件操作资源(主要是文件系统中的条目,最常见的是使用 read/write/open/close/ioctl 访问)。
因此可以将 open() 和 close() 视为 take/release 处理特定资源的方法。
在许多情况下,open/close 调用只是在软件级别执行资源分配(只是在某些框架中分配内存或注册,或者获取锁等),但显然有时它生成硬件访问。
open()/close() 调用下的实现始终依赖于驱动程序,程序员可能会在其中放入真正具体的东西。
您可能会在 https://lwn.net/Kernel/LDD3/ or http://idak.gop.edu.tr/esmeray/UnderStandingKernel.pdf or even reading the kernel sources http://lxr.free-electrons.com/source/drivers/input/mousedev.c?v=3.10#L530(鼠标设备示例)
中找到这些实现的概述
您甚至会发现您认为的 'fairly intuitive' 实际上不是。例如,如果您在软件 RAID 磁盘上执行 IOs,即使是简单的 read() 也会变得相当复杂。
内核通过 系统调用 提供硬件抽象,例如 read()
和 write()
。很多都挺直观的,但是我真的不明白open()
和close()
是什么。
维基百科说
open
andclose
respectively initialize and terminate access to a file.
当我 open/close 一个文件时,在硬件层面上实际发生了什么?
在类 Unix 系统上,想法是通过文件操作资源(主要是文件系统中的条目,最常见的是使用 read/write/open/close/ioctl 访问)。
因此可以将 open() 和 close() 视为 take/release 处理特定资源的方法。
在许多情况下,open/close 调用只是在软件级别执行资源分配(只是在某些框架中分配内存或注册,或者获取锁等),但显然有时它生成硬件访问。
open()/close() 调用下的实现始终依赖于驱动程序,程序员可能会在其中放入真正具体的东西。
您可能会在 https://lwn.net/Kernel/LDD3/ or http://idak.gop.edu.tr/esmeray/UnderStandingKernel.pdf or even reading the kernel sources http://lxr.free-electrons.com/source/drivers/input/mousedev.c?v=3.10#L530(鼠标设备示例)
中找到这些实现的概述您甚至会发现您认为的 'fairly intuitive' 实际上不是。例如,如果您在软件 RAID 磁盘上执行 IOs,即使是简单的 read() 也会变得相当复杂。