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