1 Star 2 Fork 1

殊蕤/xv6-course

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Unlicense

XV6 操作系统实践

如果觉得讲解得好,请喝一杯咖啡也是极好的

img/pay.jpg

捐赠

好心的捐赠大佬可以备注一下: xv6+昵称 我会在下面会记录一下,感谢!

date name
<2023-12-27 Wed> V*i
<2024-05-28 Tue> M*N

简介

XV6 是 MIT 开发的一个教学用的完整的类 Unix 操作系统,并且在 MIT 的操作系统课程 6.828 中使用

  1. 它源自 Dennis Ritchie 和 Ken Thompson 的 Unix Version 6 (v6)
  2. 通过阅读并理解 XV6 的代码,可以清楚地了解操作系统中众多核心的概念 (1w)
  3. 目前 MIT XV6 操作系统支持 x86 和 riscv 两种体系结构

主题

总结

date
  1. 开始录制时间 2023 年 10 月 23 日
  2. 内存相关
    • 但是很多操作系统的实现更加精巧;例如,
    • xv6 不能向磁盘中请求页,
    • 没有实现 copy-on-write 的 fork 操作
      • fork -> exec
    • 共享内存和惰性分配页(lazily-allocated page)
      • malloc(..)
    • x86 支持段式内存转换,但 xv6 仅用它来实现 proc 这种有固定地址
      • segment
      • paging
    • 在内存较多的机器上使用 x86 的 4MB 大小的“超级页”, xv6 不支持
      • database join/select
  3. 进程相关
    • 我们最好以锁为基础来构建高级的同步队列,虽然 xv6 并没有这么做
      • spinlock/sleeplock
      • queue, TaskPoolExecutor/ 信号量 semaphore
    • 让每个进程都有优先级。主要思想是优先处理高优先级的可运行进程。
      • proc.c 优先级 nicevalue
    • 但是由于要权衡多项指标,例如要保证公平性和高的吞吐量,调度算法往往很快变得复杂起来
    • 复杂的调度算法还会无意中导致像优先级倒转(priority inversion)和护航(convoy)这样的现象
    • Linux 内核的 sleep 用一个显式的进程队列代替 xv6 中的等待队列(wait channel);而该队列本身内部还有锁
      • sleep/wakeup
    • 信号量是另一种合作机制
  4. 驱动相关
    • 用户在读一个文件的时候,这个文件的数据将会被拷贝两次。
      • 第一次是由驱动从硬盘拷贝到内核内存,之后通过 read 系统调用,从内核内存拷贝到用户内存。
      • ide => bcache buf->data
      • dinode => inode
      • 零拷贝
    • 日志记录不是唯一的崩溃后的恢复机制
      • recover_from_log / redo log
      • 比如,UNIX 系统中的 fsck 命令来检查每个文件和目录以及各个块和 i 节点可用的链表,
      • 查找并解决出现的不一致问题
    • 如果磁盘操作失败,xv6 报警
      • 使用冗余来掩饰磁盘错误
      • RAID 冗余磁盘阵列

答疑

  1. 12a 答疑一 12a-Q&A.org | 视频 12a
  2. 34a 答疑二 34a-Q&A.org | 视频 34a
  3. 34b 答疑三 34b-Q&A.org | 视频 34b

资源

  1. MIT 课程官网 6.828
  2. x86 版本 xv6-public
  3. riscv 版本 xv6-riscv
  4. gas 手册 gas
  5. Unix 源代码 Unix Heritage Society
This is free and unencumbered software released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information, please refer to <https://unlicense.org>

简介

xv6-course 展开 收起
Unlicense
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/jeanhwea/xv6-course.git
git@gitee.com:jeanhwea/xv6-course.git
jeanhwea
xv6-course
xv6-course
master

搜索帮助