首页 > TAG信息列表 > s081

6.S081-2021 locks

buffer cache 原来的实现是一个双向链表,每次进行文件的读写操作都要锁住整个表,显然大大降低了系统的并发度。 所以可以仿照Java中currentHashMap的思路,使用分段锁,每个hash桶上一个锁。 但是在进行缓存驱逐的时候需要注意死锁的情况。 比如我们哈希值为2的缓存块不存在并且哈希值为

MIT6.S081-Lab5 COW

开始日期:22.4.19 操作系统:Ubuntu20.0.4 Link:Lab COW 目录Lab COW写在前面Virtual address参考链接Copy-on-Write总结 Lab COW 写在前面 Virtual address 关于虚拟地址的概念,一直不是很清晰,book-riscv-rev2中给出的概念是:虚拟地址是用来给xv6操作的地址 P26 The RISC-V page tab

MIT6.S081-Lab4 Traps

开始日期:22.4.7 操作系统:Ubuntu20.0.4 Link:Lab Traps 目录Lab Traps写在前面vscode+wsl2+unbuntu20.04只使用gdb-multiarch进入qemu-gdb参考链接实验内容RISC-V assemblyBacktraceAlarmtest0: invoke handlerstest1/test2(): resume interrupted code总结 Lab Traps 写在前面 vsco

MIT6.S081-Lab Utilities

开始日期:22.2.24 操作系统:Ubuntu20.0.4 Link:Lab Utilities 目录Lab Utilities环境配置实验内容在实验之前lab Boot xv6 (easy)sleep (easy)pingpong (easy)primes (moderate)/(hard)find (moderate)xargs (moderate)总结 Lab Utilities 环境配置 每次的环境配置都是一段折磨又快乐

【操作系统】MIT 6.s081 LAB6

Lab6: Copy-on-Write Fork for xv6 原文地址:YSBLOG 参考资料:MIT 6.s081 xv6-lab6-cow - 知乎 (zhihu.com) 实验背景: ​ 在原本的xv6中,当Shell处理指令时,会通过fork创建一个子进程,该子进程包含一个完整的Shell拷贝,在该子进程中调用exec执行对应的指令程序,而在exec中第一件事就

MIT6.S081调试技巧

Debug总结 debug开启 在一个窗口运行make qemu-gdb。 在另一窗口运行gdb-multiarch kernel/kernel,如果要导入其他debubg的可执行文件,如调试find程序,执行file user/_find,之后远程链接gdb,target remote localhost:26000,然后正常调试。 一些有用的调试技巧: 分屏 Change the layout of

MIT 6.S081 操作系统 LAB7:Multithreading

