当前课程知识点:操作系统 >  第一讲 操作系统概述 >  1.7 操作系统结构 >  视频

返回《操作系统》慕课在线视频课程列表

视频在线视频

视频

下一节:2.1 前言和国内外现状

返回《操作系统》慕课在线视频列表

视频课程教案、知识点、字幕

接下来我们来讲操作系统的结构

任何一个软件它都会有自己的结构

操作系统也不例外

操作系统在发展的过程当中

它的结构实际上有了非常大的变化

我们从历史上发展的过程来看

操作系统可能采取的结构

和每种结构它的特征

最早的时候实际上

操作系统它是一种简单的结构

对下控制硬件

对上提供用户应用程序所需要的服务

中间的功能实际上实现的很简单

我们在BIOS里面有一层

对硬件进行管理的驱动程序

操作系统内部它把这一层

做了更进一步的完善

这种完善形成了系统里面的驱动

然后有一些常驻的服务系统程序

然后上面是应用程序

应用程序有可以使用操作系统提供的

设备驱动服务

也可能直接使用

底下BIOS提供的系统服务

在这个里面它没有进行模块化的划分

实现的时候操作系统的代码

也主要是汇编来写的

基于这种情况操作系统

它是从一个平台

操作系统只能用在这个平台上

到其它的品平台上不能使用的

所以这样的话

每个操作系统都是只针对

特定硬件平台来写的操作系统

在这个阶段我们有很多种操作系统

在PC机上主要是DOS系统

它只能用在X86的系统上

第二种结构实际上

随着Unix系统不断发展完善

形成的这就是分层结构

在分层结构当中

我们会把操作系统功能分成若干层

最底下一层是硬件

最上面一层是用户接口

在中间实际上

我们按照功能的不断的丰富

不断的完善把它分成了N层

每一层只使用下一层提供的服务

这种分层结构

使得各个层依赖关系得到一定的限制

使得我的可靠性能够进一步提高

这个里面分层结构很大贡献

在于它把可移植性

作为操作系统的一个重要的目标

以前的话我们是说

对于一个特定的硬件平台

我要全新对它写一套操作系统

现在我只需要

把整个操作系统代码分成两部分

一部分与硬件平台无关的部分

这一部分我们用高级语言来实现

另外一部分是跟特定硬件平台

密切相关的部分

这一部分我们仍然

使用汇编程序来实现

做了这种划分以后操作系统的移植

只需要改汇编的部分

我们在这里说到Unix系统和C语言

我们前面说Unix系统的时候已经

见过这两位Thompson和 Ritchie

他们实际在Unix系统发展过程当中

他提出来的C语言

C语言也会由于Unix系统的发展

而得到广泛的使用

最后他们得了图灵奖

这是第二种结构

我们所使用ucore教学操作系统

它的结构基本是采用分层的结构

我们在这里要学的内容

是划红线的这几个部分

我们基本涉及到

从最底层的中断 系统加载

一直到操作系统内部

各个核心模块对上提供的服务

和系统服务里的命令行

这是分层结构

分层结构随着层次的增加

依赖关系这种层次越来越复杂

复杂的结果是

操作系统内核里面的东西越来越多

效率越来越下降

在这个基础上微内核结构

因为分层结构的层次多

所带来的效率低的一种做法

我们希望实际上是

把一些操作系统内核提供的服务

放到用户态是不是这样的话

能够提高它的效率

所以在这做了一种尝试微内核

把尽可能多的内核的功能放到用户态

在内核里面只保留进程间通信

和底下对硬件的支持

然后在这之上

这个时候会说如果用户态应用程序

想使用传统内核提供的

系统服务功能怎么办呢

这个时候说用户态的应用程序

要想跟内核进行通讯

它需要先绕到内核然后再回到用户态

这样做之后它的安全性和可扩展性

就会有大幅度提高

但是它也会有问题

它的性能就会有大幅度下降

实际上在这个里面

我们现在用到的操作系统

你看它的结构

它是微内核结构和

分层结构的一个混合体

在这种情况下

我们会注意到有一些系统里面的

某一部分内容

在某一个版本里是放到内核里面

到另一个版本里把它放到用户态去了

又有可能过了一段时间以后

它又把它放回来这是微内核结构

在针对微内核结构

进一步的改进叫做外核

