1. 程式人生 > >SylixOS I/O系統

SylixOS I/O系統

efi 引用 tar term 不同的 計數器 設備節點 handle desc

  • 概述
    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;

    1. 流程
    2. _IoOpen函數流程:
      技術分享圖片

    圖3.1 _IoOpen函數

    1. 獲取完整文件名流程:
      技術分享圖片
      圖3.2 獲取完整文件名流程
    2. 申請文件描述符的大概流程:
      技術分享圖片
      圖3.3 申請文件描述符流程

    SylixOS I/O系統