当前课程知识点:操作系统 > 第二讲 实验零 操作系统实验环境准备 > 2.2 OS实验目标 > 2.2 OS实验目标
那上操作系统实验课的目的是什么呢
最主要的目标是在我们操作系统原理
和操作系统设计实现上面建一座桥梁
能够辅助同学能够更好深刻理解
操作系统基本概念怎么产生的
怎么具体实现的 这是一个很重要目标
另一方面我们希望同学通过的操作系统实验
能够对操作系统设计有个全局的感觉 全局观
这一点也是很重要的一个特点
因为操作系统相对而言
在大学期间是同学能够碰到一个
相对比较大型比较复杂的软件系统
那么你怎么能够很好在一个全局的角度把握它
能够对它进行改进扩展分析理解等等
这对我们同学提供新的挑战
这也是一个能力的锻炼和培养
第三方面其实我们也知道操作系统
它的实现相对来说还是比较复杂的
并不是说我们每个同学
都需要去能够对它进行很深入的理解
然后能够对它进行改进扩展
甚至从头实现一个
其实提出了一个很高的要求
我们其实也知道同学一般会分三等
针对不同的同学我们其实应该有不同方法
所以说我们强调什么呢 差异化教学
那差异化教学体验在什么地方呢
对于高水平 中等水平和较弱水平的同学
我们分别有不同的要求
对于高水平的同学在他完成基本的操作系统实验情况下
我们希望他去做创新的实验
甚至挑战一些没有尝试过的一些东西
比如说举个例子
现在的ucore它没有去对多核处理器有支持
我们有没有同学可以挑战一下
实现一个对多核处理器支持的这么一个ucore操作系统
这是一个可以去尝试一个工作
第二个对于中等同学来说
我们最基本的要求是什么呢
就是能够完成我们布置的基本实验
你完成了基本实验 其实就基本说
能够把我们操作系统原理上面的一些知识点对应起来
在很大程度上体现了
我们操作系统原理课讲的知识点
那么你能够知道知识点怎么回事 具体实现怎么回事
通过这样的话就可以使得同学
对于操作系统理解会更加深刻
对于比较弱的同学 我们希望他能够理解代码
他也许编程还确实无法完成我们的实验
但是我们也提供了实验的答案
所以说通过理解这个代码
他能够知道原来操作系统
是这么来完成这么一个功能
比如说我们后面讲到的内存管理
文件系统进程调度等等 这些他能把代码读懂
能够运行起来 能够调试分析它
也可以很好地去把我们原理
和我们实验给对接起来
这是我们说对于相对来说比较弱的同学
他的要求 这也是对差异化教学的一种尝试
为此我们就要设计相应的操作系统实验
我们主要思路是基于一些大量的开源软件
来从各个层面来使的同学们更好掌握OS
首先你的实验环境是什么
就是我们这里面由于大量的工具是基于Linux
所以说我们希望同学能够在Linux环境中
来开展实验的过程 这是一个
第二个你需要去理解代码
理解代码有很多代码有这样的工具
比如说我们讲的Eclipse understand
这些工具都可以便于你去从一个细节
或者从一个全局的角度来看这个代码
还有就是生成一些自动文档
也是便于理解和分析的 比如Doxygen
你能够把你这个代码能够编译成
最后能够执行的机器码 你需要一些编译器
GCC Make 等等一系列辅助工作
来帮你来把你写代码变成最终的OS
一个可以执行的执行码
那你编好了OS之后你要运行
那运行在什么地方呢 我们有两种
一种是说我们可以跑在真实的机器里面
比如说我们这里面ucore针对是32个X86机器
我们可以用真的机器来跑
当然这相对来说比较麻烦一点
我们也可以基于模拟器比如说QEMU
它是一个软件 它可以模拟出一台X86的机器
这个上面去跑我们编写的OS
但是你在编写的过程中还可能出错
出错我们需要调试 我们有调试工具
比如说基于GDB和QEMU来进行调试
而且我们还可以基于集成开发环境
比如Eclipse的CDT来进行编辑
分析 运行 调试 整个这个环节的工作
更加简化 大家在完成实验中的难度
这是我们提供一系列工具
所有这些工具都在Linux里有很好的支持
也有同学尝试在Windows里跑 也有可能
配置的环境相对来说更加复杂一些
所以我们这里面鼓励大家基于Linux
来进行整个实验环境的建设
和最后的实验过程的完成
我们可以看看实验内容里面主要包含哪方面
跟我们操作系统课的知识点是对应的
我们一开始会讲到中断 外设
你这个操作系统针对的机器
针对一台计算机来进行管理和处理
那么这里面会涉及到相应的IO管理和中断管理
这是一块 这是跟外设相关的
第二块跟我们计算机内存相关
内存管理 它怎么有效管理内存
来放置我们的代码和我们的数据
第三个跟我们CPU相关
那怎么有效的利用CPU来完成相应的工作
需要分时 把这个CPU的时间
分给不同的程序去运行完成特定的工作
这也是我们操作系统很重要一个管理过程
还有就是涉及到当多个程序在一起跑的时候
它们有一些并发同步的一些管理
这个也需要我们操作系统来保证
才能使得整个程序正常工作
否则就会出现类似我们说的
后面我们会讲到死锁等等一系列问题
还有最后你这些数据 你这些代码需要永久存储
需要长期存储的环境 那这个环境是什么呢
我们说的这个 我们一般都知道有个硬盘 磁盘等等
但是操作系统为了能便于我们用户应用程序
放置它的数据和代码 我们设计了文件系统
从而更简单完成对操作系统管理
这些部分都是覆盖在我们8个实验中
我们会在实验过程中来体会讲到这些原理
具体在OS是怎么实现的
这是我们希望做到的
那为了减少这个代码量其实大家都知道
像比如说Linux Windows那是上千万行的代码
太大了 不要说学生了 就是一个资深的工程师
也很难把它全部掌握到
所以我们希望能够减少代码规模量
使得学生在有限时间内
比如一个学期能够去掌握和理解这个代码
我们理解是说大概控制在一万行代码量之内
从Lab1到Lab8 Lab1可能只有几百行代码
到Lab8大约控制在一万行代码以内
从而可以实现对OS的更深入的理解
同时我们提供的相应的讲义和文档来帮助同学
甚至我们答案也提供大家
可以更好的去理解和掌握实验是怎么完成的
-0.1 Piazza讨论区
--html
-0.2 在线实验平台
--实验平台使用帮助
--平台使用帮助
-0.2在线实验平台
--Raw HTML
-1.1 课程概述
--视频
-第一讲 操作系统概述--练习
-1.2 教学安排
--视频
-1.3 什么是操作系统
--Video
-1.4 为什么学习操作系统,如何学习操作系统
--Video
-1.5 操作系统实例
--视频
-1.6 操作系统的演变
--视频
-1.7 操作系统结构
--视频
-2.1 前言和国内外现状
-2.2 OS实验目标
-2.3 8个OS实验概述
-2.4 实验环境搭建
-2.5 x86-32硬件介绍
-2.6 ucore部分编程技巧
-2.7 演示实验操作过程
--Q6
--Q7
--Q10
-3.1 BIOS
--3.1 BIOS
-3.2 系统启动流程
-3.3 中断、异常和系统调用比较
-第三讲 启动、中断、异常和系统调用--3.3 中断、异常和系统调用比较
-3.4 系统调用
--3.4 系统调用
-第三讲 启动、中断、异常和系统调用--3.4 系统调用
-3.5 系统调用示例
-3.6 ucore+系统调用代码
-4.1 启动顺序
--4.1 启动顺序
-4.2 C函数调用的实现
-4.3 GCC内联汇编
-4.4 x86中断处理过程
-4.5 练习一
--4.5 练习一
-4.6 练习二
--4.6 练习二
-4.7 练习三
--4.7 练习三
-4.8 练习四 练习五
-4.9 练习六
--4.9 练习六
-5.1 计算机体系结构和内存层次
-5.2 地址空间和地址生成
-5.3 连续内存分配
-5.4 碎片整理
--5.4 碎片整理
-5.5 伙伴系统
--5.5 伙伴系统
-第五讲 物理内存管理: 连续内存分配--5.6 练习
-6.1 非连续内存分配的需求背景
-6.2 段式存储管理
-- 6.2 段式存储管理
-6.3 页式存储管理
-6.4 页表概述
--6.4 页表概述
-6.5 快表和多级页表
-6.6 反置页表
--6.6 反置页表
-6.7 段页式存储管理
-第六讲 物理内存管理: 非连续内存分配--6.8 练习
-7.1 了解x86保护模式中的特权级
-第七讲 实验二 物理内存管理--7.1 了解x86保护模式中的特权级
-7.2 了解特权级切换过程
-第七讲 实验二 物理内存管理--7.2 了解特权级切换过程
-7.3 了解段/页表
-第七讲 实验二 物理内存管理--7.3 了解段/页表
-7.4 了解UCORE建立段/页表
-第七讲 实验二 物理内存管理--7.4 了解UCORE建立段/页表
-7.5 演示lab2实验环节
-8.1 虚拟存储的需求背景
-8.2 覆盖和交换
-8.3 局部性原理
-8.4 虚拟存储概念
-8.5 虚拟页式存储
-8.6 缺页异常
--8.6 缺页异常
-9.1 页面置换算法的概念
-9.2 最优算法、先进先出算法和最近最久未使用算法
-第九讲 页面置换算法--9.2 最优算法、先进先出算法和最近最久未使用算法
-9.3 时钟置换算法和最不常用算法
-第九讲 页面置换算法--9.3 时钟置换算法和最不常用算法
-9.4 Belady现象和局部置换算法比较
-第九讲 页面置换算法--9.4 Belady现象和局部置换算法比较
-9.5 工作集置换算法
-第九讲 页面置换算法--9.5 工作集置换算法
-9.6 缺页率置换算法
-第九讲 页面置换算法--9.6 缺页率置换算法
-9.7 抖动和负载控制
-10.1 实验目标:虚存管理
-第十讲 实验三 虚拟内存管理--10.1 实验目标:虚存管理
-10.2 回顾历史和了解当下
-第十讲 实验三 虚拟内存管理--10.2 回顾历史和了解当下
-10.3 处理流程、关键数据结构和功能
-第十讲 实验三 虚拟内存管理--10.3 处理流程、关键数据结构和功能
-10.4 页访问异常
-第十讲 实验三 虚拟内存管理--10.4 页访问异常
-10.5 页换入换出机制
-第十讲 实验三 虚拟内存管理--10.5 页换入换出机制
-11.1 进程的概念
-第十一讲 进程和线程--11.1 进程的概念
-11.2 进程控制块
-第十一讲 进程和线程--11.2 进程控制块
-11.3 进程状态
-第十一讲 进程和线程--11.3 进程状态
-11.4 三状态进程模型
-11.5 挂起进程模型
-第十一讲 进程和线程--11.5 挂起进程模型
-11.6 线程的概念
-第十一讲 进程和线程--11.6 线程的概念
-11.7 用户线程
-第十一讲 进程和线程--11.7 用户线程
-11.8 内核线程
-第十一讲 进程和线程--11.8 内核线程
-12.1 进程切换
-第十二讲 进程控制--12.1 进程切换
-12.2 进程创建
-第十二讲 进程控制--12.2 进程创建
-12.3 进程加载
-第十二讲 进程控制--12.3 进程加载
-12.4 进程等待与退出
-第十二讲 进程控制--12.4 进程等待与退出
-13.1 总体介绍
-13.2 关键数据结构
-13.3 执行流程
-13.4 实际操作
-14.1 总体介绍
-14.2 进程的内存布局
-14.3 执行ELF格式的二进制代码-do_execve的实现
--14.3 执行ELF格式的二进制代码-do_execve的实现
-14.4 执行ELF格式的二进制代码-load_icode的实现
--14.4 执行ELF格式的二进制代码-load_icode的实现
-14.5 进程复制
-14.6 内存管理的copy-on-write机制
-15.1 处理机调度概念
-第十五讲 处理机调度--15.1 处理机调度概念
-15.2 调度准则
-15.3 先来先服务、短进程优先和最高响应比优先调度算法
--15.3 先来先服务、短进程优先和最高响应比优先调度算法
-第十五讲 处理机调度--15.3 先来先服务、短进程优先和最高响应比优先调度算法
-15.4 时间片轮转、多级反馈队列、公平共享调度算法和ucore调度框架
--15.4 时间片轮转、多级反馈队列、公平共享调度算法和ucore调度框架
-第十五讲 处理机调度--15.4 时间片轮转、多级反馈队列、公平共享调度算法和uc
-15.5 实时调度和多处理器调度
-第十五讲 处理机调度--15.5 实时调度和多处理器调度
-15.6 优先级反置
-第十五讲 处理机调度--15.6 优先级反置
-16.1 总体介绍和调度过程
-16.2 调度算法支撑框架
-16.3 时间片轮转调度算法
-16.4 Stride调度算法
-17.1 背景
--17.1 背景
-17.2 现实生活中的同步问题
-第十七讲 同步互斥--17.2 现实生活中的同步问题
-17.3 临界区和禁用硬件中断同步方法
-第十七讲 同步互斥--17.3 临界区和禁用硬件中断同步方法
-17.4 基于软件的同步方法
-第十七讲 同步互斥--17.4 基于软件的同步方法
-17.5 高级抽象的同步方法
-第十七讲 同步互斥--17.5 高级抽象的同步方法
-18.1 信号量
--18.1 信号量
-第十八讲 信号量与管程--18.1 信号量
-18.2 信号量使用
-第十八讲 信号量与管程--18.2 信号量使用
-18.3 管程
--18.3 管程
-第十八讲 信号量与管程--18.3 管程
-18.4 哲学家就餐问题
-18.5 读者-写者问题
-19.1 总体介绍
-19.2 底层支撑
-第十九讲 实验七 同步互斥--19.2 底层支撑
-19.3 信号量设计实现
-第十九讲 实验七 同步互斥--19.3 信号量设计实现
-19.4 管程和条件变量设计实现
-第十九讲 实验七 同步互斥--19.4 管程和条件变量设计实现
-19.5 哲学家就餐问题
-20.1 死锁概念
-第二十讲 死锁和进程通信--20.1 死锁概念
-20.2 死锁处理方法
-第二十讲 死锁和进程通信--20.2 死锁处理方法
-20.3 银行家算法
-第二十讲 死锁和进程通信--20.3 银行家算法
-20.4 死锁检测
-第二十讲 死锁和进程通信--20.4 死锁检测
-20.5 进程通信概念
-第二十讲 死锁和进程通信--20.5 进程通信概念
-20.6 信号和管道
-第二十讲 死锁和进程通信--20.6 信号和管道
-20.7 消息队列和共享内存
-第二十讲 死锁和进程通信--20.7 消息队列和共享内存
-21.1 文件系统和文件
-第二十一讲 文件系统--21.1 文件系统和文件
-21.2 文件描述符
-第二十一讲 文件系统--21.2 文件描述符
-21.3 目录、文件别名和文件系统种类
-第二十一讲 文件系统--21.3 目录、文件别名和文件系统种类
-21.4 虚拟文件系统
-第二十一讲 文件系统--21.4 虚拟文件系统
-21.5 文件缓存和打开文件
-第二十一讲 文件系统--21.5 文件缓存和打开文件
-21.6 文件分配
-第二十一讲 文件系统--21.6 文件分配
-21.7 空闲空间管理和冗余磁盘阵列RAID
-第二十一讲 文件系统--21.7 空闲空间管理和冗余磁盘阵列RAID
-22.1 总体介绍
-第二十二讲 实验八 文件系统--22.1 总体介绍
-22.2 ucore 文件系统架构
-第二十二讲 实验八 文件系统--22.2 ucore 文件系统架构
-22.3 Simple File System分析
-第二十二讲 实验八 文件系统--22.3 Simple File System分析
-22.4 Virtual File System分析
-第二十二讲 实验八 文件系统--22.4 Virtual File System分
-22.5 I/O设备接口分析
-第二十二讲 实验八 文件系统--22.5 I/O设备接口分析
-22.6 执行流程分析
-23.1 I/O特点
--视频
-第二十三讲 I/O子系统--23.1 I/O特点
-23.2 I/O结构
--816C80A0F5E3B8809C33DC5901307461
-第二十三讲 I/O子系统--23.2 I/O结构
-23.3 I/O数据传输
--C58221E14388B9DB9C33DC5901307461
-第二十三讲 I/O子系统--23.3 I/O数据传输
-23.4 磁盘调度
--567A3F1FCBFB3F4C9C33DC5901307461
-第二十三讲 I/O子系统--23.4 磁盘调度
-23.5 磁盘缓存
--C327536B80D25CE79C33DC5901307461
-第二十三讲 I/O子系统--23.5 磁盘缓存
-html
--html