Open File Table Implementation
Open-file table 讓 open() 後的 file access 不必重複 pathname lookup。User 看到 file descriptor / handle;kernel 內部通常分成兩層。
System-Wide Open-File Table
全系統共享,每個 currently-open file 一筆 entry:
- FCB / inode 的 in-memory copy。
- data-block pointers、extent/index metadata。
- open count / reference count。
- shared locks、dirty metadata state。
同一 file 被多個 process open 時可共用此 entry,省下 directory lookup 與 metadata I/O。
Per-Process Open-File Table
每個 process 自己的 fd/handle namespace;entry 通常保存:
- pointer to system-wide entry。
- current file offset。
- access mode / flags,例如 append、close-on-exec。
這讓不同 process 可 open 同一 file,但各有自己的 descriptor 與 offset;fork 後是否共享 offset 取決於 OS semantics。
Flow
open(pathname)
→ lookup/create system-wide entry
→ create per-process entry
→ return fd/handle
read(fd) / write(fd)
→ per-process entry
→ system-wide entry
→ FCB / block mappingclose(fd) 刪 per-process entry、遞減 open count;count 歸零才移除 shared entry,並寫回 dirty metadata。