MIT JOS LAB3学习笔记

MIT6.828Lab(0) 实验环境搭建 MIT6.828Lab(0) 实验环境搭建 前言,终于闲下来了,有时间做点自己想做的事情,这个lab是我想做了很久的东西,昨天忙活了几个小时终于搭建成功。 6.828官方Lab 提示:6.828的官方lab看似都是英文很复杂,但是却是我找了这么多教程之后发现最有用的,还是建议按着官方的lab来,只有QEMU稍微有点麻烦 话不多说,直接开始,讲太多复杂的只回让人头大。 1.Ubuntu 20.04 os 这个不强求系统是哪个版本的,我是前不久装的,所以是新的。 2.测试自带环境 输入 1.$ objdump 阅读详情

LAB3概述:

本次操作系统实验,我们对计算机的操作系统进行了初步的探究,通过完成作业和问题,对lab3部分有了较好的理解。Lab3主要实现能运行被保护的用户模式环境(protected user-mode environment,即process)的内核服务。我们将增加数据结构来记录进程、创建进程、为其装载一个程序镜像。我们还要让JOS 内核能够处理进程产生的系统调用和异常。具体来说:

第一部分主要完成用户环境和异常处理,我们主要先为我们的环境申请地址并进行映射,之后改写env.c中的相应函数来使得我们可以让系统进入用户空间执行我们想要的系统调用。接下来我们对处理中断和异常进行了探索,建立了我们自己的中断描述符表IDT,在trapentry.s和trap.c对产生中断的一开始过程深入了解。

第二部分处理缺页错误,断点异常以及系统调用。我们逐个对缺页中断、断点异常、系统调用等等的中断进行处理,通过对应参数调用不同的函数对相应的中断进行对应处理。我们在最后完成了用户进程的启动,以及对页错误和内存的保护。

此外,在完成这两大块内容的同时,对于问题的完成也使我们对于一些基础概念的理解,以及代码部分知识的掌握有了进一步的提升。


作业一


一.准备知识

Env数据结构代表一个进程描述符,定义在env.h中,包括进程的id,父进程的id,执行状态,该进程的寄存器状态,执行的次数等,并使用env_link指向下一个空闲的Env。

所有Env对象存储在envs数组中,该数组定义在env.c的开头。

除此之外curenv代表当前正在执行的进程,env_free_list指向空闲的进程描述符,组成链表,链表的添加与删除均在表头执行。


二.代码展示

修改mem_init() 使之能分配envs数组。这个数组是由NENV个Env结构体组成的。envs数组所在的这部分内存空间应该是用户模式只读的。

如题,类似lab2中分配pages数组,分配空间给数组envs同时初始化。

在lab2中分配pages数组时操作。

类似的分配env数组空间,并初始化

然后可以将虚拟内存的UENVS段映射到envs的物理地址

用到函数boot_map_region(pde_t *pgdir, uintptr_t va, size_t size, physaddr_tpa, int perm);


作业二


一.函数介绍

env_init(): 初始化所有的在envs数组中的 Env结构体,并把它们加入到env_free_list中。还要调用 env_init_percpu,这个函数要配置段式内存管理系统,让它所管理的段,可能具有两种访问优先级其中的一种,一个是内核运行时的0优先级,以及用户运行时的3优先级。

env_setup_vm(): 为一个新的用户环境分配一个页目录表,并且初始化这个用户环境的地址空间中的和内核相关的部分。

region_alloc(): 为用户环境分配物理地址空间。

load_icode(): 分析一个ELF文件,类似于bootloader做的那样,我们可以把它的内容加载到用户环境下。

env_create(): 利用env_alloc函数和load_icode函数,加载一个ELF文件到用户环境中。

env_run(): 在用户模式下,开始运行一个用户环境。

二.代码实现

1)env_init():进程描述符数组初始化


按照注释,遍历数组envs,要把它的id设为0,并且令envs中所有环境都是free状态,然后按序插入链表中。此时注意第一个被使用的是envs[0]。

2)env_setup_vm():初始化进程的虚拟空间。不同的进程有不同的虚拟地址空间,进而就必须有自己的页目录和页表,该函数的任务就是初始化页目录。


