6.828 lab1 bootload】的更多相关文章

MIT6.828 lab1地址:http://pdos.csail.mit.edu/6.828/2014/labs/lab1/ 第一个练习,主要是让我们熟悉汇编,嗯,没什么好说的. Part 1: PC Bootstrap 首先,整个实验使用qemu这款模拟软件来,来对代码进行调试,相当于我们在qemu这个模拟的计算机平台上,运行自己的程序.可以再qemu这个软件上进行gdb的调试,比较方便. 首先看下整个内核在qemu上的模拟的结果: 整个内核现在能实现的就两个功能,一个kerninfo,显示…
<MIT 6.828 Lab1: Booting a PC>实验报告 本实验的网站链接见:Lab 1: Booting a PC. 实验内容 熟悉x86汇编语言.QEMU x86仿真器.PC开机引导流程 测试6.828 内核的启动加载器(boot loader) 研究6.828 内核的初始化模板(JOS) 实验题目 注意:部分Exercise的解答过程较长,因此专门新建一个文档来记录解答过程,而在本文中给出其链接. Exercise 1:阅读汇编语言资料 Exercise 1. Familia…
本实验链接:mit 6.828 lab1 Exercise 7. 题目 Exercise 7. Use QEMU and GDB to trace into the JOS kernel and stop at the movl %eax, %cr0. Examine memory at 0x00100000 and at 0xf0100000. Now, single step over that instruction using the stepi GDB command. Again,…
本实验链接:mit 6.828 lab1 Exercise 4. 题目 Exercise 4. Read about programming with pointers in C. The best reference for the C language is The C Programming Language by Brian Kernighan and Dennis Ritchie (known as 'K&R'). We recommend that students purchase…
本实验的网站链接:mit 6.828 lab1 Exercise 3. 题目 Exercise 3. Take a look at the lab tools guide, especially the section on GDB commands. Even if you're familiar with GDB, this includes some esoteric GDB commands that are useful for OS work. Set a breakpoint at…
本实验链接:mit 6.828 lab1 Exercise2. 题目 Exercise 2. Use GDB's si (Step Instruction) command to trace into the ROM BIOS for a few more instructions, and try to guess what it might be doing. You might want to look at Phil Storrs I/O Ports Description, as we…
JOS lab1 首先向MIT还有K&R致敬! 没有非常好的开源环境我不可能拿到这么好的东西. 向每个与我一起交流讨论的programmer致谢!没有道友一起死磕.我也可能会中途放弃. 跟丫死磕究竟.(事实上这个过程会学到非常多东西,非常好玩非常好玩,不要被panic吓到,等你都能定位panic,并修复触发panic的bug的时候.我相信大家debug的能力会上升一个水平,互勉-) ---------------------------------------------------------…
资源 ucore在线实验指导书 我的ucore实验代码 练习1:理解通过make生成执行文件的过程 详见<ucore lab1 exercise1>实验报告 练习2:使用qemu执行并调试lab1中的软件 详见<ucore lab1 exercise2>实验报告 练习3:分析bootloader进入保护模式的过程 详见<ucore lab1 exercise3>实验报告 练习4:分析bootloader加载ELF格式的OS的过程 详见<ucore lab1 exe…
Mit6.828/6.S081 fall 2019的Lab1是Unix utilities,主要内容为利用xv6的系统调用实现sleep.pingpong.primes.find和xargs等工具.本文对各程序的实现思路及xv6的系统调用流程进行详细介绍. 前言 在实验之前,推荐阅读一下官网LEC1中提供的资料.其中Introduction是对该课程的的概述,examples则是几个系统编程的样例,这两部分快速浏览一遍即可.对于xv6 book的第一章,则建议稍微细致地阅读一遍,特别是对fork…
Question: 做lab过程中越来越迷糊,为什么一会儿虚拟地址是4G 物理地址也是4G ,那这有什么作用呢? 解决途径: 停下来,根据当前lab的进展,再回头看上学期操作系统的ppt & 上网冲浪查资料!意识到自己对于分段机制理解不够. 最强总结:https://www.cnblogs.com/tolimit/p/4775945.html?utm_source=tuicool&utm_medium=referral 解决过程: 分段机制主要功能只有两点: 将物理内存划分为多个段,让操作…
一.ucore操作系统介绍 操作系统作为一个基础系统软件,对下控制硬件(cpu.内存.磁盘网卡等外设),屏蔽了底层复杂多样的硬件差异:对上则提供封装良好的应用程序接口,简化应用程序开发者的使用难度.站在应用程序开发人员的角度来看,日常开发中常见的各种关于并发.I/O.程序通信的问题等都和操作系统相关,因此一定程度上了解底层的操作系统工作原理是有必要的. 另一方面,由于操作系统自身功能的复杂性,整体设计一般会有一个好的模块化架构:操作系统作为基础服务,对性能效率的要求也很高,底层会用到许多关于数据…
实验1 :bootload启动ucore os 1.0实验内容: lab1中包含一个bootloader和一个OS.这个bootloader可以切换到X86保护模式,能够读磁盘并加载ELF执行文件格式,并显示字符.而这lab1中的OS只是一个可以处理时钟中断和显示字符的幼儿园级别OS.bootload(引导装入)的翻译. Lab1主要是关于操作系统如何启动,以及如何中断,函数调用栈相关的知识. 1.1 x86启动顺序 硬件启动后,怎么把操作系统放到内存中去运行. 1 BIOS启动过程 从BIOS…
Lab 2: Memory Management lab2中多出来的几个文件: inc/memlayout.h kern/pmap.c kern/pmap.h kern/kclock.h kern/kclock.c memlayout.h描述了虚拟地址空间的结构,我们需要通过修改pmap.c文件来实现这个结构.memlayout.h和pmap.h文件定义了一个PageInfo结构,利用这个结构可以记录有哪些物理页是空闲的.kclock.c和kclock.h文件中操作的是用电池充电的时钟,以及CM…
Exercise 1.8       我们丢弃了一小部分代码---即当我们在printf中指定输出"%o"格式的字符串,即八进制格式的代码.尝试去完成这部分程序. 解答: 在这个练习中我们首先要阅读以下三个源文件的代码,弄清楚他们三者之间的关系: 三个文件分别为 \kern\printf.c,\kern\console.c, \lib\printfmt.c 首先大致浏览三个源文件,其中粗略的观察到3点: 1.\kern\printf.c中的cprintf,vcprintf子程序调用了\…
Lab 1 Part 2 The Boot Loader Loading the Kernel 我们现在可以进一步的讨论一下boot loader中的C语言的部分,即boot/main.c.但是在我们分析之前,我们应该先回顾一些关于C语言的基础知识. Exercise 4: 阅读关于C语言的指针部分的知识.最好的参考书自然是"The C Programming Language". 阅读5.1到5.5节.然后下载pointers.c的代码,并且编译运行它,确保你理解在屏幕上打印出来的所…
Part 2: The Boot Loader 对于PC来说,软盘,硬盘都可以被划分为一个个大小为512字节的区域,叫做扇区.一个扇区是一次磁盘操作的最小粒度.每一次读取或者写入操作都必须是一个或多个扇区.如果一个磁盘是可以被用来启动操作系统的,就把这个磁盘的第一个扇区叫做启动扇区.这一部分介绍的boot loader程序就位于这个启动扇区之中.当BIOS找到一个可以启动的软盘或硬盘后,它就会把这512字节的启动扇区加载到内存地址0x7c00~0x7dff这个区域内. 对于6.828,我们将采用…
Lab 1 Part 1: PC bootstrap 我们继续~ PC机的物理地址空间 这一节我们将深入的探究到底PC是如何启动的.首先我们看一下通常一个PC的物理地址空间是如何布局的:                           这张图仅仅展示了内存空间的一部分. 第一代PC处理器是16位字长的Intel 8088处理器,这类处理器只能访问1MB的地址空间,即0x00000000~0x000FFFFF.但是这1MB也不是用户都能利用到的,只有低640KB(0x00000000~0x00…
0. 简介 操作系统是计算机科学中十分重要的一门基础学科,是一名计算机专业毕业生必须要具备的基础知识.但是在学习这门课时,如果仅仅把目光停留在课本上一些关于操作系统概念上的叙述,并不能对操作系统有着深层次的理解.必须要结合动手实践,才能真正掌握核心的知识. MIT的操作系统课程6.828是一门被广泛好评的入门课程.它最重要的特点就是它实践第一的教学原则.在这门课程中会涉及到非常丰富的实验,也会有非常多的动手机会.而且授课者更是亲自构建了一个简化的基于Unix内核的操作系统xv6.所有的实验都是在…
源代码参见我的github: https://github.com/YaoZengzeng/jos File system perliminaries 我们开发的是一个单用户的操作系统,只提供了足够的保护用于发现bug,但是并没有对恶意的用户之间进行隔离.因此我们的文件系统不支持UNIX中文件所有者或者权限这样的概念.同样,我们的文件系统也不支持一般UNIX文件系统中有的例如硬链接,软链接,特殊的设备文件这样的概念. On-Disk File System Structure 大多数UNIX操作…
MIT6.828 LAB2:http://pdos.csail.mit.edu/6.828/2014/labs/lab2/ LAB2里面主要讲的是系统的分页过程,还有就是简单的虚拟地址到物理地址的过程.关于系统分页,在MIT6.828 虚拟地址转化为物理地址——二级分页:http://blog.csdn.net/fang92/article/details/47320747中有讲. 下面主要是lab2的几个exercise的解题过程. 1.第一个boot_alloc()函数: static vo…
这个分页,主要是在mit6.828的lab2的背景下来说的. Mit6.828 Lab2:http://pdos.csail.mit.edu/6.828/2014/labs/lab2/ lab2主要讲虚拟内存->物理内存的变换,通过一定的函数来实现软件MMU的部分. 整个地址转化的过程如下图所示: 首先,明确一点,在程序里面的所有地址,都是虚拟地址,程序里面是不会出现物理地址的,就算是物理地址,CPU也会把它当做虚拟地址,通过MMU转化为物理地址. 通过上面的图,可以知道,在系统中,CPU得到一…
Machine Learning Lab1 打算把Andrew Ng教授的#Machine Learning#相关的6个实验一一实现了贴出来- 预计时间长度战线会拉的比較长(毕竟JOS的7级浮屠还没搞定.) ----------------------------------------------------------------------------------------------------------------------------------- 实验内容: 线性拟合 实验材…
本文将介绍如何在macOS下配置MIT6.828 JOS实验的环境. 写JOS之前,在网上搜寻JOS的开发环境,很多博客和文章都提到"不是32位linux就不好配置,会浪费大量时间在配置环境"上之类的论调.故前期开发直接使用了32位ubuntu系统,并做了共享文件系统,背景开一个ubuntu虚拟机进行编译. 最近实在无法忍受背景开虚拟机那恐怖的耗电量和发热量,尝试将开发环境移到macOS下,竟发现非常的简单. Tools we need 在搭建环境之前,首先macOS上需要有以下两个工…
---恢复内容开始--- 开机流程回忆 以Intel 80386为例,计算机加电后,CPU从物理地址0xFFFFFFF0(由初始化的CS:EIP确定,此时CS和IP的值分别是0xF000和0xFFF0))开始执行.在0xFFFFFFF0这里只是存放了一条跳转指令,通过跳转指令跳到BIOS例行程序起始点.BIOS做完计算机硬件自检和初始化后,会选择一个启动设备(例如软盘.硬盘.光盘等),并且读取该设备的第一扇区(即主引导扇区或启动扇区)到内存一个特定的地址0x7c00处,然后CPU控制权会转移到那…
partV 创建文档反向索引.word -> document 与 前面做的 单词统计类似,这个是单词与文档位置的映射关系. mapF 文档解析相同,返回信息不同而已. reduceF 返回归约都的字符串,返回document 切片 转成 string 使用 strings.join .   master@master:~/study/6.824/src/main$ go run ii.go master sequential pg-*.txt ii.go:9:8: cannot find pa…
MIT 6.824 LAB1 环境搭建 vmware 虚拟机 linux ubuntu server   安装 go 官方安装步骤: 下载此压缩包并提取到 /usr/local 目录,在 /usr/local/go 中创建Go目录树.例如: tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz 该压缩包的名称可能不同,这取决于你安装的Go版本和你的操作系统以及处理器架构. (此命令必须作为root或通过 sudo 运行.) 要将 /usr/loca…
软件测试:lab1.Junit and Eclemma Task: Install Junit(4.12), Hamcrest(1.3) with Eclipse Install Eclemma with Eclipse Write a java program for the triangle problem and test the program with Junit. a)  Description of triangle problem: Function triangle takes…
这是 MIT 6.824 课程 lab1 的学习总结,记录我在学习过程中的收获和踩的坑. 我的实验环境是 windows 10,所以对lab的code 做了一些环境上的修改,如果你仅仅对code 感兴趣,请移步 : github/zouzhitao mapreduce overview 先大致看一下 mapreduce 到底是什么 我个人的简单理解是这样的: mapreduce 就是一种分布式处理用户特定任务的系统.它大概是这样处理的. 用户提供两个函数 mapFunc(k1,v1)-> lis…
lab1知识点汇总 还是有很多问题,但是我觉得我需要在查看更多资料后回来再理解,学这个也学了一周了,看了大量的资料...还是它们自己的80386手册和lab的指导手册觉得最准确,现在我就把这部分知识做一个汇总,也为之后的lab打下坚实的基础.80386真的难啊,比mips复杂多了..顿时觉得我们学的都是小菜.. 下面这些知识来源于: 实验指导书和答案 80386手册 mooc视频 8086程序设计指导这本书 网上的博客 lab1练习汇总 练习之所以被老师当做练习,一定有它重要的地方,所以我们先把…
lab1的Exercise 2就是让我们熟悉gdb的si操作,并知道BIOS的几条指令在做什么就够了,所以我们也会尽可能的去分析每一行代码. 首先进入到6.8282/lab这个目录下,输入指令make qemu-gdb,之后新打开一个terminal,在lab目录下输入gdb.就进入到gdb了 [f000:fff0] 0xffff0: ljmp $0xf000,$0xe05b 这第一条指令呢,是一条跳转指令,跳转到0xfe05b地址处.学过微机原理或者计算机组成就知道0xfe05b=0xf000…