s081专题

MIT6.S081最详解析与归纳——lab10:mmap

Lab10主题:mmap (一)前置知识:mmap(1)VMA(2)mmap (二)Lab:mmap(1)前置工作(2)实现sys_mmap()(3)实现pagefault(4)实现sys_munmap(5)脏页位设置(六)其它函数的小修改 (三)感言 (一)前置知识:mmap (1)VMA VMA(Virtual Memory Area) 代表虚拟内存区域,它描述了一个进程

6.S081的Lab学习——Lab8: locks

文章目录 前言一、Memory allocator(moderate)提示:解析 二、Buffer cache(hard)解析: 三、Barrier (moderate)解析: 总结 前言 一个本硕双非的小菜鸡,备战24年秋招。打算尝试6.S081,将它的Lab逐一实现,并记录期间心酸历程。 代码下载 官方网站:6.S081官方网站 安装方式: 通过 APT 安装 (De

6.S081的Lab学习——Lab7: Multithreading

文章目录 前言一、Uthread: switching between threads (moderate)提示:解析 二、Using threads (moderate)解析: 三、Barrier (moderate)解析: 总结 前言 一个本硕双非的小菜鸡,备战24年秋招。打算尝试6.S081,将它的Lab逐一实现,并记录期间心酸历程。 代码下载 官方网站:6.S081

【MIT6.S081】准备工作

官方网站: 6.S081 / Fall 2020 相关资源: GitHub - PKUFlyingPig/MIT6.S081-2020fall: MIT undergraduate operating system course 版本控制 · 6.S081 All-In-One MIT6.S081 | Miigon's blog

2020 6.s081——Lab2:system calls

左岸的一座白色环形阶梯 浪人正在用和弦练习忧郁 晨曦下的少女听着吉他旋律 在许愿池边巴洛克式的叹息 ——许愿池的希腊少女 完整代码见:SnowLegend-star/6.s081 at syscall (github.com) System call tracing (moderate) 这个实验要求我们跟踪系统调用。 感觉实验说明对mask的解释有点语焉不详,研究了好一番才明白ma

6.S081的Lab学习——Lab5: xv6 lazy page allocation

文章目录 前言一、Eliminate allocation from sbrk() (easy)解析: 二、Lazy allocation (moderate)解析: 三、Lazytests and Usertests (moderate)解析: 总结 前言 一个本硕双非的小菜鸡,备战24年秋招。打算尝试6.S081,将它的Lab逐一实现,并记录期间心酸历程。 代码下载 官

123.Mit6.S081-实验1-Xv6 and Unix utilities

今天我们来进行Mit6.S081实验一的内容。 实验任务 一、启动xv6(难度:Easy) 获取实验室的xv6源代码并切换到util分支。 $ git clone git://g.csail.mit.edu/xv6-labs-2020Cloning into 'xv6-labs-2020'......$ cd xv6-labs-2020$ git checkout utilB

【MIT6.S081】Lab4: traps(详细解答版)

实验内容网址:https://xv6.dgs.zone/labs/requirements/lab4.html 本实验的代码分支:https://gitee.com/dragonlalala/xv6-labs-2020/tree/traps2/ Backtrace 关键点:trapframe、栈 思路: 这道题的关键是栈结构,先阅读xv6中关于栈的知识(https://mit-

【MIT6.S081】Lab3: page tables(详细解答版)

实验内容网址:https://xv6.dgs.zone/labs/requirements/lab3.html 本实验的代码分支:https://gitee.com/dragonlalala/xv6-labs-2020/tree/pgtbl2/ Print a page table 关键点:递归、三级页表 思路: 用上图来解释三级页表的原理最为清晰明了。satp的作用是存放

【MIT6.S081】Lab1: Xv6 and Unix utilities(详细解答版)

实验内容网址:https://xv6.dgs.zone/labs/requirements/lab1.html Sleep 关键点:函数参数判断、系统函数调用 思路: 通过argc来判断函数参数是否正确,通过atoi函数来讲字符串转化为整型,调用sleep函数后退出程序。 代码: #include "kernel/types.h"#include "kernel/stat

Mit6.s081 前置开发环境: 虚拟机ubuntu + ssh + vscode

虚拟机 + ssh + vscode 前置条件 下载VMware Download VMware Workstation ProUbuntuUbuntu系统下载 | Ubuntu vscode Visual Studio Code - Code Editing. Redefined Ubuntu版本:20.04 Ubuntu基本操作 ubuntu 安装 ssh 服务 sudo apt-

【MIT 6.S081】2020, 实验记录(7),Lab: Multithreading

目录 Task 1: Uthread: switching between threadsTask 2:Using threadsTask 3:Barrier Task 1: Uthread: switching between threads 这个实验是要求实现用户级线程的创建和调度,有点类似于有栈协程。非常有意思,值得多学习。 在完成这个实验前,需要了解 XV6 如何实现

6.S081的Lab学习——Lab1: Xv6 and Unix utilities

文章目录 前言一、启动xv6(难度:Easy)解析: 二、sleep(难度:Easy)解析: 三、pingpong(难度:Easy)解析: 四、Primes(素数,难度:Moderate/Hard)解析: 五、find(难度:Moderate)解析: 六、xargs(难度:Moderate)解析: 总结 前言 一个本硕双非的小菜鸡,备战24年秋招。打算尝试6.S081,将它的

mit6.s081 lab11 networking

这个exercise的工作是完善kernel/e1000.c文件中的e1000_transmit()和e1000_recv()函数,从而使得驱动可以发送和接受packet。 e1000_init()函数配置使得E1000从RAM中读取要发送的packet,以及将接收到的packet写入到RAM中,这就是DMA技术,RMA使得硬件可以直接从RAM中读写packet。 有可能出现在短时间内出现大量待处

mit6.s081 lab10 mmap

1.添加mmap和munmap的syscall 2…为了追踪每个process使用mmap产生的映射区域,使用VMA去记录mmap时的address, length, permission, file等信息。可以创建一个固定大小的VMA数组来进行实现,16个VMA元素已经足够。在proc.h中定义VMA结构体,在proc中添加VMA数组,数组的大小为16。需要注意的是VMA结构体中有offset成

mit6.s081 lab9 file system

Large files 这个exercise的工作是提高xv6支持的最大文件大小,现在的inode结构如下图所示 原始的xv6 inode结构中有12个直接索引,1个一级间接索引,所以当前xv6中文件的支持的最大block数为12 + 256 (每个block可以存储256个block num,一个sector为512 bytes,一个block为1024 bytes,一个block num为

mit6.s081 lab6 Copy-on-Write Fork for xv6

Implement copy-on write copy-on-write fork需要解决什么问题? xv6中的fork()调用需要拷贝所有父进程中的user space memory给子进程,如果user space memory中的空间很大,那么这个拷贝的过程需要消耗非常多的时间。而且这个拷贝的动作很多时候都是浪费的,因为在fork()后往往还会调用exec(),之前所拷贝的user sp

mit 6.s081 lab4 Traps

chapter 4 trap的类型 syscallexception(除0,访问非法内存)interrupt(读/写磁盘操作结束) trap流程 1.控制权转换给kernel 2.kernel保存寄存器以及状态,以便代码的执行的恢复 3.kernel执行对应的trap处理代码(syscall实现或者设备驱动) 4.kernel恢复之前保存的寄存器和状态,从trap返回执行之前的代码 RI

mit 6.s081 lab3 page tables

chapter 3 Print a page table 这个exercise的内容为打印page table,需要实现一个打印函数vmprint,参数为pagetable_t,传入根页表地址,打印对应的pagetable。在这个exercise中只需要打印init进程的pagetable,所以需要在exec函数(exec.c)中添加对进程的pid的判断,如果pid为1,打印该进程的paget

mit6.s081 lab2 System calls

添加mit仓库 添加remote git remote add mit git://g.csail.mit.edu/xv6-labs-2020 从mit拉取分支 git fetch mitgit checkout syscall chapter 2 System call tracing 写一个程序追踪另一个程序所调用的system call,打印追踪的syscall的sysc

MIT6.S081学习——二、相关命令行整理

MIT6.S081学习——二、相关命令行整理 1 添加user代码到xv6中并编译2 git版本管理 1 添加user代码到xv6中并编译 问题:如何让在xv6中运行copy.c 答:在xv6中运行copy.c文件,你需要先将该文件添加到xv6源代码目录中,然后修改Makefile以将其编译进内核中。 -1、将copy.c文件添加到xv6源代码目录中。 2、修改Makef

6.s081 学习实验记录(八)Networking

文章目录 network driver network driver //TODO

6.s081 学习实验记录(五)traps

文章目录 一、RISC-V assembly简介问题 二、Backtrace简介注意实验代码实验结果 三、Alarm简介注意实验代码实验结果 一、RISC-V assembly 简介 git checkout traps,切换到traps分支user/call.c 文件在我们输入 make fs.img 之后会被汇编为 call.asm 文件,阅读该汇编文件中的函数:f、h

6.S081——设备中断与驱动部分(串口驱动与Console)——xv6源码完全解析系列(7)

0.briefly speaking 之前我们研究过Xv6中的陷阱机制,并搞懂了系统调用的全部流程,接下来我们以UART和console为研究对象,深入研读一下Xv6内核中有关设备中断驱动的代码,并对UART、shell、console、键盘、显示器等设备的协同运作过程做出解释。 本篇博客主要涉及以下代码的阅读: 1.kernel/uart.c 2.kernel/console.c 3.ke

【MIT 6.S081】2020, 实验记录(2),Lab: System calls

目录 TaskTask 1: System call tracing1.1 task 说明1.2 实现过程1.3 测试 这个实验尝试自己在 OS kernel 中添加 system call。 Task Task 1: System call tracing 1.1 task 说明 这个 task 实现在 kernel 中添加一个 trace 的系统调用,当用户调用这

MIT 6.S081学习笔记(第十章)

〇、前言 本文主要完成 MIT 6.S081 实验 net 。 开始之前,切换分支: $ git fetch$ git checkout net$ make clean Lab: networking(hard) Question requirements Your job is to complete e1000_transmit() and e1000_recv(), bot