操作系统实验--30天自制操作系统第9天实验日志

一、实验主要内容

1,整理源文件:
现在我们由于我们昨天工作,我们的源文件已经很多了,这里进行一些整理
整理的情况如下:
在这里插入图片描述

由于我们修改了很多.c文件,我们需要修改Makefile文件,修改指令如下:
在这里插入图片描述

2,内存容量检查(1)
我们要进行内存管理的第一步便是要确定内存有多大,这里我们通过自己编写程序去检查内存,而不是通过BIOS。
因为虽然在最初启动时,BIOS会检查内存容量,我们只需要询问BIOS就可以知道内存容量有多大。但这样的做法,会使asmhead.nas变长,另一方面,因为BIOS的版本不同,BIOS函数的调用方法也不相同,会导致很多的麻烦。
我们检查内存的方法:
首先先让486以后的CPU的高速缓存功能无效,然后向一个地址写入数据再读出来,如果该内存地址有效,就能正确读出数据,如果无效就会出现乱码,但如果在CPU里加上了缓存,那么写入和读出的便不是内存,而是缓存,最后便会导致所有的内存检查都是正常的,那么检查处理便不能完成。因此,只有在内存检查时将缓存设为OFF,这样才能进行正常的内存检查。
而 如何判断缓存是否要关闭,就需要先检查CPU是不是在486以上,如果是的话,那么就将缓存关闭。
创建memtest函数来实现(在b文件夹中的bootpack文件):
在这里插入图片描述

首先判断CPU是否是486以上还是386的,如果是486以上的话,那么EFLAGS寄存器的第18位就是所谓的AC标志位,如果CPU是386的,那么就没有这个标志位,第18位会是一直保持为0。现将1写入到第18位,然后再读出EFLAGS的值,继而检查AC标志位是否仍未1,最后,将AC标志位重置为0。
将AC标志位重置为0时,将eflag与上EFLAGS_AC_BIT即可。是取反运算符,将所有的位都反转,~EFLAGS_AC_BIT与0xfffbffff一样。
使用汇编语言编写函数load_cr0和store_cr0,对CR0寄存器的某一标志位进行操作来禁止缓存。
Load_cr0和store_cr0函数如下(在b文件夹中的naskfunc文件):
在这里插入图片描述

Memtest_sub函数:内存检查处理的实现部分(在b文件夹中的bootpack文件)
在这里插入图片描述

调查从起始地址到结束地址的范围,即能够使用的内存的末尾地址。如果p不是指针的话,就不能通过制定地址去读取内存,因此先执行p=i,然后用这个p,先将原来的值保存下来。接着试写

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值