当前课程知识点:操作系统 > 第一讲 操作系统概述 > 1.4 为什么学习操作系统,如何学习操作系统 > Video
接下来 我们讨论
为什么要学操作系统
操作系统是计算机系统当中
一个重要的组成部分
但是有很多人并不一定
直接去研究操作系统
作为大学计算机专业本科的必修课
我们大多数的同学
为什么要学操作系统
我们说操作系统是一门综合的课程
在这里综合我们前面讲到的
程序设计 数据结构
计算机系统结构等
在这里我们要去研究的对象
是操作系统的概念和基本原理
对应过来是操作系统的源代码
我们在这里要学到的技能
是操作系统的设计和实现
说我们已经有
很好用的操作系统在用着了
我为什么还要学操作系统
比如说现在我们用到的Windows Linux
能够满足我的需求
那我们在研究当中大量使用Linux
里面很多开源的内容已经很好用了
我们现在在这里面为什么要学呢
实际上说我们修改操作系统
去研究新的操作系统
就是要想实现我们的需求
这个时候说
我们在这里到底有哪些需求
它还没有解决呢
实际上这个问题是说
我们随着一个问题解决
我们会对它有更高的需求
这个需求导致我们会
会进一步的研究操作系统
对于我们本科生的
操作系统的必修课
我们为什么学它
我们说学操作系统呢
操作系统很有挑战
我们在每一年都会有一些同学
对操作系统极端有兴趣
当然操作系统很复杂
每一年也都会有一些同学
对操作系统极端不感兴趣
好 那我们说我们对操作系统很有用
不感兴趣的你也得学
因为你要用计算机
你想把计算机使用的好
你必须了解我操作系统里面
是怎么工作的
如果说你对操作系统很有兴趣
我想知道操作系统里面是如何工作的
我想让它能够更好的为我工作
你也需要来学操作系统
这是我们为什么要学操作系统
我们说操作系统
在整个计算机系统当中的地位
是非常重要的
比如说我们这在里面微软
它最赚钱的不是操作系统软件
是它上面的应用
但是它投入大量精力
去研究和改进操作系统
那也就是说它在这里的重要地位是非常强的
操作系统是计算机系统里的
基本组成部分
操作系统的硬件发展
以至于我要在操作系统里面
添更多的功能
在里面对它做更好的优化
正是由于这些原因在学术界
和工业界都在持续的
对操作系统进行研究和发展
到底有一些什么样人
都在做操作系统呢
随着技术的发展和时代的变化
做操作系统的人也是有一些变化的
比如说最早的时候
只是学计算机的专业人士
会去研究操作系统会去写程序
写操作系统程序是一个很专业的事情
随着操作系统的发展和普及
那么工业界早的时候是
做计算机系统的人的公司
在研究操作系统
比如说像我们说到的IBM DEC
这些公司实际上有一些
已经随着历史的发展
退出了历史舞台
在现在实际上
提供操作系统的服务的公司
比如说谷歌 VMware或者说亚马逊
国内的一些公司像
阿里巴巴 百度 华为
这些公司我们在这里
组成了一些很重要的研究协会
比如说计算机Unix用户协会
每年的研究在操作系统领域里面
最主要的顶级会议有这样两个
一个是操作系统原理研讨会
一个是操作系统设计与实现研讨会
它们俩是隔年开一次 一奇一偶
实际上每年有大约20篇文章
在这个会议上发表
这能代表了计算机
当前发展的最前沿的状态
那么在计算机操作系统领域里头
还有一个重要的标志
就是操作系统里面会
每年评选过去10年当中
最优秀的学术论文
如果说你想了解操作系统
现在最前沿的技术和研究热点在哪
去看这些论文是非常有必要的
我们说操作系统
我们现在仍然需要
去投入大量精力研究它
它在这里有很多挑战
首先第一个挑战就是操作系统非常庞大
我们看Windwos XP代码已经有4500万行
在这么庞大的代码里面
我们要想在里面管理它的并发
这时候你的编程挑战是非常大的
然后操作系统要管理
各种各样的硬件故障
然后我需要对它的各个部分的管理
要实现高效
这些都会使得
我们在这个庞大的系统里
来处理这个问题的时候非常复杂
而随着计算机系统的联网
那么在网络环境下安全的问题
又变成是越来越关键的
而在操作系统里
必须在操作系统层面上
解决安全的问题
那上面的应用才能有一个很好的
安全基础
这是由于操作系统庞大所带来的挑战
第二个挑战
实际上操作系统里面它的关系是错综复杂的
我们说我们前面讲操作系统有并发
两个多个进程之间交替使用资源
这个时候有一些相互之间的相互影响
但实际上这个时候在操作系统里面
最复杂的一个问题是
各个资源相互使用的时候
到最底层你必须互斥的
这个时候
我们这种锁机制导致很多时候
我们一些资源处在空等的状态
这个实际上是提高操作系统效率
必须解决的一个重要的问题
也就是说它这里由于关系错综复杂
如何能让它高效变成异常困难
而在这种环境下
反倒是我们传统操作系统里面
讲到的调度这些问题都变成了
不是当前研究的最热的点了
操作系统面临的第三个挑战是
各种错综复杂关系之间的权衡
比如说我们在操作系统里面
有时间优化目标和空间优化目标
这两个实际上是相互矛盾的
比如说我在这里做一个数组的排序
如果说我有很大的空间都在内存里
这个时候我会排起来很快
但是这个时候
它占用很大的存储空间
而我的储存空间又是十分有限的
这个时候你只能在这两者之间去平衡
然后说我们需要提高它的性能
这个时候需要资源多的
我会给它分配更多的系统资源来使用
但是这个时候另外一个应用
如果说它长时间分配不到资源
这个时候它的响应时间又不可预测
这个时候我们的性能和
行为的可预测之间又是一个矛盾
这种矛盾在操作系统里头
都必须对它做平衡
再有一个我们希望各种各样的情况下
我的算法都能体现出很好的特征
不会对某些应用性能好
到另一些应用里面它的性能比较差
这种差异性呢
和我们性能的优化目标又是矛盾的
这是我们通常所说的
公平性和性能之间的矛盾
你需要在这两者之间
牺牲一定的公平性来达到性能
或者反之你需要牺牲一定的性能
我才能保证它的公平性
再有一个就是操作系统
要面对很多硬件细节
我如何能够实现中断 异常
上下文切换的有效进行
我如何能让这个快表
有很高的利用效率
这都涉及到你的CPU的实现细节
所以在这里操作系统很大一部分的
直接跟硬件打交道的地方
都是使用汇编代码来写的
这样才能保证它的高效
所以学操作系统里头
你一定会是要用到汇编代码的
到底我们如何学操作系统呢
不闻不若闻之
闻之不若见之
见之不若知之
知之不若行之
学至于行而止矣
这是我们的一句古话
在这个里面我们说
你必须要落实到行动上
你才能真正掌握它
所以我们学操作系统呢
在那的实验成分比较多的
而另外一句提法是
天才是1%的灵性加上99%的汗水
你必须付出艰苦的努力
你才能学好操作系统
我们有同学的一个反馈意见说
操作系统是困难的
最好的和最有趣的三年级课程
当然也有同学把它描述成地狱一般的
这都是说明我们学操作系统的时候
你必须下努力
才能够学的好
当然说我们这个里面太庞大了
是不是我们就学不好了呢
在这里给出来的是我们的Linux
他在1991年开始做Linux操作系统的时候
也是一个大学本科生
1991年 2001年 2011年 20多年过去以后
Linux操作系统已经变成了
我们广泛使用的一个系统
我们做这件事情的时候
谁也不会想到几十年以后
一个由大学生发起的一个操作系统
能发展到目前的状态
所以我也鼓励大家
现在大家是三年级的大学生
那么你的未来也可能成为Linux第二
-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