file-type

Ucore实验:Makefile与GDB调试

DOCX文件

下载需积分: 0 | 2.81MB | 更新于2024-06-30 | 43 浏览量 | 0 下载量 举报 收藏
download 立即下载
"OS实验-44-第2次实验1" 在这个实验中,学生将深入理解操作系统的基础,特别是针对ucore这个开源操作系统内核。实验分为三个主要练习,旨在提升对操作系统开发、编译工具以及调试技巧的掌握。 1. 练习1:使用make和理解Makefile 在这一部分,学生需要掌握如何使用`make`命令来编译ucore项目。Makefile是用于自动化编译过程的脚本,它定义了一系列规则,告诉编译器如何处理源文件。通过`make V=`,学生可以看到编译过程中每个步骤的详细信息,这有助于理解gcc编译器如何将`.c`和`.h`文件转化为可执行的ucore内核。`sign.c`文件在编译流程中起着关键作用,它的主要功能是在生成的ucore可执行文件中设置引导扇区的特定标识,这对于确保正确加载和执行操作系统至关重要。 2. 练习2:使用qemu和gdb进行代码调试 这一部分的目标是让学生熟悉在虚拟环境中使用qemu和gdb进行程序调试。实验要求学生从CPU启动后的第一条指令开始,单步跟踪BIOS的执行。在地址0x7c00处设置断点,检查实地址模式下的执行流程,并将反汇编代码与源代码(如`bootasm.S`和`bootblock.asm`)进行对比。此外,学生还需要在其他位置设置断点以验证其功能,通过截图和文字说明来记录整个调试过程。 3. 练习3:实模式到保护模式的转换 最后一部分涉及操作系统启动过程中的关键环节——从实模式切换到保护模式。这一转换通常包括清理环境(如清零标志和段寄存器),开启A20线(允许访问超过1MB的内存),以及设置适当的控制寄存器以启用保护模式。学生需要通过代码或截图来展示这一转换过程。 通过这三个练习,学生不仅能够熟悉操作系统开发的基本工具,还能深入了解操作系统启动和执行的底层机制,这对未来从事系统级编程或操作系统设计的学习和工作至关重要。实验报告应详尽地记录这些步骤和观察结果,以便于回顾和理解。

相关推荐

filetype
计算机类课程实验报告 (操作系统实验) 实验 二 "实验名称 "动态分区分配方式的模拟 " "实验日期 " "实验成绩 " " "实验目的 "(给出本次实验所涉及并要求掌握的知识点及实验内容具体描" "、要求及 "述) " "内容 "实验目的: " " "了解动态分区分配方式中使用的数据结构和分配算法,并进一" " "步加深对动态分区存储管理方式及其实现过程的理解。 " " "实验内容: " " "用C语言分别实现采用首次适应算法和最佳适应算法的动态分 " " "区分配过程alloc()和回收过程free()。其中,空闲分区通过 " " "空闲分区链来管理;在进行内存分配时,系统优先使用空闲区" " "低端的空间。 " " "假设初始状态下可用的内存空间为640KB,并有下列的请求序 " " "列: " " "*作业1申请130KB " " "*作业2申请60KB " " "*作业3申请100KB " " "*作业2释放60KB " " "*作业4申请200KB " " "*作业3释放100KB " " "*作业1释放130KB " " "*作业5申请140KB " " "*作业6申请60KB " " "*作业7申请50KB " " "*作业6释放60KB " " "请分别采用首次适应算法和最佳适应算法进行内存块的分配和" " "回收,要求每次分配和回收后显示出空闲内存分区链的情况。" "实验环境 "(列出本次实验所使用的平台和相关软件) " " "地点: " " "使用软件:Visual C++ 6.0 " "调试过程 "( 程序源代码截图。详细记录在调试过程中出现的问题及解 " "及实验结 "决方法,截图记录实验执行的结果。) " "果 "#include<iostream.h> " " "#include<stdlib.h> " " "#define Free 0 //空闲状态 " " "#define Busy 1 //已用状态 " " "#define OK 1 //完成 " " "#define ERROR 0 //出错 " " "#define MAX_length 640 //最大内存空间为32767KB " " "typedef int Status; " " "int n=0; " " "typedef struct freearea//定义一个空闲区说明表结构 " " "{ " " "int ID; //分区号 " " "long size; //分区大小 " " "long address; //分区地址 " " "int state; //状态 " " "}ElemType; " " " " " "//---------- 线性表的双向链表存储结构 ------------ " " "typedef struct DuLNode //double linked list " " "{ " " "ElemType data; " " "struct DuLNode *prior; //前趋指针 " " "struct DuLNode *next; //后继指针 " " "}DuLNode,*DuLinkList; " " " " " "DuLinkList block_first; //头结点 " " "DuLinkList block_last; //尾结点 " " " " " "Status alloc(int);//内存分配 " " "Status free(int); //内存回收 " " "Status First_fit(int,int);//首次适应算法 " " "Status Best_fit(int,int); //最佳适应算法 " " "void show();//查看分配 " " "Status Initblock();//开创空间表 " " " " " "Status Initblock()//开创带头结点的内存空间链表 " " "{ " " "block_first=(DuLinkList)malloc(sizeof(DuLNode)); " " "block_last=(DuLinkList)malloc(sizeof(DuLNode)); " " "block_first->prior=NULL; " " "block_first->next=block_last; " " "block_last->prior=block_first; " " " block_last->next=NULL; " " "block_last->data.address=0; " " "block_last->data.size=MAX_length; " " "block_last->da