Linux

核心函式“get_fs()”中“fs”的縮寫是什麼?

  • June 21, 2018

有兩個 Linux 核心函式:

get_ds()get_fs()

根據這篇文章,我知道ds是縮寫data segment

但是,我猜不出“fs”是什麼的縮寫。

有什麼解釋嗎?

FS 來自386 架構上名為 FS 的附加段寄存器(第二段末尾)。

我的猜測是,在用於數據段的 DS 和用於額外段的 ES 之後,英特爾只選擇了字母表中的下一個字元(FS、GS)。您可以在wiki 頁面右側的圖形中看到 386 寄存器。

從我的 Linux Mint 系統 ( arch/x86/include/asm/uaccess.h) 上的 linux 核心原始碼:

/*
* The fs value determines whether argument validity checking should be
* performed or not.  If get_fs() == USER_DS, checking is performed, with
* get_fs() == KERNEL_DS, checking is bypassed.
*
* For historical reasons, these macros are grossly misnamed.
*/

#define MAKE_MM_SEG(s)  ((mm_segment_t) { (s) })

#define KERNEL_DS       MAKE_MM_SEG(-1UL)
#define USER_DS         MAKE_MM_SEG(TASK_SIZE_MAX)

#define get_ds()        (KERNEL_DS)
#define get_fs()        (current_thread_info()->addr_limit)
#define set_fs(x)       (current_thread_info()->addr_limit = (x))

引用自:https://unix.stackexchange.com/questions/182631