MacOS环境-手写操作系统-16-内存管理 解析内存状态

简介: MacOS环境-手写操作系统-16-内存管理 解析内存状态

内存管理 - 解析内存状态

1.简介

现在 我们可以显示和分析获得的相关信息 为下一步实现内存管理做准备


首先我们把BIOS填充好的数据缓冲过去导出给C语言模块 以便使用C语言来实现分析功能:


get_adr_buffer:
        mov  eax, MemChkBuf
        ret


MemChkBuf 是BIOS填充好的数据缓冲区地址 C语言模块通过调用接口get_adr_buffer 获得该地址


以便对内存分布状况进行深入的解析


2.代码

C语言中:


struct AddrRangeDesc {
    unsigned int baseAddrLow;
    unsigned int baseAddrHigh;
    unsigned int lengthLow;
    unsigned int lengthHigh;
    unsigned int type;
};
char* get_adr_buffer(void);
void  showMemoryInfo(struct AddrRangeDesc* desc, char* vram, int page, int xsize,int color);



首先根据BIOS填充的地址描述符 设计一个对应的结构体 以便对地址描述符进行分析


showMemoryInfo函数的作用是将地址描述符的信息显示到桌面上


在Main函数中调用

void CMain(void) {
...

struct AddrRangeDesc* memDesc = (struct AddrRangeDesc*)get_adr_buffer();

for(;;) {
  ....
else if(fifo8_status(&keyinfo) != 0){
           io_sti();
           data = fifo8_get(&keyinfo);

           if (data == 0x1C) {
               showMemoryInfo( memDesc + count, vram, count, xsize, COL8_FFFFFF);
               count = (count+1);
               if (count > memCnt) {
                  count = 0;
               }
           }
  ....
}
...
}

在C入口函数中 先通过调用汇编模块导出的接口 获得地址描述符的内存地址


在主循环中 当键盘又按键按下时


如果按键的扫描码是0x1C 也就是回车键被按下的时候


内核就在桌面上显示地址描述符的信息


每按一次回车键 就显示下一个描述符的信息 当所有描述符都显示完毕后 重新从第一个描述符开始循环显示

void  showMemoryInfo(struct AddrRangeDesc* desc, char* vram, int page,int xsize, int color) {
    int x = 0, y = 0, gap = 13*8,  strLen = 10* 8;

    boxfill8(vram, xsize, COL8_008484, 0, 0,  xsize, 100);

    showString(vram, xsize, x, y, color, "page is: ");
    char* pPageCnt = intToHexStr(page);
    showString(vram, xsize, gap, y, color, pPageCnt);
    y += 16;

    showString(vram, xsize, x, y, color, "BaseAddrL: ");
    char* pBaseAddrL = intToHexStr(desc->baseAddrLow);
    showString(vram, xsize, gap, y, color, pBaseAddrL);
    y += 16;

    showString(vram, xsize, x, y, color, "BaseAddrH: ");
    char* pBaseAddrH = intToHexStr(desc->baseAddrHigh);
    showString(vram, xsize, gap, y, color, pBaseAddrH);

    y += 16;
    showString(vram, xsize, x, y, color, "lengthLow: ");
    char* pLengthLow = intToHexStr(desc->lengthLow);
    showString(vram, xsize, gap, y, color, pLengthLow);

    y+= 16;
    showString(vram, xsize, x, y, color, "lengthHigh: ");
    char* pLengthHigh = intToHexStr(desc->lengthHigh);
    showString(vram, xsize, gap, y, color, pLengthHigh);

    y+= 16;
    showString(vram, xsize, x, y, color, "type: ");
    char* pType = intToHexStr(desc->type);
    showString(vram, xsize, gap, y, color, pType);
}

showMemoryInfo实现不难,就是把地址描述符每个成员的数值转换成16进制字符串显示到桌面上。上面的代码编译后加载到虚拟机,运行情况如下:


(编译过程和之前一样 后边我们自动化起来)


编译C文件


i386-elf-gcc -m32 -fno-asynchronous-unwind-tables -s -c -o write_vga_desktop.o write_vga_desktop.c


反汇编o文件


./objconv -fnasm write_vga_desktop.o write_vga_desktop.asm


删除无用部分


修改kernel


%include "write_vga_desktop.asm"


修改boot(直接放大一点)直接读了18个扇区 肯定够用了


mov          AL,  18        ; AL 表示要练习读取几个扇区


编译boot


nasm -o boot.bat boot.asm


编译kernel


nasm -o kernel.bat kernel.asm


运行java 生成system.img

目录
相关文章
|
11月前
|
Dart 开发工具 Android开发
在macOS系统上配置Flutter环境的步骤
在macOS系统上配置Flutter环境的步骤
1526 159
|
弹性计算 运维 安全
优化管理与服务:操作系统控制平台的订阅功能解析
本文介绍了如何通过操作系统控制平台提升系统效率,优化资源利用。首先,通过阿里云官方平台开通服务并安装SysOM组件,体验操作系统控制平台的功能。接着,详细讲解了订阅管理功能,包括创建订阅、查看和管理ECS实例的私有YUM仓库权限。订阅私有YUM仓库能够集中管理软件包版本、提升安全性,并提供灵活的配置选项。最后总结指出,使用阿里云的订阅和私有YUM仓库功能,可以提高系统可靠性和运维效率,确保业务顺畅运行。
|
存储 缓存 安全
Java内存模型深度解析:从理论到实践####
【10月更文挑战第21天】 本文深入探讨了Java内存模型(JMM)的核心概念与底层机制,通过剖析其设计原理、内存可见性问题及其解决方案,结合具体代码示例,帮助读者构建对JMM的全面理解。不同于传统的摘要概述,我们将直接以故事化手法引入,让读者在轻松的情境中领略JMM的精髓。 ####
202 6
|
运维 API 开发工具
【阿里云】操作系统控制台操作体验与性能评测全解析
操作系统控制台是现代云计算环境中进行系统管理和运维的重要工具,提供系统概览、诊断、观测、管理等功能,支持API、SDK、CLI等管理方式。通过创建角色、系统配置和组件安装等操作,用户可以高效管理云端资源,提升操作系统的使用效率和稳定性。尤其适合需要高效管理操作系统的用户及学习云计算、网络管理的学生。建议增强自定义功能、优化性能报告和完善文档支持,以进一步提升用户体验。
397 21
【阿里云】操作系统控制台操作体验与性能评测全解析
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
896 11
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
10月前
|
Kubernetes Cloud Native 区块链
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
320 0
|
存储 运维 安全
深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功能和优势。
460 6
|
缓存 并行计算 Linux
深入解析Linux操作系统的内核优化策略
本文旨在探讨Linux操作系统内核的优化策略,包括内核参数调整、内存管理、CPU调度以及文件系统性能提升等方面。通过对这些关键领域的分析,我们可以理解如何有效地提高Linux系统的性能和稳定性,从而为用户提供更加流畅和高效的计算体验。
615 24
|
安全 前端开发 Android开发
探索移动应用与系统:从开发到操作系统的深度解析
在数字化时代的浪潮中,移动应用和操作系统成为了我们日常生活的重要组成部分。本文将深入探讨移动应用的开发流程、关键技术和最佳实践,同时分析移动操作系统的核心功能、架构和安全性。通过实际案例和代码示例,我们将揭示如何构建高效、安全且用户友好的移动应用,并理解不同操作系统之间的差异及其对应用开发的影响。无论你是开发者还是对移动技术感兴趣的读者,这篇文章都将为你提供宝贵的见解和知识。
|
存储 算法 Java
Java内存管理深度解析####
本文深入探讨了Java虚拟机(JVM)中的内存分配与垃圾回收机制,揭示了其高效管理内存的奥秘。文章首先概述了JVM内存模型,随后详细阐述了堆、栈、方法区等关键区域的作用及管理策略。在垃圾回收部分,重点介绍了标记-清除、复制算法、标记-整理等多种回收算法的工作原理及其适用场景,并通过实际案例分析了不同GC策略对应用性能的影响。对于开发者而言,理解这些原理有助于编写出更加高效、稳定的Java应用程序。 ####

推荐镜像

更多