Lab: Multithreading Uthread: switching between threads 实现一个用户级线程,跟内核线程的切换没什么区别。只要上课听懂了,复制内核代码就行了 只贴关键代码 线程上下文 struct context { uint64 ra; uint64 sp; // callee-saved uint64 s0; uint64 s1; uint64 s2;

[Mit6.S081] Page Table笔记

Lecture 4 Page Table Isolationmemoryaddress spacespage tables(hardware support) every app has its own map(page table) perpage(4KB, 4096 = 2^12 -> offset = 12) virtual address(64) = {EXT(25) + index(27) + offset(12)}RISC-V physical address(56) = {

[MIT 6.S081] Lec 18: OS Organization 笔记

Lec 18: OS Organization Ref: https://github.com/huihongxiao/MIT6.S081/tree/master/lec18-os-organization-robertPreparation: The Performance of micro-Kernel-Based Systems (1997) 宏内核 Linux, Unix 和 XV6 等传统方式实现的操作系统成为宏内核. 宏内核优点 内核

[MIT 6.S081] Lab 7: Multithreading

Lab 7: Multithreading Lab Guidance: https://pdos.csail.mit.edu/6.828/2020/labs/thread.htmlLab Code: https://github.com/VastRock-Huang/xv6-labs-2020/tree/thread Uthread: switching between threads (moderate) 要点 添加代码到 user/uthread.c 的 thread_create(

[OS]6.S081-Lab-Tools

Tools My Environment ❯ uname -a Linux VM-4-11-ubuntu 5.4.0-77-generic #86-Ubuntu SMP Thu Jun 17 02:35:03 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux Installing via APT (Debian/Ubuntu) Install sudo apt-get install git build-essential gdb-multiarch qemu-system

MIT6.S081 Lec09翻译

MIT6.S081 Lec09笔记 Lec09 Interrupts (Frans) 9.1 真实操作系统内存使用情况 今天课程的内容是中断。但是在具体介绍中断之前,我想先回顾一下上周一些有趣的内容。因为上周的课程主要是讲内存,我们收到了很多内存相关的问题。我想先讨论一下内存是如何被真实的操作系统(而不是

6.S081 LAB1

LAB链接:https://pdos.csail.mit.edu/6.S081/2020/labs/util.html #sleep main函数有两个参数argc和argv,其中argc表示命令行参数个数(argument count),argc表示命令行向量(argument vector),比如本例中的sleep程序,命令行参数个数为2,命令行向量分别为{"sleep",ticks},其中ticks为用

MIT6.S081 Lec06翻译

Lec06 Isolation & system call entry/exit (Robert) 6.1 用户空间和内核空间的切换(Trap机制) 今天我想讨论一下,程序运行是完成用户空间和内核空间的切换。每当 程序执行系统调用程序出现了类似page fault、运算时除以0的错误一个设备触发了中断(interrupt) 使得当前程序运

【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

【MIT6.S081/6.828】手把手教你搭建开发环境

目录1. 简介2. 安装ubuntu20.043. 更换源3.1 更换/etc/apt/sources.list文件里的源3.2 备份源列表3.3 打开sources.list文件修改3.4 刷新列表4. 安装SSH4.1 SecureCRT 报错4.2 解决方法4.3 修改ssh_config4.4 修改sshd_config4.5 重新启动服务并测试5. 配置静态IP6. 安装RISC-V交

6.s081 : trap

Traps Calling Convention C数据类型和对齐 在RV32编译器中, int是32bits, long和pointer和int相同, 都是32bits. 在RV64编译器中, int是32bits, 但long和pointer是64bits. 在RV32和RV64, long long是64bits的整数, float是32bits的浮点数, double是64bits的浮点数, long double

6.s081 : 页表

CH3 Page tables os通过页表来给每个进程提供私有的地址空间和内存. 页表决定了什么是内存地址以及物理内存的什么部分可以被获取. 它允许将多个进程地址空间存放在同一个物理内存中. 同时也允许将相同内存映射到几个不同的地址空间(trampoline页). Paging hardware RISC-V指令(us

6.s081 : 系统调用

Syscall CH2 Operating system organization os的任务是: 多任务(multiplexing): 一次支持几个活动(在进程间time-share资源). 即使进程比CPU多, os必须确保每个进程有机会运行. 隔离(isolation): 在进程间实现隔离. 如果一个进程有bug, 不会影响到另一个与这个进程无关的进程.

6.S081 Xv6 Lab Multithreading

6.S081 Xv6 Lab: Multithreading Lab: Multithreading of MIT 6.S081 Fall 2020 $ git fetch $ git checkout thread $ make clean Uthread: switching between threads 这个题有意思的,手写用户线程的实现。做起来不难,大体框架人家都给了,自己只要实现一下上下文切换。 首

MIT 6.S081 Lab File System

前言 打开自己的blog一看,居然三个月没更新了...回想一下前几个月,开题 + 实验室杂活貌似也没占非常多的时间,还是自己太懈怠了吧,掉线城和文明6真的是时间刹手( 不过好消息是把15445的所有lab都锤完了,最近一个月应该没啥活干。立个flag,这个月更它个10篇blog,把15445的知识点、lab,以及6.

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-实验4-Traps

Mit6.S081-实验4-Traps 一、RISC-V assembly1,实验准备2,实验要求3,相关问题 一、RISC-V assembly 1,实验准备 1)阅读xv6 book章节4 2)从user space过渡到kernel space,kernel space返回到user space的汇编代码:kernel/trampoline.S 3)解决所有中断的代码:kernel/trap.c 2,实验要求