Linux操作系统的启动的主要流程: PC上电后,自动进入实模式(实模式就是寄存器都是16位的,最大寻址范围是1M,最大分段是64KB),从地址0xFFFF0开始执行,这里一般都是ROM-BIOS的地址。 BIOS加载第一个扇区(引导扇区,512字节)的程序(bootsect.s)到绝对地址0x7C ...
分类:
系统相关 时间:
2020-03-08 22:05:03
阅读次数:
93
物理地址:物理地址就是内存单元的绝对地址,比如你有一个4G的内存条插在电脑上,物理地址0x0000就表示内存条的第一个存储单元,0x0010就表示内存条的第17个存储单元,不管CPU内部怎么处理地址,最终访问的都是物理地址。在CPU实模式下“段基址+段内偏移地址”就是物理地址,CPU可以使用此地址直 ...
分类:
其他好文 时间:
2020-03-01 19:38:47
阅读次数:
55
1. 实模式 在实模式下,CPU不会为任务提供任务的保护机制,代码任意运行。8086处理器是学习实模式的常用例子。它内部大致有以下寄存器: 8个16位的通用寄存器: AX (可以拆分成两个AH/AL的8位寄存器) BX (BH,BL) CX (CH,CL) DX (DH,DL) SI (source ...
分类:
其他好文 时间:
2020-02-05 20:15:32
阅读次数:
96
从开机加电到main函数执行(1) 启动BIOS,准备中断 BIOS的任务是将硬盘中的操作系统加载到内存中。 BIOS加载中断处理程序 BIOS的启动由硬件完成。8086系列在加电时进入16位实模式,将CS置为0xFFFF,IP置为0x0000, CS:IP指向0xFFFF0,指向了BIOS对应的地 ...
分类:
系统相关 时间:
2020-01-28 19:01:16
阅读次数:
192
通过前四章的努力,我们成功将控制权转交给了 loader.asm 这个程序,并且从实模式跨越到了保护模式。第四章讲保护模式的时候我说过,这是我们操作系统的第一个精彩之处。但其实这只是针对之前我们进行的只是无意义的输出,以及硬盘的加载等工作。但到了这一章,之前一步步的努力进入到了保护模式,也只能说是做 ...
分类:
其他好文 时间:
2020-01-26 22:23:18
阅读次数:
120
通过前三章的努力,我们成功将控制权转交给了 loader.asm 这个程序。具体说就是 bios 通过 加载并跳转到 0x7c00 (IMB大叔们定的) 把控制权转交给了我们操作系统的第一个汇编程序 mbr.asm,然后 mbr.asm 里做的事就是通过 加载 loader 程序并跳转到 0x900 ...
分类:
其他好文 时间:
2020-01-25 22:17:23
阅读次数:
110
背景 : 在此文章里会从分页分段机制去解析Linux内存管理系统如何工作的,由于Linux内存管理过于复杂而本人能力有限。会尽量将自己总结归纳的部分写清晰。 从实模式到保护模式的寻址方式的不同 : 16位CPU的寻址方式 : 在 8086 CPU 中,提供了两类寄存器来进行寻址,分别为段寄存器(例如 ...
分类:
系统相关 时间:
2020-01-25 15:27:43
阅读次数:
84
说明: 本文创建于2020年1月24日,正值新年伊始,愿广大读者新年快乐,身体安泰,万事吉祥。主要以记录研究汇编语言时所遇到的种种知识点为目的,希望能为各位读者减少些不必要的研究时间,也希望对正在学习汇编语言的同志有所帮助。因作者工作、精力和知识面有限,下文中出现纰漏的地方不吝指教。若各位读者觉得需 ...
分类:
编程语言 时间:
2020-01-24 18:44:52
阅读次数:
74
【自制操作系统01】硬核讲解计算机的启动过程目录 一、为什么是 BIOS 主导? 二、内存映射 三、实模式下的内存分布 四、怎么就从 BIOS 里的程序开始执行了 五、BIOS 里到底写了什么程序 六、0x7c00 是啥 七、启动区里的代码写了啥 八、操作系统内核写了啥 软硬件协同发展 历史遗留问题 ...
分类:
其他好文 时间:
2020-01-20 18:42:54
阅读次数:
64
先说实模式,这是x86开机时所处的模式。仿佛cpu仍旧是80x86时代。 然后是unreal模式,其实叫做far real mode更形象,就是,仍旧是在16位模式下,但是可以访问1M以上的地址。 这个模式是通过先进入保护模式,通过修改段寄存器,把它的影子寄存器的limit修改成4G来做到的。然后回 ...
分类:
其他好文 时间:
2020-01-04 16:50:53
阅读次数:
84