当前课程知识点:操作系统 > 第一讲 操作系统概述 > 1.2 教学安排 > 视频
接下来 我们对这学期的教学内容
做一个整体上的介绍
在这里包括我们要讲的内容
我们要做的实验内容
和课程设计的内容
操作系统课
涉及到计算机系统当中资源管理
所以我们围绕着操作系统的实现
来介绍相关的内容
主要分成这样几个部分
第一个操作系统软件的结构
任何一个软件在设计的时候
和在实现的时候它都有自己结构特点
那对于操作系统来说
它有什么样的结构特点
是我们在这里需要来讨论的问题
第二个是中断与系统调用
这说的是操作系统这个软件
它和外界打交道的这些接口
中断是操作系统和硬件打交道的接口
操作系统在服务过程当中
外部如果有设备有请求
比如说你敲键盘网络有数据包来了
这个时候操作系统如何对它进行响应
那么这是中断里要讨论的内容
硬件上已经有了一些机制
能够对外边做一些响应
但是这个时候它只是做了其中第一步
比如说你敲键盘的时候
这个时候的硬件机构
已经能把数据存到相应缓冲区里头
但是缓冲区如何到应用程序里
那是操作系统需要解决的问题
而系统调用是操作系统
对上层应用提供的服务接口
也就是说上层应用
要想利用操作系统提供的服务
来实现自己的功能
必须使用系统调用
在这里头系统调用
如何从用户态的应用程序里头
获取用户想使用服务的类型
和相应的输入数据
都必须从系统调用接口来
这里系统调用的介绍
如何让用户的输入能够到系统里来
系统处理完的结果如何能回到用户态
而接下来的这几个部分是
我们操作系统要管理的资源
第一个是内存资源
也就是说在计算机系统当中有内存
随机访问存储器
这部分存储能力
会有很多应用程序要使用
那如何协调各个应用对内存的使用
可能会是说有的应用
它需要大量的内存空间来存储数据
有的应用需要的不多
那么这个时候对于我们操作系统来说
需要要么是应用程序告诉你
我需要多少
要么是你在使用过程中动态进行调节
而这种调节和内存分配和回收
是我们操作系统要做的事情
接下来一个是操作系统需要管理
用户程序的执行过程
也就是说任何一个程序在执行
它首先需要系统给它分配
它执行所需要的资源
比如说CPU 内存和相应访问的
一些外部设备和数据资源
有了这些资源之后程序开始运行
在运行过程中这些执行的状态
也是在不断变化的过程当中
它可能会占用CPU执行指令
也可能会由于等待用户输入
而进入暂停状态
这些状态的维护
就是我们这里所说进程和线程
操作系统需要维护每一个
正在执行的程序它的状态
以便于在它们执行结束之后
能够回收相应的资源
这是进程管理需要讨论的问题
接下来一个是处理机调度
处理机调度是指说我们有多个进程
在计算机系统当中交替运行
那么如果说你只有一个CPU
或者说你的应用进程数目
是大于CPU的数目
做不到每一个进程
有一个完全独占的CPU来使用
那么这个时候
大家是交替使用CPU来执行指令
这种交替就需要有一个调度
到底一个正在执行的进程
到什么时候让出CPU使用权
下一个选择又是谁
这是我们调度算法要进行解决的问题
接下来一个是进程间通讯
或者叫同步互斥
这里指的是我们任何一个应用进程
它在执行过程当中
都不会是自己一个
在那封闭着进行执行
它不会跟外界做任何交道
我们计算机上的程序
它所做到最大好处是
由于用户输入的不同
那我给出不同的处理结果
而这个处理是可以重复进行的
所以我们在这里才会
有计算机程序来实现自动化处理
那为了实现这个计算机上的
各个应用进程之间
它们是需要有一些通讯交流的
这种交流就是我们这里的同步互斥
也就是说两个进程之间
要想进行通讯
那这个通讯是在
操作系统控制下完成的
操作系统控制下
如何让进程间的信息交流
做的流畅安全
这是我们这部分要讨论的
而下一个文件系统是说
计算机系统当中
数据大到一定程度之后
这个时候就不能简单
我整一张线性表来存这些数据
我们必须把这个数据管理起来
做持久性的保存
而这一部分大到一定程度的时候
就变成系统了
在这个系统中
我们如何来组织这些文件
以便于方便用户的读 写和查找
这也是操作系统也解决问题之一
最后一个是I/O子系统
计算机系统当中CPU 内存
这两个部分种类相对来说比较少
而对于它所能够
涉及的外设会有很多种
那据一种不完全的统计
我们能够连到PC机上的外部设备的
种类应该是上万种
这些差异非常大的这些外部设备
对于计算机系统来说如何连上来
实际上是一个很大的挑战
对于这部分是由操作系统里的I/O子系统
来负责管理的
我们需要把这些差异非常大的
这些设备连到同一个系统上来
并且都能对它们进行高效的控制
比如说我们键盘的速度是很慢的
这个时候你两只手一起敲
你一秒钟也就最多敲几十个按键
而如果说我们用的网络接口是10G的
那这个时候它数据量
在一秒钟就是10GBPS
两者之间的差异是非常大的
操作系统需要在里头提供一个
尽可能统一的接口来管理
尽可能范围大的这些外部设备
从这个角度讲我们这学期
操作系统涉及到的内容是非常广泛的
所以我们这门操作系统课
也是一种介绍性的课程
对于每一个部分深入介绍下去
都会是一个非常专门的
后续课程讨论内容
而围绕着教学内容的安排
我们每一段教学内容后面
都有相应的课堂练习
这是对大家掌握知识情况的了解
和成绩评定的一部分内容
另一个内容是实验
实验基本上围绕着我们前面
教学内容形成八个实验
这里的实验0
是我们教学实验环境的准备
我们在这门课程里头不会去讲
如何使用Linux 如何使用Windows
但是你要想
在已有操作系统上来做我们实验
那你必须知道Windows Linux如何使用
那这是建立实验环境
希望大家下去之后能够看相关的资料
尽可能熟练使用相应的系统
而下面这八个实验基本上
是围绕着我们前面内容
起动和中断
对应着我们中断和系统调用
而内存管理到我们这里分成两个实验
物理内存和虚拟存储管理
物理内存管理是
负责物理存储的分配和回收
而虚拟存储实际上相当于
我们把物理存储的存储能力
抽象成一个虚拟的存储界面
让用户在使用的时候
一种明显特征是说
我可以用到比物理内存更大的
一个存储环境
而对于进程和线程
在我们这里分成内核线程管理
和用户进程管理
这两个部分 接下来分别是
处理机调度对应着 实验六
而同步互斥对应 实验七
文件系统对应着 实验八
这样我们所有的这些上课内容
主要内容在这里
都有相应的实验内容和它对应起来
同时我们在这里做的实验
它是一个相互关联的整体
我们在一开始的时候
就给大家一个实验基准代码
然后后面你就往上添你的功能
你每添上一个功能的时候
你的实验系统它处理能力
就比原来会强一些
那你在后续实验的时候
有可能会用到你前面实现的功能
所以在这大家在做实验的时候
一定不要说我在前面做实验的时候
能通过测试就算完成任务了
有可能在后面做实验的时候
会发现前面的实验的代码会有问题
所以在这对前面的实验
要认真仔细去做
可以方便你后边加快你的实验进度
好 这是实验和练习内容
对于学有余力的
我们可以安排课程设计
目前阶段我们课程设计
还是围绕着ucore来进行
大家做实验的环境叫ucore
我们同时维护了一个
它的扩展版本叫ucore+
在那里头我们现在的实验环境
是在X86环境下运行
但实际上我们的ucore+可以在X86 ARM LIPS
等几种不同的CPU平台上运行
并且可以在多种硬件平台上
能直接跑起来
我们目前这个改进和完善工作
还在继续进行
我们现在工作重点是它的模块化
我们已经可以在一些平台上
支持ucore可加载内核模块
那实际上在这里我们希望
能够把这些工作做的更完善
最极致的目标是我们希望和Linux的
内核可加载模块的接口兼容
以至于Linux可加载模块
可以在我们ucore上不用修改
就直接能够编译运行
这样一来我们的ucore
就可以有更多算法
可以加在上头去了
应用程序 如果支持动态链接的话
你可以在里面利用的其它资源也会变得很多
目前我们已经能够在X86-32上
能够有很好的支持
在ARM和X86-64上
也有一些基本的支持了
我们希望继续有同学来完善这个
对于我们现在已经实现的
这些ucore内核功能
我们希望能够对它
进行模块化的改造
文件系统 调度算法
内存置换算法和设备驱动
现在这里头文件系统
处理机调度算法和置换算法
都已经有了一些基本的
模块化的实现
如果说我们这个工作继续做完善了
以后大家做的操作系统的实验
就可能是让大家
我给你一个已经实现的模块
让你去实现另一个完整的模块
这样的话就比我们目前
往里头去添代码片断
能够有更好的训练效果
同时你是一整块有参考
那这个时候它的难度也会有所下降
如果说这些内容你都觉得没有兴趣
那么我们在这里还有更进一步的
我们希望能在真实的硬件环境下去
运用我们的ucore+
现在我们的ucore+
已经能在树莓派上运行了
树莓派是一款开源的硬件平台
它在这里支持有线的网卡USB
和HDMI视频接口
那在上头能跑标准的Linux
我们的ucore最基本的版本
也能跑起来了
但是对它的HDMI接口支持并不是很好
我们只能把它的HDMI接口
当一个简单的最基本的VGA功能来使用
我们希望能够在上面做更完善的支持
右边是别人已经做成的一个
基于树莓派的集群系统
那这是这个系统的作者和他的结果
我们希望有同学后面
能给出来你的结果
然后再有一个这是2014年英特尔新出的
一个小的SOC
这是Edison
我们在前边也在Edison早期版本上
运行过我们的ucore
但是现在这个Edison上面
我们还没有做到这件事情
这个Edison相当于十多年前
我们一台PC机的处理能力
目前这个核心的部件上有WIFI 有蓝牙
400M的双核的CPU
并且有一个100M的MCU
与此同时它还有1G的内存和4G的FLASH
所有这些都是处理能力很强的
我们希望在上面能跑起我们的ucore
并且能够用它来做一些
更有创意性的应用
如果这些问题都不满足你的兴趣
或者说你有更好的建议
我们也支持自选的
操作系统课程设计的题目
如果你有这个兴趣你可以告诉老师
你也可以从我们WiKi上
看到往年做这些课程设计的同学
他们给出来的结果
我们希望到最后做出来之后
你提供你的报告和你的视频
我们来看做出来最后的结果
希望这些介绍有利于大家
掌握我们在操作系统课里到底讲什么
大家能学到些什么
-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