Linux 3.4.6 определяет следующие макросы в arch/x86/include/asm/segment.h. Кто-нибудь может объяснить, почему макросы __USER добавляют 3 к определенной константе и почему этого не делается для макросов __KERNEL?
#define __KERNEL_CS (GDT_ENTRY_KERNEL_CS*8)
#define __KERNEL_DS (GDT_ENTRY_KERNEL_DS*8)
#define __USER_DS (GDT_ENTRY_DEFAULT_USER_DS*8+3)
#define __USER_CS (GDT_ENTRY_DEFAULT_USER_CS*8+3)