概述
课程介绍
文档翻译
book-riscv-rev1
第一章 操作系统接口
1.1 进程和内存
1.2 I/O和文件描述符
1.3 管道
1.4 文件系统
1.5 真实世界
1.6 练习
第二章 操作系统架构
2.1 抽象系统资源
2.2 用户态,核心态,以及系统调用
2.3 内核组织
2.4 代码:XV6架构篇
2.5 进程概述
2.6 代码:启动XV6和第一个进程
2.7 真实世界
2.8 练习
第三章 页表
3.1 页式硬件
3.2 内核地址空间
3.3 代码:创建一个地址空间
3.4 物理内存分配
3.5 代码:物理内存分配
3.6 进程地址空间
3.7 代码:sbrk
3.8 代码:exec
3.9 真实世界
3.10 练习
第四章 陷阱指令和系统调用
4.1 RISC-V陷入机制
4.2 从用户空间陷入
4.3 代码:调用系统调用
4.4 系统调用参数
4.5 从内核空间陷入
4.6 页面错误异常
4.7 真实世界
4.8 练习
第五章 中断和设备驱动
5.1 代码:控制台输入
5.2 代码:控制台输出
5.3 驱动中的并发
5.4 定时器中断
5.5 真实世界
5.6 练习
第六章 锁
6.1 竞态条件
6.2 代码:Locks
6.3 代码:使用锁
6.4 死锁和锁排序
6.5 锁和中断处理函数
6.6 指令和内存访问排序
6.7 睡眠锁
6.8 真实世界
6.9 练习
第七章 调度
7.1 多路复用
7.2 代码:上下文切换
7.3 代码:调度
7.4 代码:mycpu和myproc
7.5 sleep与wakeup
7.6 代码:sleep和wakeup
7.7 代码:Pipes
7.8 代码:wait, exit和kill
7.9 真实世界
7.10 练习
第八章 文件系统
8.1 概述
8.2 Buffer cache层
8.3 代码:Buffer cache
8.4 日志层
8.5 日志设计
8.6 代码:日志
8.7 代码:块分配器
8.8 索引结点层
8.9 代码:Inodes
8.10 代码: Inode包含内容
8.11 代码:目录层
8.12 代码:路径名
8.13 文件描述符层
8.14 代码:系统调用
8.15 真实世界
8.16 练习
Introduction
使用GNU Debugger
C Pointers, gdb
Calling Convention
Journaling the Linux ext2fs Filesystem
实验记录
版本控制
实验内容
Lab1: Xv6 and Unix utilities
Lab2: System calls
Lab3: Page tables
Lab4: Traps
Lab5: Xv6 lazy page allocation
Lab6: Copy-on-Write Fork for xv6
Lab7: Multithreading
Lab8: Locks
Lab9: File system
Lab10: Mmap
Lab11: Network
实验解析
Lab1: Util
Lab2: Syscall
Lab3: Pgtbl
Lab4: Traps
Lab5: Xv6 lazy page allocation
Lab6: Copy-on-Write Fork for xv6
Lab7: Multithreading
Lab8: Locks
Lab9: File system
Lab10: Mmap
Published with GitBook
4.8 练习
4.8 练习
4.8 练习
函数
copyin
和
copyinstr
在软件中遍历用户页表。设置内核页表,使内核拥有用户程序的映射,这样
copyin
和
copyinstr
可以使用
memcpy
将系统调用参数复制到内核空间,依靠硬件进行页表遍历
实现惰性内存分配
(lazy allocation)
实现写时拷贝版本的
fork
(
copy on write fork
)
results matching "
"
No results matching "
"