SylixOS I/O系統
I/O 系統又稱作輸入輸出系統, SylixOS兼容POSIX標準輸入輸出系統,SylixOS的I/O概念繼承了UNIX操作系統的I/O概念,認為一切皆為文件。與UNIX操作系統相同, SylixOS中的文件也分為不同的類型。
SylixOS的I/O系統結構,分為ORIG驅動結構和NEW_1驅動結構。NEW_1驅動結構就是在ORIG驅動結構基礎上增加了設備節點結構,其負責文件訪問權限、文件記錄鎖等功能。圖1.1為兩種驅動結構的對比圖。
圖1.1 ORIG驅動結構和NEW_1驅動結構對比圖
關鍵結構體
程序清單2.1 文件節點
typedef struct {
LW_LIST_LINE FDNODE_lineManage; / 同一設備 fd_node 鏈表
LW_OBJECT_HANDLE FDNODE_ulSem; / 內部操作鎖 /
dev_t FDNODE_dev; / 設備 /
ino64_t FDNODE_inode64; / inode (64bit 為了兼容性) /
mode_t FDNODE_mode; / 文件 mode
uid_t FDNODE_uid; / 文件所屬用戶信息 /
gid_t FDNODE_gid;
off_t FDNODE_oftSize; / 當前文件大小 /
struct __fd_lockf FDNODE_pfdlockHead; / 第一個鎖 /
LW_LIST_LINE_HEADER FDNODE_plineBlockQ; /
BOOL FDNODE_bRemove; / 是否在文件未關閉時有 unlink /
ULONG FDNODE_ulLock; / 鎖定, 不允許寫, 不允許刪除 /
ULONG FDNODE_ulRef; / fd_entry 引用此 fd_node 數量/
PVOID FDNODE_pvFile; / 驅動使用此變量標示文件 /
PVOID FDNODE_pvFsExtern; / 文件系統擴展使用 /
} LW_FD_NODE;
typedef LW_FD_NODE *PLW_FD_NODE;
程序清單2.2 文件結構結構體
typedef struct {
PLW_DEV_HDR FDENTRY_pdevhdrHdr; / 設備頭 /
PCHAR FDENTRY_pcName; / 文件名 /
PCHAR FDENTRY_pcRealName; / 去除符號鏈接的真實文件名 /
LW_LIST_LINE FDENTRY_lineManage; / 文件控制信息遍歷表 /
#define FDENTRY_pfdnode FDENTRY_lValue
LONG FDENTRY_lValue; / 驅動程序內部數據 /
/ 如果為 NEW_1 驅動則為fd_node/
INT FDENTRY_iType; /* 文件類型 (根據驅動判斷) */
INT FDENTRY_iFlag; /* 文件屬性 */
INT FDENTRY_iAbnormity; /* 文件異常 */
ULONG FDENTRY_ulCounter; /* 總引用計數器 */
off_t FDENTRY_oftPtr; /* 文件當前指針 */
/* 只有 NEW_1 或更高級驅動使用 */
BOOL FDENTRY_bRemoveReq; /* 刪除請求 */
} LW_FD_ENTRY;
typedef LW_FD_ENTRY *PLW_FD_ENTRY;
程序清單2.3 文件描述符
typedef struct {
PLW_FD_ENTRY FDDESC_pfdentry; / 文件結構 /
BOOL FDDESC_bCloExec; / FD_CLOEXEC /
ULONG FDDESC_ulRef; / 對應文件描述符的引用計數 /
} LW_FD_DESC;
typedef LW_FD_DESC *PLW_FD_DESC;
- 流程
- _IoOpen函數流程:
圖3.1 _IoOpen函數
- 獲取完整文件名流程:
圖3.2 獲取完整文件名流程 - 申請文件描述符的大概流程:
圖3.3 申請文件描述符流程
SylixOS I/O系統