linux-x86中的CRx寄存器和分页

linux-x86中的CRx寄存器和分页,linux,memory-management,assembly,linux-kernel,kernel,Linux,Memory Management,Assembly,Linux Kernel,Kernel,我试图学习一些关于linux内核和内存管理的知识。为此,我编写了一小段内核模块代码来转储CR0寄存器内容。我知道CR0中的位31在设置时表示分页已由内核打开,但是,当我打印CR0时(对于我的特定实例),我看到它被设置为0x2。这表明(如果我理解正确的话)两个分页都被禁用,处理器处于实模式(位0也未设置)。这让我很惊讶,因为我期望保护模式/分页内存—难道所有多任务操作系统都不这样做吗?内核能否在实模式/非分页模式下运行,用户空间能否在实模式/分页模式下受到保护?有人能解释为什么我会看到我在这里看到

我试图学习一些关于linux内核和内存管理的知识。为此,我编写了一小段内核模块代码来转储CR0寄存器内容。我知道CR0中的位31在设置时表示分页已由内核打开,但是,当我打印CR0时(对于我的特定实例),我看到它被设置为0x2。这表明(如果我理解正确的话)两个分页都被禁用,处理器处于实模式(位0也未设置)。这让我很惊讶,因为我期望保护模式/分页内存—难道所有多任务操作系统都不这样做吗?内核能否在实模式/非分页模式下运行,用户空间能否在实模式/分页模式下受到保护?有人能解释为什么我会看到我在这里看到的吗

请注意,我正在运行2.6.18-274.el5内核(64位RHEL 5二进制)

我的代码中有一个小错误,所以我打印的是随机垃圾,而不是CR0寄存器。下面是工作代码-请注意,如果您在汇编中编码,则不需要调用read_c0函数

.globl init_module
.globl cleanup_module
.text
init_module:
    nop
    movq    $ENTER_MSG,     %rdi
    movq    %cr3,           %rsi
    movq    %rsi,           %rdx
    shrq    $12,            %rdx
    movq    %cr0,           %r11
    movq    $FALSE,         %rcx
    andq    PAGING_BIT_31,  %r11
    cmpq    PAGING_BIT_31,  %r11
    jne     .CONT1
    movq    $TRUE,          %rcx
.CONT1:
    movq    $FALSE,         %r8
    movq    %cr0,           %r12
    andq    PROTMOD_BIT_0,  %r12
    cmpq    PROTMOD_BIT_0,  %r12
    jne     .CONT2
    movq    $TRUE,          %r8
.CONT2:
    movq    %cr0,           %r9
    xorq    %rax,           %rax
    callq   printk
    xorq    %rax,           %rax
    retq

cleanup_module:
    nop
    movq    $LEAVE_MSG,     %rdi
    movq    %cr3,           %rsi
    xorq    %rax,           %rax
    callq   printk
    retq

.section .rodata
ENTER_MSG:
    .asciz "\n\nHELLO! CR3: %p, pCR3: %p \n\tPAGING IS %s\n\tPROTECTED MODE IS %s\n\tCR0: %p\n" 
LEAVE_MSG:
    .asciz "GOODBYE! CR3: %p\n"
PAGING_BIT_31:
    .quad 0x80000000
PROTMOD_BIT_0:
    .quad 0x1
FALSE:
    .asciz "OFF"
TRUE:
    .asciz "ON"

CR3不是页面目录基寄存器吗?对不起。意思是cr0。编辑的问题。感谢您的捕获。您如何读取CR0?将其移动到%rsi并在程序集内核模块中调用printk。我应该如何阅读它?请参阅原始问题中添加的代码。不需要使用read_cr0。我的原始代码中有一个bug。通过上面的操作,我得到了我所期望的,即分页处于“按原样保护”模式。再次感谢你的帮助。