O que é “fs” curto na função do kernel “get_fs ()”?

2

Existem duas funções de kernel do Linux:

get_ds() e get_fs()

De acordo com este artigo , eu sei que ds é a abreviação de data segment .

No entanto, não posso adivinhar o que "fs" é curto.

Alguma explicação?

    
por xmllmx 03.02.2015 / 11:48

4 respostas

6

O FS vem do registrador de segmento adicional chamado FS na arquitetura 386 (final do segundo parágrafo).

Meu palpite é que depois do DS para Segmento de Dados e do ES para o Segmento Extra, a Intel apenas escolheu os próximos caracteres do alfabeto (FS, GS). Você pode ver o registro 386 na página wiki , no gráfico à direita.

Da fonte do kernel do Linux no meu sistema Linux Mint ( arch/x86/include/asm/uaccess.h ):

/*
 * 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))
    
por 03.02.2015 / 11:56
1

Um artigo recente, Um adeus ao set_fs , postado por Jonathan Corbet explica a razão histórica para usar o fs em get_fs / set_fs .

The original role of set_fs() was to set the x86 processor's FS segment register which, in the early days, was used to control the range of virtual addresses that could be accessed by unprivileged code. The kernel has, of course, long since stopped using x86 segments this way.

    
por 08.04.2018 / 11:47
1

Como foi explicado por Anthon acima, são apenas letras subseqüentes no alfabeto que indicam que são segmentos de dados adicionais.

Isso é mais claro no Guia de Sistemas Vol-3A da Intel, como mostrado abaixo, onde diz que ES / FS / GS são 'três registradores adicionais de segmento de dados'

Parasabermaissobreumpoucodehistóriaemregistrosdesegmentoextra(FS/GS)foiintroduzidode286para386consultararespostapor"Mellowcandle" aqui

    
por 21.06.2018 / 22:09
-3

Em get_fs() , fs é para segmento livre .

    
por 27.08.2015 / 13:07