当前课程知识点:操作系统 > 第二讲 实验零 操作系统实验环境准备 > 2.1 前言和国内外现状 > 2.1 前言和国内外现状
各位同学 大家好
我是陈渝 清华大学计算机系的老师
我和向勇老师负责给大家上操作系统这门课
我主要负责操作系统实验这个环节
为了完成实验我们需要做一些准备工作
第一个要了解大致做哪些实验内容这是一个
第二个你要知道为了完成实验
你要搭好一个实验环境
所以说我们这两部分内容
分别给大家展开来做一个介绍
先看实验内容这块
实验内容包含了以下几个部分
第一部分是关于前言部分
我们了解一下为什么要上操作系统实验
对于操作系统课而言其实主要包含了两部分内容
一部分是操作系统原理 另一部分是操作系统实验
原理主要介绍了操作系统很多基本的概念 算法
基本的一些操作系统知识
操作系统实验主要是讲解怎么用我们C语言
或者在硬件环境或者模拟环境中
能把操作系统给实现出来
或者说能把操作系统改进完善
使它能够正常工作
这两者之间貌似差别比较大
但是其实相互之间起了一个很重要互补作用
为什么这么说呢 因为大家可以看一看
很多原理上一些内容 相对来说比较分散比较独立
但是这些分散独立的概念
其实都是我们操作系统实验中
重要的组成部分 这是一个
第二个这一组成部分是有一个紧密的联系的
而这个联系性只有通过做实验才能有更深入体会
这是我们觉得为什么要去
做操作系统实验的很重要的目标
第二个很多操作系统概念上
讲的一些基本的术语算法等等
那么它和我们具体的操作系统实现
什么样对应关系
它们之间有什么样的联系
这个也是通过上原理课做实验才能有更深刻的体会
所以我们认为操作系统课程它是一个科学
和工程相结合的一门课
需要通过原理的学习 通过实验的实践
才能更好更深入掌握操作系统基本的知识
这是我们认为为什么要上
操作系统实验的一个很重要的目标
另一方面我们强调了
因为操作系统都知道是一个软件
它需要去编程
那我们需要大家在实际编程中能深刻的体会到
操作系统到底是怎么完成它的功能
怎么来展现它具体的概念算法
我们认为操作系统实验需要强调这个实验环节
对于我们同学来完成这个实验需要注意几点
第一个是需要注意 你要理解整个系统
这个系统包含了软件硬件两方面知识
因为操作系统只要控制硬件
所以你要站在一个全局的角度来理解问题
第二个循序渐进完善功能
为什么这么说呢
因为我们知道操作系统虽然是一个大型软件
但是它也不是一天建成的
它也是一点点像搭积木一样 形成了从一小块
一个砖头两个砖头最后形成了一座房子
那么这个搭积木的过程我们希望同学能够掌握
知道怎么从零开始
能够完成出一个完整的小型的OS
这是我们希望同学能够去了解和掌握的
第三个要懂得阅读代码和能够去改进它
这点其实是我们做实验中有一个比较深入体会
为什么这样说呢
其实大家在完成后续的实验会发现
这个实验你花了很大一部分时间是在阅读代码
并不是在编程 而是在理解和阅读代码
只有很好的通过阅读代码把操作系统的框架
它的实验细节掌握之后
你再去完成老师给你布置那些实验内容
你会发觉还比较容易
所以你发现你完成代码量并不大
但是你为此要把这个代码读懂
花的时间是很多
特别是它和我们一般的应用程序是有很大的区别
它需要有很多跟我们硬件打交道
它的编写方式 它的处理方式
都和我们通常应用程序有很大区别 这是一方面
另一方面当你能够掌握这个基本OS功能之后
我们还可以对它进行扩展 做一些创新性实验
这也是很鼓励一些觉得自己能力还不错
你还需要进一步挑战
你可以去在这方面有充分余地去发挥你的能力
看看你能不能在这个操作系统之上完成新的功能
来增强操作系统能力
我们后面会跟大家做介绍
我们同学这方面做的工作
第二方面我们看看国外发展的情况
首先是MIT我们清华大学在操作系统教学改革上面
充分借鉴了MIT这些教学思路
他们很强调超系统课工程实践能力
所以他们设计了两个OS
一个叫XV6一个JOS希望同学能够阅读XV6
然后来改进完善JOS这么一个操作系统
这是他们的一个思路 哈佛也是一样有OS161
以及后面的哥伦比亚 伯克利 斯坦福等等
他们都有各自的操作系统实践的环节
强调学生在理解原理的同时
能够通过实验来加强对操作系统
一些具体细节的掌握和理解
从而对操作系统有个更全面和深入的体会
在国内也是一样 我们是基于国外的一些先进的一些经验
比如JOS XV6 OS16以及Linux
来设计一个小型的OS叫ucore
我们现在做的实验就是阅读ucore
然后对ucore进行改进和扩展
这是一方面 其他比方说像北大
国防科大等等 他们有不同思路
有的是基于一个小型的OS 比如说像北大
我们了解到他是基于MIT一些实验环节
像国防科大 浙大等等
他们更强调一些基于Linux来做相应的实现
相对而言Linux更加复杂功能更强大
掌握它花的代价相对要大一些
还有上海交大 南开 基于国外的
Minix Nachos等等 来做相关的实验
当然这些信息还有待进一步更新
我们是目前了解到一些情况
从中可以看出来国内的大学
特别是一些对操作系统这门课很重视的一些学校
他们还是把很多精力 除了放在原理课教学之上
也放在了这个实验环节 所以我们希望
同学们也可以看到通过实验 其实是有很好的
能够进一步掌握操作系统这么一个机会
其实除了一些教学OS之外 还有一些实际的OS
前面已经讲到有Linux
Solaris Windows Rtems eCos等等
这也是一些实际存在的一些OS
它们也是在某些学校和某些领域得到学习和掌握
其实没有什么特别区别
我觉得大家根据各自的特点
可以选择不同的OS来作为你们实验的目标
甚至还有同学说 一个OS都没有
我们从零开始来实现OS 这也是有可能的
我们看到有些挑战
就是有些愿意接受挑战的同学
他自身对计算机理解很充分的话
我们也不觉得不能够从零开始实现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