首页 > TAG信息列表 > Xv6

四.使用vscode调试xv6内核

资料来源: 1.南京大学操作系统课程第18课:https://www.bilibili.com/medialist/play/202224425?from=space&business=space_collection&business_id=192498&desc=0下方的评论:  https://zhuanlan.zhihu.com/p/501901665  https://www.bilibili.com/video/BV1Lv411g7EV/?spm_id_f

一.xv6环境搭建

内容大致来源: 1.视频教程:https://space.bilibili.com/16765968/channel/collectiondetail?sid=86878 2.文档:https://tarplkpqsm.feishu.cn/docs/doccnoBgv1TQlj4ZtVnP0hNRETd#W8iZmH 一.windows升级为专业版 注意:docker支持Windows 10 操作系统专业版,所以要升级windows版本买

xv6——文件系统:磁盘的I/O操作和内存缓存机制

目录 目录相关源码文件架构图数据结构内存的缓存块函数实现IDE磁盘的读写操作磁盘串口读写操作函数 void idestart()磁盘中断处理函数void ideintr()磁盘的读写处理函数void iderw()内存缓存区操作函数Buffer块初始化函数void binit()查找指定的磁盘block块对应的buffer缓存块函数

xv6——文件系统:管道机制

目录管道机制数据结构定义pipe的结构函数实现申请创建一个管道关闭管道的读端/写端读管道操作写管道操作 作者:殷某人 更新时间:2022/07/10 管道机制 管道可以看到双端队列,一头读,一头写,如下图所示: 在xv6系统中,使用一块内存缓存块实现管道机制: 管道可以看作为特殊的文件, 通过文

xv6——文件系统:文件的申请释放与读写操作

目录数据结构文件的内存中的定义文件全局表函数操作文件全局表的初始化从文件全局表中申请一个文件对象增加文件对象的引用次数关闭一个文件对象读取文件对象的状态读文件写文件 作者:殷某人 更新时间:2022/07/10 数据结构 文件的内存中的定义 xv6中,文件是一个广义的概念, 它即可

xv6——文件系统:FS的布局和inode的读写操作

目录框架图文件系统在磁盘上的布局block块管理: free bitmap区inode保存数据的结构数据结构定义磁盘上的保存的数据结构超级块对象dinode 结构目录项的结构内存中的数据结构inode 结构函数接口对block块的操作读到超级块到内存中从磁盘上申请一个空闲的block块释放磁盘上的一个bloc

Debug Xv6 Kernel with GDB, QEMU and VScode