它的做法是什么呢

它的做法是向内核里面

放更少的东西

它只是起到资源的保护和隔离的作用

然后把资源管理的任务

交给应用态的代码去完成

这个时候

原来的操作系统功能怎么办呢

原来操作系统的功能

是由用户态的函数库来提供

这种情况下我们看到的是

操作系统的硬件资源

在上面只有一个很薄的

一层安全绑定

在这个安全绑定里面

它控制哪些资源归哪一个系统使用

而相应的资源管理

由各自的系统自己来维护

在这种情况下我们可以在一个系统上

支起不同的操作系统服务

某种角度来说

这好像是一个虚拟机的结构

我们现在意义上的虚拟机

它不是一个我们传统说的

操作系统的一个结构

实际上这个时候

它是把我们现在用到的DSM

早期的时候就是以这种结构出现的

接下来我们说虚拟机管理系结里面

计算机的硬件之上我们架了一个VMM

它负责把真实的硬件

虚拟成若干个虚拟的硬件

然后我们操作系统在这上面

来实现传统操作系统的功能

这一部分功能虚拟管理器来决定

我每一个虚拟机到底可以使用

哪样一些硬件资源

有了这个管理器以后

我们传统的操作系统与硬件

和应用之间的关系

就会发生一个变化

这种变化在什么地方呢

原来的操作系统是直接底下接触硬件

上面对应用提供服务

现在变成是

虚拟机管理器和硬件打交道

操作系统来和虚拟机管理器打交道

但是实际上

它其中有一部分

还是会和硬件直接打交道

这个时候的区别在什么地方

在于管理器负责资源的隔离

操作系统负责资源的管理

好 到现在为止

我们第一讲的内容就讲到结尾了

我们说操作系统是很有趣的

它可以很好的控制一台完整的计算机

如果说你最后做完实验以后

能够用自己写的操作系统代码

去控制一台真实的物理机器

你的感受会是非常好的

但是要想实现这一点

你需要付出非常多的努力

同时操作系统它现在仍然很不完善

不管你花了多长时间做测试

用户实际使用的时候它仍然会有错误

仍然会性能或者功能不满意

这个时候仍然有很多

我们需要去改进的地方

这也是我们学操作系统课

想要去挑战的地方

同时它很庞大

通常情况下我们现在用到ucore

它有一万行代码左右

这是你在前序的一些课程里面

不会学到这么多代码的

综合利用它你才能够完成操作系统实验

理解操作系统这些原理

最后我们想说操作系统尽管很困难

但是我们前面例子

我们能够做到依靠你自己的努力

最后我们是能够实现

一个小的教学操作系统

今天的课就上到这里

操作系统课程列表:

第零讲 在线教学环境准备

-0.1 Piazza讨论区

--piazza访问和使用

--html

-0.2 在线实验平台

--实验平台使用帮助

--平台使用帮助

--Gitlab使用帮助

--IBM内部账号初始化

-0.2在线实验平台

--Raw HTML

第一讲 操作系统概述

-1.1 课程概述

--视频

-第一讲 操作系统概述--练习

-1.2 教学安排

--视频

-1.3 什么是操作系统

--Video

-1.4 为什么学习操作系统,如何学习操作系统

--Video

-1.5 操作系统实例

--视频

-1.6 操作系统的演变

--视频

-1.7 操作系统结构

--视频

第二讲 实验零 操作系统实验环境准备

-2.1 前言和国内外现状

--2.1 前言和国内外现状

-2.2 OS实验目标

--2.2 OS实验目标

-2.3 8个OS实验概述

--2.3 8个OS实验概述

-2.4 实验环境搭建

--2.4 实验环境搭建

-2.5 x86-32硬件介绍

--2.5 x86-32硬件介绍

-2.6 ucore部分编程技巧

--2.6 ucore部分编程技巧

-2.7 演示实验操作过程

--2.7 演示实验操作过程

--Q6

--Q7

--Q10

第三讲 启动、中断、异常和系统调用

-3.1 BIOS

--3.1 BIOS

-3.2 系统启动流程

--3.2 系统启动流程

-3.3 中断、异常和系统调用比较

--3.3 中断、异常和系统调用比较

-第三讲 启动、中断、异常和系统调用--3.3 中断、异常和系统调用比较

-3.4 系统调用

