原文:XV6学习(15)Lab mmap: Mmap

代码在Github上。 这一个实验是要实现最基础的mmap功能。mmap即内存映射文件,将一个文件直接映射到内存当中,之后对文件的读写就可以直接通过对内存进行读写来进行,而对文件的同步则由操作系统来负责完成。使用mmap可以避免对文件大量read和write操作带来的内核缓冲区和用户缓冲区之间的频繁的数据拷贝。在Kafka消息队列等软件中借助mmap来实现零拷贝 zero copy 。 首先定义v ...

2021-02-10 12:04 0 695 推荐指数:

查看详情

XV6学习(7)Lab lazy

代码在github上。 这一个实验是要利用缺页异常来实现懒分配(lazy allocation)。用户态程序通过sbrk系统调用来在堆上分配内存,而sbrk则会通过kalloc函数来申请内存页面,之 ...

Sat Jan 16 18:39:00 CST 2021 1 461
XV6学习(2)Lab syscall

实验的代码放在了Github上。 第二个实验是Lab: system calls。 这个实验主要就是自己实现几个简单的系统调用并添加到XV6中。 XV6系统调用 添加系统调用主要有以下几步: 在user/user.h中添加系统调用函数的定义。 在user/usys.pl中添加 ...

Mon Dec 21 18:28:00 CST 2020 0 917
XV6学习 (4)Lab pgtbl

这一个实验主要是学习XV6的页表(分页机制),关于分页机制的相关内容已经写在XV6学习 (3)里面了。 代码放在Github上。 Print a page table (easy) 这一个就是要实现一个vmprint()函数来遍历页表并打印,可以仿照freewalk()函数来写。 在这里 ...

Wed Dec 23 18:33:00 CST 2020 0 509
XV6学习(1) Lab util

正在学习MIT的6.S081,把做的实验写一写吧。 实验的代码放在了Github上。 第一个实验是Lab util,算是一个热身的实验,没有涉及到系统的底层,就是使用系统调用来完成几个用户模式的小程序。 Boot xv6 (easy) 启动XV6,按照文档执行就ok了。 在XV6中 ...

Tue Dec 22 01:21:00 CST 2020 0 727
XV6学习(6)Lab: traps

这一个实验主要是对RISC-V的汇编、栈帧结构以及陷阱进行简单的了解,难度并不大。 代码放在github上。 RISC-V assembly (easy) Q1: Which registers ...

Wed Jan 06 18:37:00 CST 2021 0 957
XV6学习(11)Lab thread: Multithreading

代码放在github上。 这一次实验感觉挺简单的,特别是后面两个小实验。主要就是对多线程和锁进行一个学习。 Uthread: switching between threads 这一个实验是要实现一个简单的用户级线程,写完之后发现原来用户级线程的简单实现也没有想象的那么复杂。 首先定义一个 ...

Sat Feb 06 05:24:00 CST 2021 1 775
XV6学习(16)Lab net: Network stack

最后一个实验了,代码在Github上。 这一个实验其实挺简单的,就是要实现网卡的e1000_transmit和e1000_recv函数。不过看以前的实验好像还要实现上层socket相关的代码,今年就 ...

Thu Feb 11 02:50:00 CST 2021 0 455
XV6学习(12)Lab lock: Parallelism/locking

代码在github上 这一次实验是要对XV6内部的锁进行优化,减少锁争用,提高系统的性能。 Memory allocator (moderate) 第一个实验是对XV6内核的内存页面分配器进行改进,改进的策略在前面的章节中也讲过了。XV6原本是使用一个空闲页面链表,但是这样就会导致不同CPU ...

Sun Feb 07 03:01:00 CST 2021 0 484
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM