Skip to content
GitLab
Explore
Projects
Groups
Topics
Snippets
Projects
Groups
Topics
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
极值点不偏移队
OSKernel2024-LabOS
Commits
01450b08
Commit
01450b08
authored
4 months ago
by
{busyforest}
Browse files
Options
Download
Patches
Plain Diff
update readme
parent
5a956831
main
1 merge request
!1
Fs
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
README
+77
-45
README
with
77 additions
and
45 deletions
+77
-45
README
+
77
−
45
View file @
01450b08
xv6 is a re-implementation of Dennis Ritchie's and Ken Thompson's Unix
Version 6 (v6). xv6 loosely follows the structure and style of v6,
but is implemented for a modern RISC-V multiprocessor using ANSI C.
ACKNOWLEDGMENTS
xv6 is inspired by John Lions's Commentary on UNIX 6th Edition (Peer
to Peer Communications; ISBN: 1-57398-013-7; 1st edition (June 14,
2000)). See also https://pdos.csail.mit.edu/6.828/, which
provides pointers to on-line resources for v6.
The following people have made contributions: Russ Cox (context switching,
locking), Cliff Frey (MP), Xiao Yu (MP), Nickolai Zeldovich, and Austin
Clements.
We are also grateful for the bug reports and patches contributed by
Silas Boyd-Wickizer, Anton Burtsev, Dan Cross, Cody Cutler, Mike CAT,
Tej Chajed, Asami Doi, eyalz800, , Nelson Elhage, Saar Ettinger, Alice
Ferrazzi, Nathaniel Filardo, Peter Froehlich, Yakir Goaron,Shivam
Handa, Bryan Henry, jaichenhengjie, Jim Huang, Alexander Kapshuk,
Anders Kaseorg, kehao95, Wolfgang Keller, Jonathan Kimmitt, Eddie
Kohler, Austin Liew, Imbar Marinescu, Yandong Mao, Matan Shabtay,
Hitoshi Mitake, Carmi Merimovich, Mark Morrissey, mtasm, Joel Nider,
Greg Price, Ayan Shafqat, Eldar Sehayek, Yongming Shen, Fumiya
Shigemitsu, Takahiro, Cam Tenny, tyfkda, Rafael Ubal, Warren Toomey,
Stephen Tu, Pablo Ventura, Xi Wang, Keiichi Watanabe, Nicolas
Wolovick, wxdao, Grant Wu, Jindong Zhang, Icenowy Zheng, and Zou Chang
Wei.
The code in the files that constitute xv6 is
Copyright 2006-2020 Frans Kaashoek, Robert Morris, and Russ Cox.
ERROR REPORTS
Please send errors and suggestions to Frans Kaashoek and Robert Morris
(kaashoek,rtm@mit.edu). The main purpose of xv6 is as a teaching
operating system for MIT's 6.S081, so we are more interested in
simplifications and clarifications than new features.
BUILDING AND RUNNING XV6
You will need a RISC-V "newlib" tool chain from
https://github.com/riscv/riscv-gnu-toolchain, and qemu compiled for
riscv64-softmmu. Once they are installed, and in your shell
search path, you can run "make qemu".
## 基本信息
- **比赛类型**:OS原理赛道
- **学校名称**:复旦大学
- **队伍编号**:T202410246994864
- **队伍名称**:极值点不偏移队
- **队伍成员**:包旭
## 项目简介
基于 `Xv6` 操作系统框架,构建 `RISC-V` 架构的类 `Unix` 操作系统。
### 如何运行
- Ubuntu 22.04 & Arch
- gcc RISC-V 交叉编译器,QEMU模拟器
##### qemu虚拟机运行
```shell
# /xv6-oslab24
make qemu
```
##### 执行GDB调试
```shell
make qemu-gdb
```
### 实现功能
- Memory allocator
XV6的内存分配器只有一个内存链表供多个CPU核使用。在使用`kalloc()`获取内存时,由于添加了内存锁`kmem.lock`,其他CPU如果要切换进行内存申请必须等待当前进程释放内存锁。该分支实现了让每个CPU拥有自己的内存链表,每个链表都有自己的锁,同时,当一个CPU内存链表不足时,还可以从其他链表 窃取内存块的功能,这样就不会让所有的CPU争抢一个空闲区域(窃取可能会引发锁争用,但这也是不可避免的情况)。
- Buffer cache
在访问文件数据的时候,操作系统会将文件的数据放置在磁盘缓存中。磁盘缓存是不同进程之间的共享资源,因此需要通过锁确保使用的正确性。如果有多进程密集地使用文件系统,他们可能会竞争磁盘缓存的`bcache.lock`锁。该分支实现了修改磁盘缓存块列表的管理机制(主要修改`kernel/bio.c`),使得可用多个锁管理缓存块,从而减少缓存块管理的锁争用的功能。
- Largefiles增加了 xv6 的最大文件限制,修改 `bmap()`,使其除了实现 direct 块和 singly-indirect 块外,还能实现 doubly-indirect 块。
- Symbolic links
实现符号链接(软链接)的系统调用 `symlink(char *target, char *path)` ,该调用在引用由`target`命名的文件的路径处创建一个新的符号链接。
- Process state
在xv6原始系统中实现了具有获取进程运行功能的 `wait_sched` 系统调用。可以统计xv6中,用户通过`fork`系统调用生成的子进程处于不同状态时间的信息,同时实现函数`on_state_change`在进程状态发生变化时收集运行时长。
- Priority scheduling
扩展了xv6的进程调度实现,修改xv6的进程调度逻辑(主要修改`kernel/proc.c`的`scheduler()`函数),使得xv6支持指定进程优先级的静态优先级调度模式PR。同时,为了让用户可以为进程指定优先级以使用提供的优先级调度策略,还实现系统调用功能 `set_priority`,让用户可以通过设置进程优先级改变进程的运行模式。
- print pagetable
在 `exec` 中插桩一个打印函数,使得 xv6 系统启动时会打印首个进程的页表信息。
- kernel pagetables
实现了将全局共享内核页表改成独立内核页表,使得每个进程拥有自己独立的内核页表(全局共享内核页表的副本)的功能。将用户页表中的内存映射 和原来共享内核页表中的内存映射进行合并,这样内核也能够直接对用户的虚拟地址进行访问,而不需要软件模拟翻译。
- trace
实现了具有系统调用跟踪功能的`trace`系统调用,它可以打印系统调用信息。
- sysinfo
实现了具有收集xv6运行信息功能的`sysinfo`系统调用。
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Topics
Snippets