- 博客(13)
- 问答 (1)
- 收藏
- 关注
原创 Extendible Hashing
Extendible Hashing Background 最近在学习CMU 2021的15-445课程, 其中lab2便是要实现一个Extendible Hash, 实验过程踩了不少的坑,在这里记录一下。 Extendible Hashing 正如其名, 是一种可扩展哈希表, 可扩展指其容量,因为当不停往哈希表插入键值对时, 如果纵向(纵向是哈希表目录 director 大小, 横向是每个键对应的同一键池 bucket 大小)大小不扩张, 只扩张横向大小, 导致冲突键值对太多,寻找效率退化为 O(n)
2022-04-14 13:21:51
696
原创 frangipani 论文笔记
Frangipani: A Scalable Distributed File System Abstract Frangipani 是一个两层架构的文件系统: 底层为Petals :一个分布式虚拟磁盘 顶层为Frangipani file system,在每台机器上运行同样的代码,利用分布式锁来保证一致性 系统中的节点相互之间拥有信任权限,分享虚拟磁盘 对外界根据协议暴露接口,可通过网络调用访问文件 1. Introduciton 面对逐日增长的文件存储需求,增加机器是必须要做的事。这就引出了一下
2022-01-05 20:29:05
645
原创 MIT 6.s081 导航栏
xv6-lab1-util xv6-lab2-syscal xv6-lab3-pgtbl xv6-lab4-trap xv6-lab5-lazy xv6-lab6-cow xv6-lab7-thread xv6-lab8-lock xv6-lab9-fs xv6-lab10-mmap
2021-11-16 18:41:12
601
原创 xv6-lab10-mmap
Lab: mmap 实验目标 在实验环境中实现 mmap() 系统调用 hints char* mmap(void *addr, int length, int prot, int flags, int fd, int offset); int munmap(void *addr, int length); mmap() 映射的页面应该是 lazy alloc 的,以保证在映射大文件时不会阻塞 每个进程应保持对 mmap() 映射的记录。创建一个符合 VMA 要求的
2021-11-16 16:52:44
2036
原创 xv6-lab9-fs
Lab: file system 前置知识 阅读xv6 book 第八章 Large files 实验目标 在本实验中,测试程序将创建一个65803个磁盘块大小的文件,而未修改前的xv6只支持最大268个磁盘块大小的文件。 你的目标是修改文件系统结构和分配磁盘块代码以支持更大的文件。 实验实现 hints 新增一个二级目录以支持(11 + 256 + 256*256)= 65803大小的文件 fs.h 中的 struct dinode,NDIRECT,NINDIRECT,MAXFILE 是
2021-11-08 15:32:41
2385
原创 xv6-lab7-thread
Lab: Multithreading 前置知识 阅读xv6 book 第七章 Uthread: switching between threads 实验目的 在本实验中,你需要设计用户级线程切换的上下文 uthread.c 包含了用户级线程切换的代码 uthread_switch.S 是你要是实现的保存和恢复线程上下文代码 实验实现 hints 在thread_creat() 和 thread_schedule() 中添加你的代码 修改 struct thread 来保存你的上下文 你将会在 t
2021-11-07 19:06:55
1182
原创 xv6-lab6-cow
Lab: Copy-on-Write Fork for xv6 实验目标 本实验你的目标是实现xv6上的 copy-on-write 实验实现 copy-on-write介绍 copy-on-write 是指当你创建子进程时,并不实际复制父进程的空间地址的内容到新的物理内存,而是将页表项改为只读,并在第一次父/子进程要改变页面内容时才进行复制,并将原来的页面解锁为可读写。这种做法节省了大量的物理内存,尤其是现在大部分程序在 fork() 和通常立马会接上 exce() 载入新的程序 。总体来说本实验的思
2021-11-05 14:53:55
975
1
原创 xv6-lab5-lazy
Lab:xv6 lazy page allocation Eliminate allocation from sbrk() 实验目标 本实验你的任务是修改 sys_sbrk() 使得其只增加/减少进程地址空间大小,而不真正地分配页面 实验实现 /* sysproc.c */ uint64 sys_sbrk(void) { uint64 addr; int n; if(argint(0, &n) < 0) return -1; addr = myproc()->
2021-10-31 21:20:28
514
原创 xv6-lab4-trap
Lab:traps 前置知识 xv6 book 第四章 kernel/trampolines.S 涉及从用户态到内核态以及返回的代码 kernel/trap.c 处理中断的代码 RISC-V assembly 实验目标 该实验旨在让你熟悉一些汇编代码 Backtrace 实验目标 在kernel/printf.c 中实现一个函数 backtrace(), 并在 sys_sleep 中调用它。 backtrace() 会打印当前栈上所有函数调用返回地址 backtrace: 0x0000000080
2021-10-30 15:45:35
1593
原创 xv6-lab3-pgtbl
Lab:page tables 前置知识 xv6 book 第三章 熟悉kernel/memlayout.h、vm.c、kalloc.c Print a page table 实验目标 实现一个函数 vmprintf(pagetable_t) 该函数能按照以下格式打印页表 page table 0x0000000087f6e000 ..0: pte 0x0000000021fda801 pa 0x0000000087f6a000 .. ..0: pte 0x0000000021fda401 pa
2021-10-28 21:18:44
3928
3
原创 xv6-lab8-lock
Lab:lock 前置知识 xv6 book 章节6、3.5、8.1 对于hash的基本认知 对于锁的基本认知以及死锁的处理方法 Memory allocator 实验目标 在未修改前,所有内存块由一个锁管理,若有多个进程并发地获取内存,则会造成非常多的锁等待,kalloctest则统计了锁冲突的次数,如下 $ kalloctest start test1 test1 results: --- lock kmem/bcache stats lock: kmem: #fetch-and-add 83
2021-10-27 17:13:26
3032
1
原创 xv6-lab2-syscall
Lab: system calls(HITSZ) 前置知识 阅读xv6 book 章节2、4.3、4.4 熟悉系统调用用户空间代码 user/user.h 和 user/usus.pl 熟悉系统调用内核空间代码 kernel/syscall.h 和 kernel/syscall.c 熟悉进程相关代码 kernel/proc.h 和 kernel/proc.c System call tracing 实验目标 实现一个系统调用 trace(uint64 mask) 若mask的二进制表示中第n位为1
2021-10-26 16:04:03
4409
8
原创 HITsz os-lab xv6-util
HITsz os-lab xv6-util 1.sleep 题目 输入 sleep 命令后,命令行会 ”暂停“ 一段时间 (10个ticks,ticks由内核定义),然后输出"(nothing happens for a little while)"。 实现原理 调用系统调用 sleep(int) 代码 #include "kernel/types.h" #include "user.h" int main(int argc,char* argv[]){ if(argc != 2){
2021-09-29 16:29:31
1697
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