17.内存块信息解析

本文介绍了如何解析和显示内存段信息。通过修改kernel.h增加内存描述,并在os.c中编写内存显示函数,实现了按回车键逐条显示内存块的地址、长度和类型。在32位系统中,识别出两块可供内核使用的内存区域,为后续内存管理算法的开发奠定了基础。
摘要由CSDN通过智能技术生成

简介

上节我们整理了代码、修复了潜藏的问题。使得代码更易于管理维护。

目标

实现对获取的内存段信息解析,按下回车键后依次显示内存段信息。
1.kernel.h增加内存段描述信息,给C语言模块使用

//内存分布块描述信息
typedef struct _AddrRangeDes {
    unsigned int addrLow;
    unsigned int addrHigh;
    unsigned int lenLow;
    unsigned int lenHigh;
    unsigned int type;
}AddrRangeDes;

高4字节addrHigh和低4字节addrLow共同组成64位内存地址
高4字节lenHigh和低4字节lenLow共同组成64位内存长度信息
4字节type字段描述内存使用情况, type 等于1,表示当前内存块可以被内核使用。type等于2,表示当前内存块已经被占用,系统内核绝对不能使用,type等于3,保留给未来使用,内核也不能用当前内存块。

2.os.c编写内存显示函数

void showMemInfo(AddrRangeDes *memDes,int page){
	//重新绘制桌面背景,清除显存中无用信息
	fillRect(0,20,_vram.screenW,_vram.screenH-30, COL8_008484);
	//一行显示32个字符
	_charCount = 32;
	//如果换成static char *msg 时objconv 反汇编后nasm 编译时会出错,
	//建议使用数组的方式定义
	static char msg[] = "page:";
	char *txt = msg;
	int len = 0;
	

	for(int i=0;txt[i] != 0;i++){
		_tempArr[i] = txt[i];
		len++;
	}
	
	short temp = char2HexStr(page);
	_tempArr[len] = '0';
	_tempArr[len+1] = 'x';
	_tempArr[len+2] = ((char *)&temp)[0];
	_tempArr[len+3] = ((char *)&temp)[1];
	showString(_tempArr,len+4,true);

	_charCount = 64;
	static char add[] = &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值