Linux0.11 源码趣读
闪客
低并发编程公号作者
18650 人已学习
赠一得一
课程目录
已完结/共 22 讲
Linux0.11 源码趣读
15
15
1.0x
00:00/00:00
登录|注册

05|重要代码放在零地址处

你好,我是闪客。
上一讲我们说到,操作系统已经完成了各种从硬盘到内存的加载,以及内存到内存的复制(你可以通过后面这张图来回忆)。
在这一讲中,操作系统将会对内存布局做最后一次大调整,让我们一起看看它是怎么折腾的吧!

处处都是 BIOS 的调包侠

好,我们向下一个文件 setup.s 进发!现在程序跳转到了 0x90200 这个位置开始执行,这个位置处的代码就位于 setup.s 的开头,代码如下:
start:
mov ax,#0x9000 ; this is done in bootsect already, but...
mov ds,ax
mov ah,#0x03 ; read cursor pos
xor bh,bh
int 0x10 ; save it in known place, con_init fetches
mov [0],dx ; it from 0x90000.
这里又有个 int 指令。
前面的课程如果你有好好看过的话,一下就能猜出它要干嘛。还记不记得之前有个 int 0x13 表示触发 BIOS 提供的读磁盘中断程序?
这个 int 0x10 也是一样的,它也是触发 BIOS 提供的中断服务,具体来说是调用显示服务相关的中断处理程序,而 ah 寄存器被赋值为 0x03 表示显示服务里具体的读取光标位置功能这一个子服务。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了操作系统在内存布局上的调整过程。文章首先介绍了操作系统在0x90200位置处执行的代码,通过调用BIOS提供的中断服务获取光标位置、内存信息、显卡显示模式和硬盘信息等。接着讲解了关闭中断、内存复制和内存布局整理的过程。最后指出,操作系统的重要代码被移动到内存的零地址处,而其他临时信息则存放在0x90000的位置。文章强调了系统模块的重要性,并预告了下一步操作系统将进行的模式转换工作。整体而言,本文以技术性强、内容丰富为特点,对操作系统内存布局的调整过程进行了详细解读,为读者提供了深入了解操作系统内部工作原理的视角。

该试读文章来自《Linux0.11 源码趣读》,如需阅读全部文章,
请先通过赠一得一解锁课程
赠一得一
登录 后留言

全部留言(12)

  • 最新
  • 精选
  • 余生
    物理内存0x7c00开始的一段空间是存bios程序代码的,这段区域属于rom内存区域,我理解这段内存区域是不支持写入的吧?老师,我理解有误吗?

    作者回复: 有误,是 bios 把代码加载到内存的这里,不是说这里的区域就是 bios 所在的 rom

    2023-01-06归属地:北京
  • Geek_73c432
    通过寄存器传参和接收返回值,中断号看作函数名,int 指令调用这个函数。很形象啊

    作者回复: 因为实事就是如此设计的嘛~

    2022-11-12归属地:北京
  • yingjun
    精彩,爽

    编辑回复: 感谢支持

    2022-11-05归属地:北京
  • crane
    为啥自己下载的linux 0.11源码和作者您讲解的源代码不一样呢

    作者回复: 不同汇编器对应不同汇编语言的风格,无所谓的

    2022-11-05归属地:北京
    4
  • Sherlock Wu
    sub R,S 和 xor R,R 还有很多其它指令都可以寄存器清零,Intel 和 AMD 官方更推荐使用xor的方式。 https://stackoverflow.com/questions/33666617/what-is-the-best-way-to-set-a-register-to-zero-in-x86-assembly-xor-mov-or-and
    2023-03-31归属地:浙江
    1
  • Ethan Liu
    system模块之前不是120K吗?为什么整理之后占用0到0x80000这512K空间?
    2023-02-16归属地:上海
    1
    1
  • 涵萝卜丶
    “system 才是真正被视为重要的操作系统代码” 音频中说成 “setup 才是真正被视为重要的操作系统代码”了
    2023-09-04归属地:广东
  • 布拉姆
    老师, 关于中断向量表有个疑问, 获取第一块硬盘的信息。 ; Get hd0 data mov ax,#0x0000 mov ds,ax lds si,[4*0x41] ...... 看到诸如int 0x14, “中断向量表中int 0x41的中断向量位置(4*0x41 =0x0000:0x0104)存放的并不是中断程序地址,而是第一个硬盘的基本参数表。”我查了其他资料得知: “8086系统在存储器的最低1KB区域(00000H~003FFH)建立一个中断向量表,存放256个中断类型的中断向量。....” 问题来了, “8086系统在存储器的最低1KB” 是指目前整个内存布局的最低1k空间吗? 我从第一课看到现在其实0~1kb(00000H~003FFH)空间貌似还没初始化, 即便后面提到把system.s搬家到0地址, 但这时0x0000:0x0104厘米真的已经有中断程序了吗? 如果有是什么时候放上去的? 还是我理解错了?
    2023-03-13归属地:日本
  • Ethan
    xor bh, bh 这条语句时候清零bh吗?为什么不用sub bh,bh,和前面不统一啊
    2023-02-24归属地:上海
    1
  • 大头爸爸
    rep movsw 内部用到了DMA吗?
    2023-02-03归属地:美国
收起评论
显示
设置
留言
12
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部