--3.4 系统调用

-第三讲 启动、中断、异常和系统调用--3.4 系统调用

-3.5 系统调用示例

--3.5 系统调用示例

-3.6 ucore+系统调用代码

--3.6 ucore+系统调用代码

第四讲 实验一 bootloader启动ucore os

-4.1 启动顺序

--4.1 启动顺序

-4.2 C函数调用的实现

--4.2 C函数调用的实现

-4.3 GCC内联汇编

--4.3 GCC内联汇编

-4.4 x86中断处理过程

--4.4 x86中断处理过程

-4.5 练习一

--4.5 练习一

-4.6 练习二

--4.6 练习二

-4.7 练习三

--4.7 练习三

-4.8 练习四 练习五

--4.8 练习四练习五

-4.9 练习六

--4.9 练习六

第五讲 物理内存管理: 连续内存分配

-5.1 计算机体系结构和内存层次

--5.1 计算机体系结构和内存层次

-5.2 地址空间和地址生成

--5.2 地址空间和地址生成

-5.3 连续内存分配

--5.3 连续内存分配

-5.4 碎片整理

--5.4 碎片整理

-5.5 伙伴系统

--5.5 伙伴系统

-第五讲 物理内存管理: 连续内存分配--5.6 练习

第六讲 物理内存管理: 非连续内存分配

-6.1 非连续内存分配的需求背景

--6.1 非连续内存分配的需求背景

-6.2 段式存储管理

-- 6.2 段式存储管理

-6.3 页式存储管理

--6.3 页式存储管理

-6.4 页表概述

--6.4 页表概述

-6.5 快表和多级页表

--6.5 快表和多级页表

-6.6 反置页表

--6.6 反置页表

-6.7 段页式存储管理

--6.7 段页式存储管理

-第六讲 物理内存管理: 非连续内存分配--6.8 练习

第七讲 实验二 物理内存管理

-7.1 了解x86保护模式中的特权级

--7.1 了解x86保护模式中的特权级

-第七讲 实验二 物理内存管理--7.1 了解x86保护模式中的特权级

-7.2 了解特权级切换过程

--7.2 了解特权级切换过程

-第七讲 实验二 物理内存管理--7.2 了解特权级切换过程

-7.3 了解段/页表

--7.3 了解段/页表

-第七讲 实验二 物理内存管理--7.3 了解段/页表

-7.4 了解UCORE建立段/页表

--7.4 了解ucore建立段/页表

-第七讲 实验二 物理内存管理--7.4 了解UCORE建立段/页表

-7.5 演示lab2实验环节

--7.5 演示lab2实验环节

第八讲 虚拟存储概念

-8.1 虚拟存储的需求背景

--8.1 虚拟存储的需求背景

-8.2 覆盖和交换

--8.2 覆盖和交换

-8.3 局部性原理

--8.3 局部性原理

-8.4 虚拟存储概念

--8.4 虚拟存储概念

-8.5 虚拟页式存储

--8.5 虚拟页式存储

-8.6 缺页异常

--8.6 缺页异常

第九讲 页面置换算法

-9.1 页面置换算法的概念

--9.1 页面置换算法的概念

-9.2 最优算法、先进先出算法和最近最久未使用算法

--9.2 最优算法、先进先出算法和最近最久未使用算法

-第九讲 页面置换算法--9.2 最优算法、先进先出算法和最近最久未使用算法

-9.3 时钟置换算法和最不常用算法

--9.3 时钟置换算法和最不常用算法

-第九讲 页面置换算法--9.3 时钟置换算法和最不常用算法

-9.4 Belady现象和局部置换算法比较

--9.4 Belady现象和局部置换算法比较

-第九讲 页面置换算法--9.4 Belady现象和局部置换算法比较

-9.5 工作集置换算法

--9.5 工作集置换算法

-第九讲 页面置换算法--9.5 工作集置换算法

-9.6 缺页率置换算法

--9.6 缺页率置换算法

-第九讲 页面置换算法--9.6 缺页率置换算法

-9.7 抖动和负载控制

--9.7 抖动和负载控制

第十讲 实验三 虚拟内存管理

-10.1 实验目标:虚存管理

--10.1 实验目标:虚存管理

-第十讲 实验三 虚拟内存管理--10.1 实验目标:虚存管理

