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
参考资料
一些资料信息来源于
http://pdos.csail.mit.edu/6.828/2014/reference.html
UNIX general info
Youtube Unix intro
The UNIX Time-Sharing System
, Dennis M. Ritchie and Ken L.Thompson,. Bell System Technical Journal 57, number 6, part 2 (July-August 1978) pages 1905-1930.
The Evolution of the Unix Time-sharing System
, Dennis M. Ritchie, 1979.
The C programming language (second edition) by Kernighan and Ritchie. Prentice Hall, Inc., 1988. ISBN 0-13-110362-8, 1998.
building or reading a small OS
How to make an Operating System
xv6 book 中文
自己动手写操作系统
于渊 著,电子工业出版社,2005
Linux-0.11内核完全注释
赵炯,2009
oldlinux论坛
osdev.org
some OS course
6.828: Operating Systems Engineering - in MIT
CS-537: Introduction to Operating Systems - in WISC
x86 Emulation
QEMU user manual
x86 Assembly Language
Intel 80386 Programmer's Reference Manual, 1987 (HTML).
Linux 汇编语言开发指南
汇编语言程序设计
布鲁姆 著, 马朝晖 等译,机械工业出版社,2005
Multiprocessor references:
MP specification
IO APIC
x86系统结构与编程
微型计算机技术及应用(第4版)
戴梅萼,史嘉权 编著, 清华大学出版社, 2008
x86/x64体系探索及编程
邓志 著,电子工业出版社,2012
x86汇编语言:从实模式到保护模式
李忠,王晓波,余洁 著,电子工业出版社,2013
General BIOS and PC bootstrap
BIOS Services and Software Interrupts
, Roger Morgan, 1997.
"El Torito" Bootable CD-ROM Format Specification
,Phoenix/IBM, January 1995.
VGA display -
console.c
VESA BIOS Extension (VBE) 3.0
September 1998.
Free VGA Project
J.D. Neal, 1998.
8253/8254 Programmable Interval Timer (PIT)
82C54 CHMOS Programmable Interval Timer,
, Intel, October 1994.
Data Solutions 8253/8254 Tutorial
, Data Solutions.
8259/8259A Programmable Interrupt Controller (PIC)
8259A Programmable Interrupt Controller
,Intel, December 1988.
16550 UART Serial Port
PC16550D Universal Asynchronous Receiver/Transmitter with FIFOs
, National Semiconductor, 1995.
http://byterunner.com/16550.html
, Byterunner Technologies.
Interfacing the Serial / RS232 Port,
, Craig Peacock, August 2001.
IEEE 1284 Parallel Port
Parallel Port Central
, Jan Axelson.
Parallel Port Background
, Warp Nine Engineering.
IEEE 1284 - Updating the PC Parallel Port
, National Instruments.
Interfacing the Standard Parallel Port
, Craig Peacock, August 2001.
IDE hard drive controller
AT Attachment with Packet Interface - 6 (working draft)
, ANSI, December 2001.
Programming Interface for Bus Master IDE Controller
, Brad Hosler, Intel, May 1994.
The Guide to ATA/ATAPI documentation
, Constantine Sapuntzakis, January 2002.