本题注释讲的很清楚,The VA space of all envs is identical (same)above UTOP。进程的页目录和内核的页目录(utop之上)可以共用,所以先分配一个空闲页,然后直接copy就可以,我们不需要做任何其他事情。接着增加分配的物理页的引用,将此页的虚拟地址赋值给进程的pgdir,然后使进程有权限操作自己的pgdir。


3)region_alloc():分配物理地址。把起始地址和终止地址对齐,然后以页为单位,一页一页分配内容,并且修改页目录表和页表。

为进程分配物理内存,映射到虚拟内存。round函数对起始地址和终止地址页对齐。

然后就可以以页单位给进程进行内寸分配了。然后修改页目录和页表

4)通过load_icode给相应的进程加载可执行代码。可执行代码的格式是elf格式。

5)env_creat():简单的函数,新建进程,调用env-alloc。然后利用load-icode读取elf。

跟着注释一步步完成。先用函数env-alloc 分配新的环境。注意int r = env_a

MIT JOS LAB4学习笔记 Lab4 Part A: 多处理器支持和协作式多任务 练习 1 :实现在 kern/pmap.c 中的 mmio_map_region 方法。你可以看看 kern/lapic.c 中的 lapic_init 开头部分,了解一下它是如何被调用的。你还需要完成接下来的练习,你的 mmio_map_region 才能够正常运行。 lapic_init()函数的一开始就调用了该函数,将从lapica... 阅读详情

相关推荐

MIT 6.828 JOS 环境配置

MIT 6.828 JOS Lab1 记录这学期刚好在学操作系统课程,课余时间也比较充足,所以着手开始做鼎鼎大名的MIT 6.828 操作系统课程的Lab。It must be a long journey, and it just started!环境搭建GIT from MIT由于是第一个Lab,我们还是先要提前准备一些东西的。这门课程的资料可以通过Git获得,具体方法如下:athena% mk

Poundssss的博客 6624

MIT6.828 JOS系统 lab2

MIT6.828 LAB2:http://pdos.csail.mit.edu/6.828/2014/labs/lab2/ LAB2里面主要讲的是系统的分页过程,还有就是简单的虚拟地址到物理地址的过程。关于系统分页,在MIT6.828 虚拟地址转化为物理地址——二级分页中有讲。 下面主要是lab2的几个exercise的解题过程。 1.第一个boot_alloc()函数: stat

fang92的专栏 7816

JOS学习笔记(一)

起初 神创造天地。  地是空虚混沌.渊面黑暗. BIOS运行在水面上。  神说、要有mbr、就加载了mbr。  神看mbr是好的、就用mbr加载了kernel。  神称mbr为引导程序、称kernel为内核.有晚上、有早晨、这是头一日。 用课余时间重新拾起JOS,作为一个码农通过了解不同技术层面的机制对自己的技术水平提高非常大,而JOS作为一个MIT的开放课程,可让我们从

锐之锋芒 1万+

JOS LAB3实验记录

这是mit jos lab3 的实验记录 单位:华中科技大学集群网络与服务计算实验室 作者:卓达城

JOS lab3代码与报告

MIT 的操作系统资料,北大操统实验班用。

mit jos lab3

mit大学的jos 的操作系统实验 完整的lab3代码

MIT 6.828 JOS lab3

MIT 6.828 JOS lab3 附件里存放的是lab3的源代码,修改后滴……

操作系统JOS lab3

操作系统实验JOS的lab3,源自MIT=。=

MIT 6.828 lab3 完整代码

MIT 6.828 lab3的完整代码, 经试验可以完美运行,在写报告的时候可以参考一下。

笔记本摄像头模拟监控推送RTSP流

FFmpeg软件:选择Windows builds by BtbN一个完整的跨平台解决方案,用于录制、转换和流式传输音频和视频。选择Windows版本EasyDarwin开源流媒体服务器 支持Windows、Linux、macOS平台;支持RTSP推流分发(推模式转发);支持RTSP拉流分发(拉模式转发);VLC Media Player软件:选择Windows64bit支持众多与及文件格式,并支持DVD影音光盘,VCD影音光盘及各类协议。