-10.2 回顾历史和了解当下

-- 10.2 回顾历史和了解当下

-第十讲 实验三 虚拟内存管理--10.2 回顾历史和了解当下

-10.3 处理流程、关键数据结构和功能

--10.3 处理流程、关键数据结构和功能

-第十讲 实验三 虚拟内存管理--10.3 处理流程、关键数据结构和功能

-10.4 页访问异常

--10.4 页访问异常

-第十讲 实验三 虚拟内存管理--10.4 页访问异常

-10.5 页换入换出机制

--10.5 页换入换出机制

-第十讲 实验三 虚拟内存管理--10.5 页换入换出机制

第十一讲 进程和线程

-11.1 进程的概念

--11.1 进程的概念

-第十一讲 进程和线程--11.1 进程的概念

-11.2 进程控制块

--11.2 进程控制块

-第十一讲 进程和线程--11.2 进程控制块

-11.3 进程状态

--11.3 进程状态

-第十一讲 进程和线程--11.3 进程状态

-11.4 三状态进程模型

--11.4 三状态进程模型

-11.5 挂起进程模型

--11.5 挂起进程模型

-第十一讲 进程和线程--11.5 挂起进程模型

-11.6 线程的概念

--11.6 线程的概念

-第十一讲 进程和线程--11.6 线程的概念

-11.7 用户线程

--11.7 用户线程

-第十一讲 进程和线程--11.7 用户线程

-11.8 内核线程

--11.8 内核线程

-第十一讲 进程和线程--11.8 内核线程

第十二讲 进程控制

-12.1 进程切换

--12.1 进程切换

-第十二讲 进程控制--12.1 进程切换

-12.2 进程创建

--12.2 进程创建

-第十二讲 进程控制--12.2 进程创建

-12.3 进程加载

--12.3 进程加载

-第十二讲 进程控制--12.3 进程加载

-12.4 进程等待与退出

--12.4 进程等待与退出

-第十二讲 进程控制--12.4 进程等待与退出

第十三讲 实验四 内核线程管理

-13.1 总体介绍

--13.1 总体介绍

-13.2 关键数据结构

--13.2 关键数据结构

-13.3 执行流程

--13.3 执行流程

-13.4 实际操作

--13.4 实际操作

第十四讲 实验五 用户进程管理

-14.1 总体介绍

--14.1 总体介绍

-14.2 进程的内存布局

--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.5 进程复制

-14.6 内存管理的copy-on-write机制

--14.6 内存管理的copy-on-write机制

第十五讲 处理机调度

-15.1 处理机调度概念

--15.1 处理机调度概念

-第十五讲 处理机调度--15.1 处理机调度概念

-15.2 调度准则

--15.2 调度准则

-15.3 先来先服务、短进程优先和最高响应比优先调度算法

--15.3 先来先服务、短进程优先和最高响应比优先调度算法

-第十五讲 处理机调度--15.3 先来先服务、短进程优先和最高响应比优先调度算法

-15.4 时间片轮转、多级反馈队列、公平共享调度算法和ucore调度框架

--15.4 时间片轮转、多级反馈队列、公平共享调度算法和ucore调度框架

-第十五讲 处理机调度--15.4 时间片轮转、多级反馈队列、公平共享调度算法和uc

-15.5 实时调度和多处理器调度

--15.5 实时调度和多处理器调度

-第十五讲 处理机调度--15.5 实时调度和多处理器调度

-15.6 优先级反置

--15.6 优先级反置

-第十五讲 处理机调度--15.6 优先级反置

第十六讲 实验六 调度器

-16.1 总体介绍和调度过程

--16.1 总体介绍和调度过程

-16.2 调度算法支撑框架

--16.2 调度算法支撑框架

-16.3 时间片轮转调度算法

--16.3 时间片轮转调度算法

-16.4 Stride调度算法

--16.4 Stride调度算法

第十七讲 同步互斥

-17.1 背景

--17.1 背景

-17.2 现实生活中的同步问题

--17.2 现实生活中的同步问题

-第十七讲 同步互斥--17.2 现实生活中的同步问题

-17.3 临界区和禁用硬件中断同步方法

--17.3 临界区和禁用硬件中断同步方法

-第十七讲 同步互斥--17.3 临界区和禁用硬件中断同步方法

