Хочу продолжить эту тему, но несколько с другого бука. А кто нить знает как работает этот самый addr_limit который задается через set_fs ?
Как все уэе поняли KERNEL SPACE (KERNEL_DS) это от 3 до 4Gb, USER SPACE (USER_DS) это от 0 до 3 Gb. Но это голые слова, на практике же мы имеем
KERNEL_DS = 4Gb = непомню что там в хексе
USER_DS = 0xc000000 = 3Gb
с юсер спейсом предположим все понятно, адреса идут от 0 и до < USER_DS (addr_limit) а как это работает в случае с KERNEL_DS Oo ? Откуда процессу известно что оно должно начинать нумеровать адресе не с 0 а с 3Gb ?
А еще я не могу понять следующего: в GDT в десктрипторах __KERNEL_CS, __KERNEL_DS, USER_CS, USER_DS есть поля отвечающие за начало (base) и конец (linux) адресного пространства, и в них оно во всех от 0x00000000 до 0xffffffff. Тобишь от 0Gb до 4Gb. А адресное адресное пространство процесса подчиняется выше описанному правилу (от 0 до 3, от 3 до 4). Но здесь я пиняю на то что процессы использую виртуальное адресное пространство а в GDT указывается логические адреса. Я ошибаюсь ?