当前课程知识点:操作系统 > 第一讲 操作系统概述 > 1.7 操作系统结构 > 视频
接下来我们来讲操作系统的结构
任何一个软件它都会有自己的结构
操作系统也不例外
操作系统在发展的过程当中
它的结构实际上有了非常大的变化
我们从历史上发展的过程来看
操作系统可能采取的结构
和每种结构它的特征
最早的时候实际上
操作系统它是一种简单的结构
对下控制硬件
对上提供用户应用程序所需要的服务
中间的功能实际上实现的很简单
我们在BIOS里面有一层
对硬件进行管理的驱动程序
操作系统内部它把这一层
做了更进一步的完善
这种完善形成了系统里面的驱动
然后有一些常驻的服务系统程序
然后上面是应用程序
应用程序有可以使用操作系统提供的
设备驱动服务
也可能直接使用
底下BIOS提供的系统服务
在这个里面它没有进行模块化的划分
实现的时候操作系统的代码
也主要是汇编来写的
基于这种情况操作系统
它是从一个平台
操作系统只能用在这个平台上
到其它的品平台上不能使用的
所以这样的话
每个操作系统都是只针对
特定硬件平台来写的操作系统
在这个阶段我们有很多种操作系统
在PC机上主要是DOS系统
它只能用在X86的系统上
第二种结构实际上
随着Unix系统不断发展完善
形成的这就是分层结构
在分层结构当中
我们会把操作系统功能分成若干层
最底下一层是硬件
最上面一层是用户接口
在中间实际上
我们按照功能的不断的丰富
不断的完善把它分成了N层
每一层只使用下一层提供的服务
这种分层结构
使得各个层依赖关系得到一定的限制
使得我的可靠性能够进一步提高
这个里面分层结构很大贡献
在于它把可移植性
作为操作系统的一个重要的目标
以前的话我们是说
对于一个特定的硬件平台
我要全新对它写一套操作系统
现在我只需要
把整个操作系统代码分成两部分
一部分与硬件平台无关的部分
这一部分我们用高级语言来实现
另外一部分是跟特定硬件平台
密切相关的部分
这一部分我们仍然
使用汇编程序来实现
做了这种划分以后操作系统的移植
只需要改汇编的部分
我们在这里说到Unix系统和C语言
我们前面说Unix系统的时候已经
见过这两位Thompson和 Ritchie
他们实际在Unix系统发展过程当中
他提出来的C语言
C语言也会由于Unix系统的发展
而得到广泛的使用
最后他们得了图灵奖
这是第二种结构
我们所使用ucore教学操作系统
它的结构基本是采用分层的结构
我们在这里要学的内容
是划红线的这几个部分
我们基本涉及到
从最底层的中断 系统加载
一直到操作系统内部
各个核心模块对上提供的服务
和系统服务里的命令行
这是分层结构
分层结构随着层次的增加
依赖关系这种层次越来越复杂
复杂的结果是
操作系统内核里面的东西越来越多
效率越来越下降
在这个基础上微内核结构
因为分层结构的层次多
所带来的效率低的一种做法
我们希望实际上是
把一些操作系统内核提供的服务
放到用户态是不是这样的话
能够提高它的效率
所以在这做了一种尝试微内核
把尽可能多的内核的功能放到用户态
在内核里面只保留进程间通信
和底下对硬件的支持
然后在这之上
这个时候会说如果用户态应用程序
想使用传统内核提供的
系统服务功能怎么办呢
这个时候说用户态的应用程序
要想跟内核进行通讯
它需要先绕到内核然后再回到用户态
这样做之后它的安全性和可扩展性
就会有大幅度提高
但是它也会有问题
它的性能就会有大幅度下降
实际上在这个里面
我们现在用到的操作系统
你看它的结构
它是微内核结构和
分层结构的一个混合体
在这种情况下
我们会注意到有一些系统里面的
某一部分内容
在某一个版本里是放到内核里面
到另一个版本里把它放到用户态去了
又有可能过了一段时间以后
它又把它放回来这是微内核结构
在针对微内核结构
进一步的改进叫做外核
它的做法是什么呢
它的做法是向内核里面
放更少的东西
它只是起到资源的保护和隔离的作用
然后把资源管理的任务
交给应用态的代码去完成
这个时候
原来的操作系统功能怎么办呢
原来操作系统的功能
是由用户态的函数库来提供
这种情况下我们看到的是
操作系统的硬件资源
在上面只有一个很薄的
一层安全绑定
在这个安全绑定里面
它控制哪些资源归哪一个系统使用
而相应的资源管理
由各自的系统自己来维护
在这种情况下我们可以在一个系统上
支起不同的操作系统服务
某种角度来说
这好像是一个虚拟机的结构
我们现在意义上的虚拟机
它不是一个我们传统说的
操作系统的一个结构
实际上这个时候
它是把我们现在用到的DSM
早期的时候就是以这种结构出现的
接下来我们说虚拟机管理系结里面
计算机的硬件之上我们架了一个VMM
它负责把真实的硬件
虚拟成若干个虚拟的硬件
然后我们操作系统在这上面
来实现传统操作系统的功能
这一部分功能虚拟管理器来决定
我每一个虚拟机到底可以使用
哪样一些硬件资源
有了这个管理器以后
我们传统的操作系统与硬件
和应用之间的关系
就会发生一个变化
这种变化在什么地方呢
原来的操作系统是直接底下接触硬件
上面对应用提供服务
现在变成是
虚拟机管理器和硬件打交道
操作系统来和虚拟机管理器打交道
但是实际上
它其中有一部分
还是会和硬件直接打交道
这个时候的区别在什么地方
在于管理器负责资源的隔离
操作系统负责资源的管理
好 到现在为止
我们第一讲的内容就讲到结尾了
我们说操作系统是很有趣的
它可以很好的控制一台完整的计算机
如果说你最后做完实验以后
能够用自己写的操作系统代码
去控制一台真实的物理机器
你的感受会是非常好的
但是要想实现这一点
你需要付出非常多的努力
同时操作系统它现在仍然很不完善
不管你花了多长时间做测试
用户实际使用的时候它仍然会有错误
仍然会性能或者功能不满意
这个时候仍然有很多
我们需要去改进的地方
这也是我们学操作系统课
想要去挑战的地方
同时它很庞大
通常情况下我们现在用到ucore
它有一万行代码左右
这是你在前序的一些课程里面
不会学到这么多代码的
综合利用它你才能够完成操作系统实验
理解操作系统这些原理
最后我们想说操作系统尽管很困难
但是我们前面例子
我们能够做到依靠你自己的努力
最后我们是能够实现
一个小的教学操作系统
今天的课就上到这里
-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