Debug Xv6 Kernel with GDB, QEMU and VScode The launch.json is as follows: { "version": "0.2.0", "configurations": [ { "name": "C/C++: gcc 生成和调试活动文件", "type"

xv6 lab3

https://pdos.csail.mit.edu/6.S081/2020/labs/pgtbl.html 简述 这个lab有三个task: 写一个打印页表内容的函数 给每个进程都创建一个内核页表,这个主要的优化点是具体点,就是将用户态页表的映射也放到每个进程的内核页表中,那么从用户态传入到内核态的指针就可以直接按照内核页表

安装并启动xv6

1. 下载xv6 从github上拉取xv6的源码: $ git clone git://github.com/mit-pdos/xv6-public.git 2. 下载qemu 在Ubuntu下使用apt-get,其他发行版自行搜索如何下载: $ sudo apt-get install qemu 3. 测试编译环境 输入下面的命令 $ objdump -i 第二行应该输出:elf32-i386 输入下面的

调试xv6

个人站点 个人独立博客站点:https://wzzzx.github.io/ 后续考虑以维护独立博客为主。 调试是一个比较麻烦的事情,需要倒腾的东西有点多,而且有些问题我现在也没搞清楚 调试工具 现在已知的调试工具有三种,暂时也还没搞清楚它们之间具体有什么区别。 riscv64-unknown-elf-gdb 在{%

MIT6.S081 ---- Preparation: Read chapter 2

Preparation: Read Chapter 2 一个操作系统的关键特征是支持多个任务。例如,用fork系统调用接口创建新的进程,这些进程分时共享计算资源。尽管进程数量比硬件CPU数量多,操作系统一定可以确保所有进程都有机会执行。另一个特征是进程的隔离性(isolation),如果一个进程有一个bug或故障,不会

任务调度器需要放在单独的线程里吗

背景 大家都知道,操作系统的一个最核心功能之一就是做任务的调度。通过将某个CPU 核在多个可执行的任务之间切换运行,任务调度器可实现多个任务共享一个或多个CPU 核,从而最大化的利用CPU核心资源。同时,通过快速的任务切换,可以让用户感觉大于CPU 核心的数量的任务被同时执行,实现并

操作系统实验三·xv6系统增添系统调用和用户级应用程序

xv6系统增添系统调用和用户级应用程序 1.实验目的2.实验内容3. 实验环境4. 程序设计和实现4.1系统修改4.2 编译运行 1.实验目的 准备xv6环境,向xv6添加一个新的系统调用,并编写用户级应用程序来调用新增的系统调用。 2.实验内容 您的任务是向xv6添加系统调用。从读取sysca

xv6实验2-内存管理单元(实验)

Exercise 1 Exercise 1. In the file kern/pmap.c, you must implement code for the following functions (probably in the order given). boot_alloc() mem_init() (only up to the call to check_page_free_list(1)) page_init() page_alloc() page_free()

xv6实验2-内存管理单元(文档)

介绍 这个实验,需要写操作系统的内存管理单元代码。内存管理单元有两个组件,第一个组件是内核的物理内存分配器,以便于内核可以分配和释放内存。分配器以4096字节为单位,称为页表。你的任务是维护一个记录已分配和空闲物理页表的数据结构,还有多少进程在共享已分配的页表。同时也要写进

xv6实验0-环境搭建

使用Docker 由于用macos编译太过于麻烦,所以就安装Docker来进行操作,主要的Dockerfile如下 FROM ubuntu:16.04 RUN apt-get -qq update RUN apt-get install -y git build-essential gdb gcc-multilib tmux RUN git clone http://web.mit.edu/ccutler/www/qemu.git -b 6.828-2.3.

【MIT 6.S081】Arch Linux下搭建xv6环境

目录 1. 更新系统2. 安装资源包3. 测试4. 降级安装包5. 下载xv66. 成功7. 联系 1. 更新系统 sudo pacman -Syyu 2. 安装资源包 sudo pacman -S riscv64-linux-gnu-binutils riscv64-linux-gnu-gcc riscv64-linux-gnu-gdb qemu-arch-extra 3. 测试 riscv64-linux-gnu-g

[MIT 6.S081] Lab1: Xv6 and Unix utilities

[MIT 6.S081] Lab1: Xv6 and Unix utilities Lab Guidance: Lab: Xv6 and Unix utilitiesLab Code: https://github.com/VastRock-Huang/xv6-labs-2020/tree/util Boot xv6 (easy) 步骤 获取实验用的 xv6 源码并切换到 util 分支 $ git clone git://g.csail.mit.edu/xv6-labs

xv6学习笔记(5) : 锁与管道与多cpu

xv6学习笔记(5) : 锁与管道与多cpu 1. xv6锁结构 1. xv6操作系统要求在内核临界区操作时中断必须关闭。 如果此时中断开启,那么可能会出现以下死锁情况: 进程A在内核态运行并拿下了p锁时,触发中断进入中断处理程序。 中断处理程序也在内核态中请求p锁,由于锁在A进程手里,且只有A进程执

xv6学习笔记(3):中断处理和系统调用

xv6学习笔记(3):中断处理和系统调用 1. tvinit函数 这个函数位于main函数内 表明了就是设置idt表 void tvinit(void) { int i; for(i = 0; i < 256; i++) SETGATE(idt[i], 0, SEG_KCODE<<3, vectors[i], 0); SETGATE(idt[T_SYSCALL], 1, SEG_KCODE<<3, vectors[T_SYSCA

使用WSL完成xv6-riscv实验

WSL(Windows Subsystem for Linux)是Windows10系统级支持的运行Linux内核的方法,相比于虚拟机,其启动更快,访问windows文件也更加方便,缺点是没有图形界面 如果您的win10系统已经安装过WSL,那么很可能由于Hyper-V开启而无法兼容其他虚拟机。那为什么不用WSL来完成lab呢 步骤0到步

Xv6 多进程编程

Xv6 多进程编程 参考: xv6-riscv-book 1.1 Processes and memory 本文参考 xv6-riscv-book,介绍如何使用 Xv6 系统调用,实现多进程编程。(其实就是把书上的代码完整化,并附上真实系统中的实现方式) 系统调用描述int fork()创建一个进程(通过复制当前进程)返回子进程 PIDint exit(

MIT 6.S081环境搭建

MIT 6.S081环境搭建 # 安装工具 $ sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu # 测试 $ riscv64-unknown-elf-gcc --version # 此时出现错误,需要执行下面这个命令 $ sudo apt install gcc-risc

MIT6.S081/6.828 实验1:Lab Unix Utilities

Mit6.828/6.S081 fall 2019的Lab1是Unix utilities,主要内容为利用xv6的系统调用实现sleep、pingpong、primes、find和xargs等工具。本文对各程序的实现思路及xv6的系统调用流程进行详细介绍。 前言 在实验之前,推荐阅读一下官网LEC1中提供的资料。其中Introduction是对该课程的

XV6操作系统make报错Makefile:192: *** recipe commences before first target. Stop. 的解决方法

XV6操作系统make报错Makefile:192: *** recipe commences before first target. Stop. 的解决方法   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客,B站昵称为:亓官劼,地址为亓官劼的B站 本文原创为亓官劼,请大