当前课程知识点:操作系统 > 第一讲 操作系统概述 > 1.3 什么是操作系统 > Video
现在我们来继续讲
什么是操作系统
大家想象操作系统是什么样的
它是一个程序
它和其它程序是什么样的关系
然后它有些什么样的组成
它有些什么样的特征
我们首先来看什么是操作系统
操作系统实际上
没有一个明确的定义
它哪些功能算是操作系统里的
那些功能是应用软件或者说硬件的
实际上随着操作系统的发展
操作系统内涵实际上是在不断变化的
我们现在给操作系统是给出一个解释
有一种解释说
操作系统是一个控制程序
它是一个系统软件
它给用户提供一个运行的环境
用户使用计算机系统的时候
提供所需要的服务
如果说用户的使用不当
那么这个时候
它需要进行项目的一些错误处理
如果说用户在使用过程中
我是不是能给它一些协助
比如说你在输某一条命令的时候
输了半截你忘掉了 后面是什么内容
这个时候它是不是能给出一些提示
这是我们第一个理解
第二个理解操作系统
它是一个资源管理器
实际上就是说我们计算机硬件
和应用程序之间
用操作系统来作为它的一个中间层
它为计算机应用程序来管理
所有的计算机软硬件资源
以协调于各个应用程序
在使用这些资源的时候
能够友好地使用下去
那么具体说起来就是
如果说所有的资源都是由我专用的
那么这个时候我的使用肯定会没问题
但是如果说多个应用程序交替着来使用
那么这个时候这资源
如何使用就会有一些问题了
比如说像内存 你在用我也在用
这个时候我到底
两个应用它们之间各分配多少呢
有可能给你分配多了 给它分配少了
而你的需要又跟分配的结果不一致
那这个时候对操作系统来说
我就需要做一个高效的判断
来使得我们在这里
能够按照应用程序的需要
给它分配合理的资源
这是我们操作系统提供的高效使用
所要达到的目标
然后第二个是说
我们可能都需要很多的资源
这个时候操作系统
要负责解决这种需求上的差异
实现它的公平
操作系统表现形式
可能会有多种多样
比如说我们windows我们的Linux
它的表现是完全不一样的
但是从操作系统内部结构上来讲
它基本上可以分成这样几个部分
说操作系统在中间 下面是硬件
上面是应用
应用我们就可以把它
分成系统应用和应用程序
这两个部分对于我们来讲
我们学操作系统的人
就是要来做操作系统
那么你是在硬件基础上做操作系统
这属于系统设计者
如果说你是写应用程序的人
或者写系统应用的人
这个时候我利用操作系统的功能
给出应用程序和系统应用
如果说你是一个应用程序的使用者
这个时候你直接使用的应用程序
但是即使这样的话你理解操作系统
也有利于你更好地使用计算机系统
操作系统实际上就是
在硬件进行一层隔离
对上面的应用
提供我们通常所见到的逻辑这些资源
比如说进程 文件 地址空间
这都是在操作系统之后
给用户程序看到的情况
操作系统是一个软件
在我们软件划分当中
这是我们操作系统
实际上我们可以把软件分成
应用软件和系统软件
系统软件我们又可以
把它分成系统应用和操作系统
而在操作系统里面
核心的内容是我们的内核
而这里的命令行
由于它和操作系统内核关系非常密切
我们把它划在这里头
实际上有时候也会
把它认为系统软件的一个组成部分
我们在操作系统里
到底有一些什么样的组成
首先说我们有内核
实现我们刚才所说到的
资源的管理功能
操作系统之上用户要使用
实际上我们在这提供了两种命令接口
一个是命令行接口
这个时候用户需要去敲键盘输命令
另一种是图形用户接口GUI
这个时候实际上我们是把命令
转换成我们图形用户接口的
一些基本读数
比如说在这里的窗口 图标 菜单和指针
有了这些之后
我去看文件系统的文件的图标
那我就对应着某一个文件
这样的话方便用户来使用
这个时候我们能达到一种效果
是所见即所得
操作系统和外界的关系
实际上我们在这个图可以很直观表现出来
操作系统是我们
整个计算机系统里的核心软件
然后在外面构造我们的
提供对外接口和一些应用
用户就可以来使用
系统所提供的服务了
这是我们用户所在的位置
对于我们这学期课来讲
我们的ucore小操作系统
它在提供一些什么 我们从下往上
中间两个黄色的部分
是我们操作系统的内容
下面是硬件 我们写了几种
我们在ucore实验里头会
涉及到的硬件 串口 磁盘和存储
我在这有一个硬件抽象层
硬件抽象层把底下这些做一个屏蔽
提供一个标准的接口
然后在这里实现我们操作系统功能
操作系统功能是各种各样的驱动
串口驱动 磁盘驱动 物理内存的管理
操作系统内核提供的服务
比如说我们的信号
这样的话
我们在执行一个程序过程当中
我就可以强行让它停下来按Ctrl-C
然后我们可以提供文件系统
这个时候我就可以把大量的数据
以人比较好理解的形式组织起来
然后我们在里面提供虚拟存储
提供虚拟存储以后我们用户
就可以使用到
大于物理内存的储存空间
然后我们在这里提供处理机调度
这个时候我们就可以在一台机器上
让多个应用程序交替运行
提供这些服务
都封装在系统调用接口之上
通过系统调用接口 上层应用
系统库 编译器 解释器
和我们命令行应用
这都是提供的系统应用
然后我们写的应用程序是
在这上面利用系统调用和库
提供的功能
来实现我们应用的功能
操作系统软件和
其它课程里面说到应用程序
它也是一个软件
这两者之间有什么样的差别
也就是操作系统内核
它有一些什么样的特征
这里列出来的是
操作系统所具有四个特征
并发 共享 虚拟和异步
并发是指说我们在操作系统当中
有多个正在运行的应用程序
那么它需要操作系统管理和调度
具体什么意思
就是我们如果多个应用程序交替运行
我需要知道当前每一个应用
都执行到什么位置
当前正在执行的是哪个应用
如果说应用之间有切换的时候
那切换到下一个应用的时候
它上次执行到什么位置
那这次我从什么地方开始
当时的状态是什么样子
那我在这都用操作系统来维护
第二个特征是共享
共享是指说我们多个应用
并发运行的时候
宏观上要体现出
它们同时在访问资源的情况
微观上要实现它们的互斥访问
比如说我们说到的内存
两个应用同时访问内存
这个时候我每个应用
需要知道它访问是哪个
另一个应用访问的是哪个
它们两之间不能访问错了
我需要保护的这些内存资源
不能让另外一个应用去访问
而在微观上 这个时候
我需要对它做很好的隔离
我们知道在数据总线上任何一个时刻
只有一个应用去访问存储单元
这就是我们所说的微观上的互斥
然后再一个是虚拟
也就是说我要通过交替运行
使每一个用户感觉到
整个计算机都是
由它一个用户在专门提供服务
如何做到这点实际上就是由操作系统
在每个应用执行的时候这种交替
由于交替的频率非常高
让用户在用的时候感觉不太出来
这台机器还有其它用户在用
当然我们这里负载大到一定程度
用户是可以感觉到的
再有一个是异步 异步是指说
由于我们程序是走走停停的
这种走走停停
它的行为是不是可预测的
在这里实际上
我们需要由操作系统来提供
只要用户的输入是一致的
那么这个时候它的输出结果
就应该是不变的
当然如果说你的那个应用
就是需要知道跟时间相关的
这种走走停停的信息
我们也是可以在操作系统支持之下
能够发现时间上的差异
这就是我们在这里说到的
操作系统的特征
-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