-17.4 基于软件的同步方法

--17.4 基于软件的同步方法

-第十七讲 同步互斥--17.4 基于软件的同步方法

-17.5 高级抽象的同步方法

--17.5 高级抽象的同步方法

-第十七讲 同步互斥--17.5 高级抽象的同步方法

第十八讲 信号量与管程

-18.1 信号量

--18.1 信号量

-第十八讲 信号量与管程--18.1 信号量

-18.2 信号量使用

--18.2 信号量使用

-第十八讲 信号量与管程--18.2 信号量使用

-18.3 管程

--18.3 管程

-第十八讲 信号量与管程--18.3 管程

-18.4 哲学家就餐问题

--18.4 哲学家就餐问题

-18.5 读者-写者问题

--18.5 读者-写者问题

第十九讲 实验七 同步互斥

-19.1 总体介绍

--19.1 总体介绍

-19.2 底层支撑

--19.2 底层支撑

-第十九讲 实验七 同步互斥--19.2 底层支撑

-19.3 信号量设计实现

--19.3 信号量设计实现

-第十九讲 实验七 同步互斥--19.3 信号量设计实现

-19.4 管程和条件变量设计实现

--19.4 管程和条件变量设计实现

-第十九讲 实验七 同步互斥--19.4 管程和条件变量设计实现

-19.5 哲学家就餐问题

--19.5 哲学家就餐问题

第二十讲 死锁和进程通信

-20.1 死锁概念

--20.1 死锁概念

-第二十讲 死锁和进程通信--20.1 死锁概念

-20.2 死锁处理方法

--20.2 死锁处理方法

-第二十讲 死锁和进程通信--20.2 死锁处理方法

-20.3 银行家算法

--20.3 银行家算法

-第二十讲 死锁和进程通信--20.3 银行家算法

-20.4 死锁检测

--20.4 死锁检测

-第二十讲 死锁和进程通信--20.4 死锁检测

-20.5 进程通信概念

--20.5 进程通信概念

-第二十讲 死锁和进程通信--20.5 进程通信概念

-20.6 信号和管道

--20.6 信号和管道

-第二十讲 死锁和进程通信--20.6 信号和管道

-20.7 消息队列和共享内存

--20.7 消息队列和共享内存

-第二十讲 死锁和进程通信--20.7 消息队列和共享内存

第二十一讲 文件系统

-21.1 文件系统和文件

--21.1 文件系统和文件

-第二十一讲 文件系统--21.1 文件系统和文件

-21.2 文件描述符

--21.2 文件描述符

-第二十一讲 文件系统--21.2 文件描述符

-21.3 目录、文件别名和文件系统种类

--21.3 目录、文件别名和文件系统种类

-第二十一讲 文件系统--21.3 目录、文件别名和文件系统种类

-21.4 虚拟文件系统

--21.4 虚拟文件系统

-第二十一讲 文件系统--21.4 虚拟文件系统

-21.5 文件缓存和打开文件

--21.5 文件缓存和打开文件

-第二十一讲 文件系统--21.5 文件缓存和打开文件

-21.6 文件分配

--21.6 文件分配

-第二十一讲 文件系统--21.6 文件分配

-21.7 空闲空间管理和冗余磁盘阵列RAID

--21.7 空闲空间管理和冗余磁盘阵列RAID

-第二十一讲 文件系统--21.7 空闲空间管理和冗余磁盘阵列RAID

第二十二讲 实验八 文件系统

-22.1 总体介绍

--22.1 总体介绍

-第二十二讲 实验八 文件系统--22.1 总体介绍

-22.2 ucore 文件系统架构

--22.2 ucore 文件系统架构

-第二十二讲 实验八 文件系统--22.2 ucore 文件系统架构

-22.3 Simple File System分析

--22.3 Simple File System分析

-第二十二讲 实验八 文件系统--22.3 Simple File System分析

-22.4 Virtual File System分析

--22.4 Virtual File System分析

-第二十二讲 实验八 文件系统--22.4 Virtual File System分

-22.5 I/O设备接口分析

--22.5 I/O设备接口分析

-第二十二讲 实验八 文件系统--22.5 I/O设备接口分析

-22.6 执行流程分析

--22.6 执行流程分析

第二十三讲 I/O子系统

-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

--html

视频笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。