xv6专题

Xv6驱动(一):PLIC

PLIC内存布局 #define PLIC 0x0c000000L#define PLIC_PRIORITY (PLIC + 0x0)#define PLIC_PENDING (PLIC + 0x1000)#define PLIC_SENABLE(hart) (PLIC + 0x2080 + (hart) * 0x100)#define PLIC_SPRIORITY(hart) (PLI

Xv6驱动(二):UART串口

阅读材料 Xv6代码:uart.c教材第5章课程视频Lecture9-Interrupts 16550 UART手册:ByteRunner.com | TECHNICAL DATA ON 16550 UART寄存器布局 #define RHR 0 // receive holding register (for input bytes)#define THR 0 // transmit h

Xv6驱动(三):console

阅读材料 Xv6代码:console.c教材第5章 console驱动 consputc函数 该函数在发送字符前增加了判断:如果是BACKSPACE,则用空格覆盖,否则直接调用uartputc_sync函数 void consputc(int c){if (c == BACKSPACE){// if the user typed backspace, overwrite with a

Xv6文件系统详解

Xv6是一个简单的教学操作系统,旨在帮助学生了解操作系统的基本概念和实现细节。本文将详细介绍Xv6文件系统的磁盘布局、文件读取和写入操作,以及崩溃恢复机制。 Xv6磁盘布局 Xv6文件系统的磁盘布局分为多个部分,每个部分都有特定的用途。下面是Xv6文件系统的磁盘布局结构: +-------------------+---------------+| Boot Block |

这才是计科之 Onix XV6 源码分析(2、类Unix的内存管理)

这才是计科之 Onix & XV6 源码分析(2、类Unix的内存管理) 前言 前一章我们介绍了XV6的启动流程,在本章,我们就要开始介绍类Unix操作系统最重要的一部分——内存管理模块。 本文以XV6里面的内存管理为主,后面会提炼Onix中内存管理比较好的部分,来对XV6进行一个补充。 Onix相关链接: github仓库链接。 B站配套视频链接。 XV6-x86的github

操作系统入门系列-MIT6.828(操作系统工程)学习笔记(四)---- C语言与计算机架构(Programming xv6 in C)

系列文章目录 操作系统入门系列-MIT6.S081(操作系统)学习笔记(一)---- 操作系统介绍与接口示例 操作系统入门系列-MIT6.828(操作系统工程)学习笔记(二)----课程实验环境搭建(wsl2+ubuntu+quem+xv6) 操作系统入门系列-MIT6.828(操作系统工程)学习笔记(三)---- xv6初探与实验一(Lab: Xv6 and Unix utilities) 操

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

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

xv6 系统启动过程

目录 1、硬件上电2、执行 _entry_ 代码3、_entry_ 跳转到/kernel/start.c4、start函数跳转到/kernel/main.c5、main函数跳转到/user/initcode.S6、initcode.S跳转到/kernel/syscall.c7、syscall.c跳转到/kernel/exec.c8、exec.c返回到/user/init.c系统启动完成

xv6源码解析 014

xv6源码解析 014 今天我们就来看看当进程从用户态陷入的时候是如何返回用户空间的,争取今天结束trap机制。明天开文件系统,五一假期争取结束这个专题。 话不多说我们直接开始。 我们先复习一下usertrap的整个过程。 我们正式开始 在usertrap的结尾是会调用这样一个函数 voidusertrap(void){...usertrapret();} 这是一个不

xv6源码分析 013

xv6源码分析 013 从这一章开始我们就开始学习xv6内核的陷入机制(trap)。其中主要的函数是usertrap和kerneltrap,这两个函数的实现有点像。 我们需要了解用用户态陷入内核态并从内核态返回用户态,从内核态进行陷入并返回的整个过程,以及会调用那些函数,陷入之前的进程的上下文如何被保存,保存在哪里,陷入过程中需要改变那些寄存器的值,从陷入中恢复之后需要如何恢复这些寄存器的值,

xv6源码分析 012

xv6源码分析 012 我们来看看xv6内核的内存配置器(kalloc.c)。 xv6的内存配置器是基于单向链表的,这是最简单实现方式。 extern char end[]; 这是一个物理地址:0x80000000;它被定义在kernel.ld文件中,这个文件是一个ARM架构的链接脚本(linker script),用来指导链接器如何布局目标文件中的各个段(section)。 声明一下:

XV6源码阅读——进程地址空间

文章目录 前言页表实际情况 前言 一个本硕双非的小菜鸡,备战24年秋招。打算尝试6.S081,将它的Lab逐一实现,并记录期间心酸历程。 代码下载 官方网站:6.S081官方网站 页表 每个进程都有一个单独的页表,当xv6在进程之间切换时,也会更改页表。如图2.3所示,一个进程的用户内存从虚拟地址零开始,可以增长到MAXVA (kernel/riscv.h:348),原

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

XV6源码阅读——页表

文章目录 前言分页硬件实际转换 内核地址空间 前言 一个本硕双非的小菜鸡,备战24年秋招。打算尝试6.S081,将它的Lab逐一实现,并记录期间心酸历程。 代码下载 官方网站:6.S081官方网站 分页硬件 RISC-V指令(用户和内核指令)使用的是虚拟地址,而机器的RAM或物理内存是由物理地址索引的。RISC-V页表硬件通过将每个虚拟地址映射到物理地址来为这两种地址建

xv6源码剖析 009

xv6源码剖析 009 我们继续昨天的内容。proc.h和proc.c growproc(int n) intgrowproc(int n){uint sz;struct proc *p = myproc();sz = p->sz;if(n > 0){if((sz = uvmalloc(p->pagetable, sz, sz + n)) == 0) {return -1;}} else

XV6源码阅读——操作系统架构

文章目录 前言抽象系统资源用户态,核心态,以及系统调用机器模式管理模式用户模式 内核组织宏内核微内核 前言 一个本硕双非的小菜鸡,备战24年秋招。打算尝试6.S081,将它的Lab逐一实现,并记录期间心酸历程。 代码下载 官方网站:6.S081官方网站 抽象系统资源 为了实现强隔离, 最好禁止应用程序直接访问敏感的硬件资源,而是将资源抽象为服务。 例如,Unix应用程

xv6源码分析 003

xv6源码分析 003 在开始今晚的内容之前我先纠正以下昨天的一个错误 struct cmd {int type;}; 代表的是在sh.c开头就定义的宏常量,系统调用号是通过汇编代码来传入的。修改之后的内容如下: 好啦,我们继续昨晚的内容吧。 在sh.c 的 main函数中,主要工作的是这三个函数 getcmd()parsescmd()runcmd() 我们昨天已经看了第

【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

xv6 + Qemu 在Ubuntu下编译运行教程

编译xv6 https://github.com/yinglang/Xv6 下载xv6源代码,解压到Home。 xv6源码不要用MIT官网的那份,各种编译error,我都改的想吐.后来直接用github上别人改好的,直接能跑起来没有编译错误的xv6.  cd Xv6-mastermake 这是因为static_assert重定义了,到xv6的解压文件下找到mkfs.c,注释掉这句代码

lab-1:Xv6 and Unix utilities

实验工具 clone实验源码 git clone git://g.csail.mit.edu/xv6-labs-2023进入目录 cd xv6-labs-2023运行内核 make qemu打印数据 Ctrl-p退出 ctr+a+x xv6中的system call int fork() Create a process, return child’s PID. int exit(int

xv6内核源码解析trap.c

基于实验4,我们先熟悉一下kernel/trap.c中的部分代码 可能需要使用到的文件: /kernel trap.c (important)plic.cmemlayout.hkernel.asm (这个需要编译之后才有,可能会用到,这个整个kernel编出来的汇编)kalloc.cvm.csyscall.hkernelvec.Sriscv.h (important)trampoline.S

xv6:Lecture5 x86硬件的隔离机制

xv6:Lecture5 x86硬件的隔离机制( Isolation mechanisms) 主题: 我们通过entry.s和内核main.c的代码来分析一个进程是如何创建并运行的。xv6 提供的各个抽象是如何实现和交互的。xv6 尽量复用了普通操作的代码来建立第一个进程,避免单独为其撰写代码。xv6是x86架构 所以许多底层的功能(虚拟存储的实现)是x86处理器专有的。 (啃源码确实很生硬

xv6 Shell OS organization

Shell & OS organization 主题: 内核系统调用API 参考:https://pdos.csail.mit.edu/6.828/2017/lec/l-shell.txt 对内核进行讲解并将homework shell进行说明 概述图 用户态如何连接内核态 应用程序 - > printf() - > write ) - > SYSTEM CALL - > sys_

xv6系统Bootloader启动分析

Bootloader启动分析 参考xv6的附录B https://github.com/ranxian/xv6-chinese/blob/master/content/AppendixB.md 计算机启动后硬件的动作 一直很好奇计算器按下电源后发生了什么?基本上分为三步 BIOS引导-》bootloader加载内核到内存-》控制权交给内核 源码在此https://github.com/

xv6 haedware 硬件分析

计算机硬件 (参阅xv6的附录A https://github.com/ranxian/xv6-chinese/blob/master/content/AppendixA.md) 这里我自己在这里用看的见的硬件来简单的分为CPU,内存,主板,I/O设备。下面我们来单独分析这几个硬件。 处理器和内存 处理器是什么? CPU的组成 CPU主要有运算器、控制器、寄存器组合内部总线等部件组成。

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

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