OS-lab1

boot

boot文件夹中只有start.S文件,这个文件用于初始化内核。关掉中断,设置内核栈,并跳转到main函数。

init

  • init.c

    执行初始化操作。

  • main.c

    主函数,调用init.c完成初始化等任务。

lib

  • print.c

    lp_Print函数主要是解析字符串,完成printf函数主要功能。函数开头通过宏定义定义了OUTPUT函数,这个函数是调用myoutput函数,完成输出一个字符的功能。接下来首先解析输出格式,也就是找到%,对应for循环;然后判断前导零、对齐等参数,对应分支语句;接着按照判断出来的格式对应输出,对应switch部分。

    下方的PrintCharPrintStringPrintNum是专门用来处理对应类型的输出格式的函数。

  • printf.c

    printf函数提供了printf的定义和处理框架,即利用C语言的边长参数va_list对每一个输出部分读取后调用lp_Print函数进行处理。

    myoutput函数调用printcharc来输出字符到面板,也就是把字符写入到面板读取的地址。

    _panic函数是通过printf函数完成了特定的对错误信息的输出。

readelf

  • kerelf.h

    定义了elf文件的格式,即三个结构体Elf32_EhdrElf32_ShdrElf32_Phdr,以及其他的一些文件类型等信息的定义。

  • types.h

    通过typedef重定义了一些数据类型。

  • readelf.c

    is_elf_format函数用于检查文件是否为elf格式。

    readelf函数用来解析elf文件。首先调用is_elf_format判断文件是否为elf格式;再通过循环输出文件的section header的信息。

  • main.c

    这个文件通过调用readelf函数来检查readelf函数的实现。

tools

里面只有一个链接文件,通过在里面定义.data、.bss等定义了内核文件的内存布局。

实验流程

lab1主要完成三个任务,第一个是完成tools里的链接文件和boot里的start.S文件使得内核能够编译运行。第二个任务是完成readelf内的readelf.c文件,实现一个简单的解析elf格式的功能。第三个任务是完成lib中的print.c,实现printf函数。

OS-lab1的更多相关文章

  1. 清华大学OS操作系统实验lab1练习知识点汇总

    lab1知识点汇总 还是有很多问题,但是我觉得我需要在查看更多资料后回来再理解,学这个也学了一周了,看了大量的资料...还是它们自己的80386手册和lab的指导手册觉得最准确,现在我就把这部分知识做 ...

  2. Lab1:练习四——分析bootloader加载ELF格式的OS的过程

    练习四:分析bootloader加载ELF格式的OS的过程. 1.题目要求 通过阅读bootmain.c,了解bootloader如何加载ELF文件.通过分析源代码和通过qemu来运行并调试bootl ...

  3. 6.828 lab1 bootload

    MIT6.828 lab1地址:http://pdos.csail.mit.edu/6.828/2014/labs/lab1/ 第一个练习,主要是让我们熟悉汇编,嗯,没什么好说的. Part 1: P ...

  4. ucore lab1 bootloader学习笔记

    ---恢复内容开始--- 开机流程回忆 以Intel 80386为例,计算机加电后,CPU从物理地址0xFFFFFFF0(由初始化的CS:EIP确定,此时CS和IP的值分别是0xF000和0xFFF0 ...

  5. LAB1 partV

    partV 创建文档反向索引.word -> document 与 前面做的 单词统计类似,这个是单词与文档位置的映射关系. mapF 文档解析相同,返回信息不同而已. reduceF 返回归约 ...

  6. (五)bootloader 启动 ucore os

    Lab1 : bootloader 启动 ucore os 一.内容提要 x86启动顺序 C函数调用 gcc内联汇编(inline assembly) x86-32下的中断处理 小结 二.x86启动顺 ...

  7. MIT 6.824 lab1:mapreduce

    这是 MIT 6.824 课程 lab1 的学习总结,记录我在学习过程中的收获和踩的坑. 我的实验环境是 windows 10,所以对lab的code 做了一些环境上的修改,如果你仅仅对code 感兴 ...

  8. Lab_1:练习4——分析bootloader加载ELF格式的OS的过程

    一.实验内容 通过阅读bootmain.c,了解bootloader如何加载ELF文件.通过分析源代码和通过qemu来运行并调试bootloader&OS, bootloader如何读取硬盘扇 ...

  9. 《ucore lab1 exercise5》实验报告

    资源 ucore在线实验指导书 我的ucore实验代码 题目:实现函数调用堆栈跟踪函数 我们需要在lab1中完成kdebug.c中函数print_stackframe的实现,可以通过函数print_s ...

  10. 《ucore lab1》实验报告

    资源 ucore在线实验指导书 我的ucore实验代码 练习1:理解通过make生成执行文件的过程 详见<ucore lab1 exercise1>实验报告 练习2:使用qemu执行并调试 ...

随机推荐

  1. 环形链表I、II(含代码以及证明)

    环形链表 解题思路 定义两个指针,一个快指针,一个慢指针,快指针每次移动两个节点,慢指针每次移动一个节点. 从头节点开始,让快慢指针同时移动,如果链表中有环,那么快慢指针一定会在某个节点相遇. 如果快 ...

  2. python字典生成式,列表生成式

    list1 = [1,2,3,4,5] list2 = ['a','b','c','d','e'] {k: v for k, v in zip(list1, list2)} # {1:'a',2:'b ...

  3. python导入和导出excel,以文件流形式返回前端

    一.导入excel 1. 安装依赖包 pip install xlrd 2. 读取excel getColIndex(colList:list,colName:str): try: return co ...

  4. 我让 ChatGPT 写了个 ChatGPT

    这家伙实在是火得过头了,索性讲个它的故事. 去年11月份,OpenAI 推出了 ChatGPT.  这里就不赘述这个家喻户晓玩意的常识了. 要说刚开始也没多少人在意,一个聊天机器人-- 谁稀罕呐. 但 ...

  5. vs2019编写代码时的光标变成了黑块,选中字时替换掉了黑块选中的字的解决方法

    这是由于不小心按到了Insert键 解决方法:再按一下Insert就好了. 因为插入键(insert)是一个状态表示键 当你按倒它时,它会进入一个覆盖模式,在光标位置新输入字会替代原来的字:另一种为插 ...

  6. 4 .NET Core笔试题

    1.说说.NET7中 _ViewImports文件的作用? 2.什么是Razor页面? 3.说说.NET5中 __ViewStart文件的作用? 4.如何在Razor页面中实现数据模型绑定? 5.如何 ...

  7. navicat无法连接linux内的防火墙

    解决方法:开放mysql的端口(3306).然后重启防火墙.或者直接关闭防火墙.具体代码如下: firewall-cmd --zone=public --add-port=3306/tcp --per ...

  8. 【USACO 2021 US Open, Gold】Permutation

    \(\text{Solution}\) 发现每个时刻的状态一定是所有点在一个最外围三角形的内部 设 \(f_{i,j,k,p}\) 表示排列填到第 \(p\) 位,此时图形最外围的三角形是以编号为 \ ...

  9. PDO使用返回结果集的方法输出数据库里面的单个值

    1 <?php 2 header('content-type:text/html; charset=utf-8'); 3 /* 通过调用驱动程序创建一个PDO实例 */ 4 $dsn = 'my ...

  10. webserver 简单demo

    以调用天气服务为例: 1.添加服务引用 2.点窗口做下角(高级->添加web引用->URL输入框输入天气服务地址(http://www.webxml.com.cn/WebServices/ ...