Ucore-Lab1物理内存管理

解决makelab1-mon问题:从保护模式入门到启动加载过程详解
本文档详细解答了makelab1-mon执行后的后续步骤,包括如何手动处理tools/lab1init,开启A20线实现模式转换,以及GDT的初始化、保护模式设置、操作系统启动流程。涉及的技术点有:GDB操作、A20控制、内存管理模式切换、GDT和描述符、保护模式启用和引导加载。

问题

  1. 执行make lab1-mon 后貌似无法自动执行tools/lab1init图片描述
    解决:
    重开一个gdb 改为手动

练习三

  • 为何开启A20,如何开启?
    为了将实模式转换成保护模式
    将键盘控制器上的A20线置于高电位,全部32条地址线可用。
    movb $0xdf,%al
    outb %al,$0x60
    
  • 如何初始化GDT
    一个简单的GDT表和其描述符已经静态存储在引导区中,载入即可。
    lgdt gdtdesc
    
  • 如何使能 和 进入保护模式
    将cr0寄存器PE位 置1便开启了保护模式
    	movl %cr0,%eax
    	orl $CR0_PE_ON,%eax
    	movl %eax,%cr0
    通过长跳转更新cs的基地址
    	 ljmp $PROT_MODE_CSEG, $protcseg
    	.code32
    	protcseg:
    设置段寄存器,并建立基栈
    	movw $PROT_MODE_DSEG, %ax
        movw %ax, %ds
        movw %ax, %es
        movw %ax, %fs
        movw %ax, %gs
        movw %ax, %ss
        movl $0x0, %ebp
        movl $start, %esp
    

操作指令

# 单步执行
next 单步到程序源代码的下一行,不进入函数。
nexti 单步一条机器指令,不进入函数。
step 单步到下一个不同的源代码行(包括进入函数)。
stepi 单步一条机器指令。
# 反汇编(gdb 命令行输入)
define hook-stop
x/i $pc
end

练习四

  • bootloader如何读取硬盘扇区的?
  • bootloader是如何加载ELF格式的OS?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值