uCore Lab Documents
Introduction
1.
Lab 0
1.1.
实验目的
1.2.
准备知识
1.2.1.
了解OS实验
1.2.2.
设置实验环境
1.2.2.1.
开发OS实验的简单步骤
1.2.2.2.
通过虚拟机使用Linux实验环境(推荐:最容易的实验环境安装方法)
1.2.2.3.
安装使用Linux实验环境(适合希望自己安装Linux系统的同学)
1.2.2.4.
实验中可能使用的软件
1.2.3.
了解编程开发调试的基本工具
1.2.3.1.
gcc的基本用法
1.2.3.1.1.
编译简单的 C 程序
1.2.3.1.2.
AT&T汇编基本语法
1.2.3.1.3.
GCC基本内联汇编
1.2.3.1.4.
GCC扩展内联汇编
1.2.3.2.
make和Makefile
1.2.3.3.
gdb使用
1.2.3.4.
进一步的相关内容
1.2.4.
基于硬件模拟器实现源码级调试
1.2.4.1.
安装硬件模拟器QEMU
1.2.4.1.1.
Linux运行环境
1.2.4.1.2.
Linux环境下的源码级安装过程
1.2.4.1.2.1.
获得并应用修改
1.2.4.1.2.2.
配置、编译和安装
1.2.4.2.
使用硬件模拟器QEMU
1.2.4.2.1.
运行参数
1.2.4.2.2.
常用调试命令
1.2.4.3.
[基于qemu内建模式调试ucore]
1.2.4.4.
结合gdb和qemu源码级调试ucore
1.2.4.4.1.
编译可调试的目标文件
1.2.4.4.2.
ucore 代码编译
1.2.4.4.3.
使用远程调试
1.2.4.4.4.
使用gdb配置文件
1.2.4.4.5.
加载调试目标
1.2.4.4.6.
设定调试目标架构
1.2.5.
了解处理器硬件
1.2.5.1.
Intel 80386运行模式
1.2.5.2.
Intel 80386内存架构
1.2.5.3.
Intel 80386寄存器
1.2.6.
了解ucore编程方法和通用数据结构
1.2.6.1.
面向对象编程方法
1.2.6.2.
通用数据结构双向循环链表
1.2.6.2.1.
双向循环链表
1.3.
附录A.ucore实验中的常用工具
1.4.
附录B.ucore实验参考资料
2.
Lab 1
2.1.
实验目的
2.2.
实验内容
2.2.1.
练习
2.2.1.1.
练习1
2.2.1.2.
练习2
2.2.1.3.
练习3
2.2.1.4.
练习4
2.2.1.5.
练习5
2.2.1.6.
练习6
2.2.1.7.
扩展练习
2.2.2.
项目组成
2.3.
从机器启动到操作系统运行的过程
2.3.1.
BIOS启动过程
2.3.2.
bootloader启动过程
2.3.2.1.
保护模式和分段机制
2.3.2.2.
地址空间
2.3.2.3.
硬盘访问概述
2.3.2.4.
ELF文件格式概述
2.3.3.
操作系统启动过程
2.3.3.1.
函数堆栈
2.3.3.2.
中断与异常
2.3.3.3.
lab1中对中断的处理实现
2.4.
实验报告要求
2.5.
附录A“关于A20 Gate”
2.6.
附录B“第一条执行指令”
3.
Lab 2 物理内存管理
3.1.
实验目的
3.2.
实验内容
3.2.1.
练习
3.2.2.
项目组成
3.3.
物理内存管理
3.3.1.
实验执行流程概述
3.3.2.
探测系统物理内存布局
3.3.3.
以页为单位管理物理内存
3.3.4.
物理内存页分配算法实现
3.3.5.
实现分页机制
3.3.5.1.
段页式管理基本概念
3.3.5.2.
建立段页式管理中需要考虑的关键问题
3.3.5.3.
系统执行中地址映射的四个阶段
3.3.5.4.
建立虚拟页和物理页帧的地址映射关系
3.4.
实验报告要求
3.5.
附录A. 探测物理内存分布和大小的方法
3.6.
附录B. 实现物理内存探测
3.7.
附录C. 链接地址/虚地址/物理地址/加载地址以及edata/end/text的含义
3.8.
附录D. 自映射机制
4.
Lab 3
4.1.
实验目的
4.2.
实验内容
4.2.1.
练习
4.2.2.
项目组成
4.3.
虚拟内存管理
4.3.1.
基本原理概述
4.3.2.
实验执行流程概述
4.3.3.
关键数据结构和相关函数分析
4.4.
Page Fault异常处理
4.5.
页面置换机制的实现
4.5.1.
页替换算法
4.5.2.
页面置换机制实验报告要求
4.6.
实验报告要求
5.
Lab 4
5.1.
实验目的
5.2.
实验内容
5.2.1.
练习
5.2.2.
项目组成
5.3.
内核线程管理
5.3.1.
实验执行流程概述
5.3.2.
设计关键数据结构 -- 进程控制块
5.3.3.
创建并执行内核线程
5.3.3.1.
创建第0个内核线程idleproc
5.3.3.2.
创建第1个内核线程initproc
5.3.3.3.
调度并执行内核线程initproc
5.4.
实验报告要求
5.5.
附录A:实验四的参考输出
5.6.
附录B:【原理】进程的属性与特征解析
6.
Lab 5
6.1.
实验目的
6.2.
实验内容
6.2.1.
练习
6.2.2.
项目组成
6.3.
用户进程管理
6.3.1.
实验执行流程概述
6.3.2.
创建用户进程
6.3.3.
进程退出和等待进程
6.3.4.
系统调用实现
6.4.
实验报告要求
6.5.
附录 A:【原理】用户进程的特征
7.
Lab 6
7.1.
实验目的
7.2.
实验内容
7.2.1.
练习
7.2.2.
项目组成
7.3.
调度框架和调度算法设计与实现
7.3.1.
实验执行流程概述
7.3.2.
进程状态
7.3.3.
进程调度实现
7.3.3.1.
内核抢占点
7.3.3.2.
进程切换过程
7.3.4.
调度框架和调度算法
7.3.4.1.
设计思路
7.3.4.2.
数据结构
7.3.4.3.
调度点的相关关键函数
7.3.4.4.
RR 调度算法实现
7.3.5.
Stride Scheduling
7.3.5.1.
基本思路
7.3.5.2.
使用优先队列实现 Stride Scheduling
7.4.
实验报告要求
8.
Lab 7
8.1.
实验目的
8.2.
实验内容
8.2.1.
练习
8.2.2.
项目组成
8.3.
同步互斥的设计与实现
8.3.1.
实验执行流程概述
8.3.2.
计时器的原理和实现
8.3.3.
同步互斥的底层支撑
8.3.4.
信号量
8.3.5.
管程和条件变量
8.4.
实验报告要求
8.5.
附录
9.
Lab 8
9.1.
实验目的
9.2.
实验内容
9.2.1.
练习
9.2.2.
项目组成
9.3.
文件系统设计与实现
9.3.1.
ucore 文件系统总体介绍
9.3.2.
通用文件系统访问接口
9.3.3.
Simple FS 文件系统
9.3.3.1.
文件系统的布局
9.3.3.2.
索引节点
9.3.4.
文件系统抽象层 - VFS
9.3.4.1.
file & dir接口
9.3.4.2.
inode 接口
9.4.
设备层文件 IO 层
9.4.1.
关键数据结构
9.4.2.
stdout设备文件
9.4.3.
stdin 设备文件
9.5.
实验执行流程概述
9.6.
文件操作实现
9.6.1.
打开文件
9.6.2.
读文件
9.7.
实验报告要求
Powered by
GitBook
A
A
Serif
Sans
White
Sepia
Night
Share on Twitter
Share on Google
Share on Facebook
Share on Weibo
Share on Instapaper
uCore Lab Documents
调度框架和调度算法