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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 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

目录
打赏
0
0
0
0
103
分享
相关文章
优化管理与服务:操作系统控制平台的订阅功能解析
本文介绍了如何通过操作系统控制平台提升系统效率,优化资源利用。首先,通过阿里云官方平台开通服务并安装SysOM组件,体验操作系统控制平台的功能。接着,详细讲解了订阅管理功能,包括创建订阅、查看和管理ECS实例的私有YUM仓库权限。订阅私有YUM仓库能够集中管理软件包版本、提升安全性,并提供灵活的配置选项。最后总结指出,使用阿里云的订阅和私有YUM仓库功能,可以提高系统可靠性和运维效率,确保业务顺畅运行。
基于OS Copilot 的深度解析测评
阿里云推出的OS Copilot结合自然语言处理与系统运维,为用户带来高效智能体验。本文通过安装和试用过程,测评其功能和使用感受。安装简单但文档需完善,支持部分Linux发行版。OS Copilot的自然语言交互、任务自动化处理及参数解读功能表现出色,适合运维人员和开发者。未来期待更多优化和扩展。
61 1
GitLab Runner 全面解析:Kubernetes 环境下的应用
GitLab Runner 是 GitLab CI/CD 的核心组件,负责执行由 `.gitlab-ci.yml` 定义的任务。它支持多种执行方式(如 Shell、Docker、Kubernetes),可在不同环境中运行作业。本文详细介绍了 GitLab Runner 的基本概念、功能特点及使用方法,重点探讨了流水线缓存(以 Python 项目为例)和构建镜像的应用,特别是在 Kubernetes 环境中的配置与优化。通过合理配置缓存和镜像构建,能够显著提升 CI/CD 流水线的效率和可靠性,助力开发团队实现持续集成与交付的目标。
【阿里云】操作系统控制台操作体验与性能评测全解析
操作系统控制台是现代云计算环境中进行系统管理和运维的重要工具,提供系统概览、诊断、观测、管理等功能,支持API、SDK、CLI等管理方式。通过创建角色、系统配置和组件安装等操作,用户可以高效管理云端资源,提升操作系统的使用效率和稳定性。尤其适合需要高效管理操作系统的用户及学习云计算、网络管理的学生。建议增强自定义功能、优化性能报告和完善文档支持,以进一步提升用户体验。
46 20
【阿里云】操作系统控制台操作体验与性能评测全解析
|
5月前
|
Java内存模型深度解析:从理论到实践####
【10月更文挑战第21天】 本文深入探讨了Java内存模型(JMM)的核心概念与底层机制,通过剖析其设计原理、内存可见性问题及其解决方案,结合具体代码示例,帮助读者构建对JMM的全面理解。不同于传统的摘要概述,我们将直接以故事化手法引入,让读者在轻松的情境中领略JMM的精髓。 ####
78 6
基于OS Copilot 的深度解析测评
OS Copilot是阿里云基于大模型构建的Linux系统智能助手,支持自然语言问答、辅助命令执行、系统运维调优等功能。它能理解多样化指令,简化复杂操作,提供流畅的多轮对话体验,响应迅速。通过自然语言描述需求,OS Copilot可转换并执行相应命令,帮助用户轻松管理阿里云资源,提升系统性能。首次使用体验表明,它对新手友好,安装简单,配置后通过“co”命令启动,为用户提供智能提示和优化建议,极大提高了Linux系统的使用效率。
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
62 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
Java内存模型(JMM)深度解析####
本文深入探讨了Java内存模型(JMM)的工作原理,旨在帮助开发者理解多线程环境下并发编程的挑战与解决方案。通过剖析JVM如何管理线程间的数据可见性、原子性和有序性问题,本文将揭示synchronized关键字背后的机制,并介绍volatile关键字和final关键字在保证变量同步与不可变性方面的作用。同时,文章还将讨论现代Java并发工具类如java.util.concurrent包中的核心组件,以及它们如何简化高效并发程序的设计。无论你是初学者还是有经验的开发者,本文都将为你提供宝贵的见解,助你在Java并发编程领域更进一步。 ####
深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功能和优势。
129 6
深入解析Linux操作系统的内核优化策略
本文旨在探讨Linux操作系统内核的优化策略,包括内核参数调整、内存管理、CPU调度以及文件系统性能提升等方面。通过对这些关键领域的分析,我们可以理解如何有效地提高Linux系统的性能和稳定性,从而为用户提供更加流畅和高效的计算体验。
145 17

热门文章

最新文章

推荐镜像

更多