自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(5)
  • 收藏
  • 关注

原创 内核初始化_主内存初始化mem_init

数组,找到第一个标记为空闲的页面,将其标志设置为已分配,清空对应页的4K内存,最后返回对应的物理内存地址。1MB~2MB部分的内存属于缓冲区,2MB是缓冲区的末端,也是主内存的起始地址,缓冲区内的内存全部标记为。数组对1MB以下的内存没有记录,这部分内存放到内核代码,不会允许修改。2MB以上的空间属于主内存,目前还没有任何程序申请,因此全部标记为0。,也就是100,再把其中的某个部分赋值为0;总结一下,这部分的工作很简单,就是把。,主内存区的所有内存都标记为0.是传进来的参数,对应的值为。

2024-09-06 16:46:59 416

原创 内核初始化_获取设备信息与划分内存边界

接下来是内存边界值的划分,说实话很违和,有点ugly,但没办法,这是linus写的代码。总结一下,这部分代码的作用就是获取计算机内存的总大小并以此来分配出对应大小的缓冲区内存。是以KB为单位的扩展内存大小,左移10位将其转换为字节数),所以。开始的内存处,因此,main.c里面直接去对应地址取出来即可。首先是设备参数的信息,回顾一下之前的笔记可以发现,的值是相等的,也就是说其实只要求出两个变量的值。,这个变量的值其实就等于1MB+拓展内存的大小,的大小为2MB,ok,到这里就完事了,很简单吧。

2024-09-06 16:40:40 306

原创 内核初始化_main函数简析

的代码很少,只有二十几行,但这二十几行代码里面却包含了很多内容。接下来我们就一个部分一个部分地看过去,等看完这些,操作系统也就入门了。第三部分是切换到用户态模式,并在新的进程中做最终初始化。书接上文,在使用汇编完成那些苦力活之后我们终于进入了。函数,这部分是重点,我们后面一个一个来看。接着是进行各种初始化的一系列。首先是参数的取值与计算。

2024-09-06 16:32:16 248

原创 进入内核前的操作

很明显,这个操作会覆盖内存地址0x0到内存地址0x80000区域内的所有内容,但是这并没有关系,因为setup.s的最后会跳到system模块执行,其他的代码不再重要了。直白一点说,实模式是古老的,落后的操作模式,但因为INTEL坚持向前的兼容性,即便是现在最新的CPU也要支持实模式,并且需要操作系统手动完成实模式向保护模式的转换。段描述符索引是1,也就是找全局描述符表里面索引为1的段。前面说过,我们在做模式的切换,从以前CPU的实模式切换到现代CPU的保护模式,这个A20地址线就是实模式留下的遗留问题。

2024-09-03 17:48:13 748

原创 BIOS程序

寄存器的初始值为0xFFFF0,CPU执行的第一条指令就从这个地址开始。这个地址并不是常规的内存地址,而是指向了ROM中存储的BIOS程序。因此,系统上电后的第一件事就是去执行BIOS程序。当一个磁盘的0盘0道1扇区(每个扇区的大小都是512字节)的最后两个字节为0x55和0xaa时,则认为该扇区为启动区。如果不是,则是普通扇区。BIOS所做的事情很简单,就是将磁盘中操作系统程序前512字节的数据搬运到内存中,之后将pc指针指向。因为Intel就是这么规定的,可能是某个程序员随手写的地址。

2024-09-03 17:45:57 192

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除