OS_02_lab_prepare
02-lab-prepare
实验目标
- 原理知识的补充和完善
- 操作系统设计的全局观
- 适合不同层次学生的需求
包括:
- 外设:I/O管理、中断管理
- 内存:虚拟内存管理、页表、缺页处理、页替换算法
- CPU:进程管理、调度器算法
- 并发:信号量实现、同步互斥应用
- 存储:基于链表/FAT的文件系统
实验概述
- OS启动、中断与设备管理
- 物理内存管理
- 虚拟内存管理
- 内核线程管理
- 用户进程管理
- 处理器调度
- 同步互斥
- 文件系统
环境搭建
实验环境:vitualbox + ubuntu 1404 x86
源码阅读工具:understand(Windows)
源码文档自动生成工具:Doxygen
代码比较工具:diff、meld
编译环境:gcc, make, Binutils
真实/虚拟运行环境:X86或Qemu
调试工具:Qemu+或GDB
IDE工具:Vscode
ubuntu
https://pan.baidu.com/s/11zjRK
understand
百度云盘
doxygen
sudo apt-get install doxygen |
build-essential
sudo apt-get install build-essential |
Qemu
sudo apt-get install qemu-system |
硬件介绍
Intel 80386
四种运行模式
- 实模式 16位,物理内存空间不超过1M,没有4GB的内存管理能力
- 保护模式 32位,分页分段机制->0~4个ring,更大的寻址空间
- SMM模式
- 虚拟8086模式
内存构架
- 地址是访问内存空间的索引
- 32bit处理器->2^32=4G字节的寻址空间
- 物理内存地址空间是处理器提交到总线上用于访问计算机系统中内存和外设的最终地址,一个计算机系统中只有一个物理地址空间;
- 线性地址空间是虚拟管理下每个运行的程序能访问的地址空间,每个程序都都认为自己独享这个空间,程序之间相互隔离;
- 逻辑地址空间是应用程序直接使用的地址空间
段机制启动、页机制未启动:逻辑地址->段机制处理->线性地址=物理地址
段机制和页机制都启动:逻辑地址->段机制处理->线性地址->页机制处理->物理地址
可以看到段机制和页机制是映射关系;
寄存器
-
通用寄存器
EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP
-
段寄存器
CS、DS、ES、SS、FS、GS
-
指令指针寄存器
EIP
-
标志寄存器
EFLAGS(IF,…)
-
控制寄存器
-
系统地址寄存器,调试寄存器,测试寄存器
编程技巧
面向对象编程
// kern/mm/pmm.h |
在lab2中,存在一个结构体pmm_manager
内存管理器,它定义了很多函数指针,提供了函数接口。当有不同的管理方法,可以满足不同的实现方法;
数据结构
// 通用双向链表结构 |
双向链表数据结构套用Page;
当然还会有元素访问、删除、插入的方法;
实验的一些tips
Meld
Meld工具来比较文件的不同;
meld /lab1 /lab2 |
GDB
make debug |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 K1ose's Space!