IT_LittleBaby的博客 3874

YOLOv11改进策略【Conv和Transformer】| IJCAI 2024 利用FreqFormer中的SFA 空间 - 频率注意力和CTA 通道转置注意力 二次改进C3k2

在FreqFormer模型中,SFA(Spatial-Frequency Attention)和CTA(Channel Transposed Attention)模块是关键组成部分,它们针对传统Transformer在图像超分辨率任务中的不足而设计,旨在更好地恢复高频细节,提升模型性能。

Limiiiing的博客 758

Qt实现思维导图功能1『核心树』

利用Qt的QGraphicsView框架实现思维导图功能 百度网盘体验地址: 链接:https://pan.baidu.com/s/15x9F48agCDOQbsyH3VwVXA 提取码:8svh 注:UI风格参考博主:前行中的小猪,博文地址:https://blog.youkuaiyun.com/GoForwardToStep/article/details/124692790?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_u

浮生流年的博客 6163

S7-1200PLC V90伺服绝对值编码器校准功能块

S7-1200PLC通过111报文和EPOS模式实现位置轴轴控功能(FB284封装)-优快云博客文章浏览阅读173次。EASY_SINA_POS的详细使用介绍请参考下面文章链接:S7-1200PLC使用标准报文111和EPOS模式实现V90 PN总线伺服定位(Easy_SINA_Pos)_西门子sinapos-优快云博客文章浏览阅读132次。文章浏览阅读7k次。先简单说下如何获取FB284,一般有2种方法,Startdrive软件可以操作大部分西门子的驱动器,建议安装调试方便,缺点就是软件太大。

RXXW_Dor的博客 968

第21章—技术管理篇(上):身为技术人该怎样带好团队并做好管理者

上节讲了职业规划和学习提升这两个话题,随着职业规划的不断落地,或者自己能力的不断提升,大家也会逐渐被提拔成“职级更高”的人。企业规模扩张时,员工数量也会变多,意味着Boss需要更多的人来辅助管理,而管理者会从外部招聘吗?也许会,但大多企业更喜欢从内部选拔,毕竟人的天性更希望找的人值得信赖。此时,一些能力不错、做事靠谱的老员工,就会被“赶上”管理者的位子。作管理不难,但想要“”就需要一定情商。

运维老生常谈 1366

从零到一破解Uber实时行程API:逆向工程与高并发爬虫实战

在数据采集领域,Uber的实时行程数据始终处于“传说级”难度。动态令牌系统- 每30秒轮换的Bearer Token证书固定(Certificate Pinning)- 阻止中间人攻击请求签名算法- 基于时间戳+用户设备的HMAC-SHA256行为分析- 鼠标轨迹、请求间隔的机器学习模型全链路加密- GraphQL端点的payload加密目录前言:为什么Uber爬虫被称为“地狱难度”?第一章:环境准备与法律边界1.1 技术栈选择(2026年最新)1.2 法律免责声明。

2201_76125261的博客 892

低光照图像增强:从传统方法到深度学习

低光照图像增强:从传统方法到深度学习​ 人工智能,计算机视觉,大模型,AI,本文聚焦视觉模型的偏差与公平性问题,阐述了偏差在性别、种族、年龄等方面的表现及对医疗、司法、安防等领域的影响。分析了偏差源于数据采集与标注问题及算法局限。介绍了准确率差异等公平性评估指标、相关数据集和工具,还给出数据处理、算法改进、模型训练等避免歧视的策略,并附代码示例与实际案例,为提升视觉模型公平性提供多方面参考。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 2万+

最详细的 SAP ABAP Web Service 创建和消费步骤讲解

本文原版发表于 SAP 官方社区,当时用的英文版写作,标题为:Step by step to create, consume and trace web service in ABAP system https://blogs.sap.com/2014/05/20/step-by-step-to-create-consume-and-trace-web-service-in-abap-system/ 总共阅读量超过 18 万。 How to create web service provider in A

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3151

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: opencv人脸检测实现(使用MFC做可视化)(一)
下一篇: 使用朴素贝叶斯进行问卷分析(C++)
codes_first
博客等级 码龄10年 255粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值