清华大学公开课 操作系统——Part 1
文章目录
1.1课程概述
-
课程简介
什么是操作系统
为什么学习以及如何学习操作系统
操作系统的实例,历史和结构介绍 -
本课程涉及:
-
操作系统基本概念和原理
-
操作系统介绍
-
中断及系统调用
-
内存管理
-
进程及线程
-
调度
-
同步
-
文件系统
-
I/O子系统
-
练习:在uCore操作系统上做实验
-
操作系统实验:
实验0:准备(搭建操作系统,搭建过程)
实验1:系统启动及中断
实验2:物理内存管理
实验3:虚拟内存管理
实验4:内核线程管理
实验5:用户进程管理
实验6:CPU调度
实验7:同步与互斥(协调资源,提高利用率)
实验8:文件系统 -
预备知识:
计算机结构原理(Intel 80386+)
数据结构
C和汇编语言
1.2什么是操作系统
从功能角度看什么是操作系统
第一,具有控制功能
- 用户角度:操作系统是一个控制程序,可以控制软件
- 管理应用程序
- 为应用程序提供服务:I/O服务,声音,网卡服务
- 杀死应用程序
第二,具有管理功能
- 资源管理
- 管理外设,分配资源:使得不同时刻分配不同资源,均匀分配
操作系统层次架构
操作系统位置:于 硬件之上,应用程序之下
操作系统是一个中间层的软件
操作系统是一个应用软件,管理硬件,上层有统一接口(例如图形界面Shell),方便管理。
而操作系统内部核心是:Kernel
硬件资源管理
- CPU:CPU调度,进程和线程管理
- 内存:物理内存管理,虚拟内存管理(为上层提供一个更大的虚拟环境)
- 磁盘(闪存):文件系统管理(访问非常底层,不方便用户和应用程序存储数据,因此在上面抽象出了文件系统,以文件的形式提供访问,存储的环境)
- 底层硬件:中断处理与设备驱动
操作系统内核的特征
并发
计算机系统可以同时运行多个程序。一段时间内有多个程序可以同时运行,需要OS管理和调度。不同于并行,并行是同一个时间点有多个程序可以同时运行,需要多个CPU,提供并行性,必须多个CPU。
共享
有“同时”和“互斥”共享。有限的资源可以提供给多个程序,但是内部中一个程序一个时间点只能访问一个内存单元。
虚拟化
操作系统直接面对硬件,把CPU虚拟化为进程,把磁盘虚拟化为文件,内存虚拟化为地址空间。利用多道程序设计技术,让每个用户都觉得有一个计算机专门为他服务。
异步
程序的执行取决于操作系统的调度。程序的执行不是一贯到底,而是走走停停,向前推进的速度不可预知。但只要运行环境相同,OS需要保证程序运行的结果也要相同。
1.3为什么学习操作系统
操作系统是一门综合课程。结合许多不同课程
- 程序设计语言
- 数据结构
- 算法
- 计算机体系结构
- 操作系统概念和原理,源代码
- 技能
- 操作系统的设计和实现(高手)
操作系统的挑战性
操作系统是计算机研究的基础,和软件硬件都有关,还在研究,具有挑战性:
- 操作系统很大,代码量大,没有人会把OS方方面面都了解透
- 实际操作系统很复杂,只看自己感兴趣的部分,或研究部分
- 操作系统管理并发:并发导致有趣的编程挑战
- 操作系统代码管理原始硬件:时间依赖行为,非法行为,硬件故障
- 操作系统代码必须是可靠高效的:低耗CPU,内存,磁盘
- 操作系统储蓄哦,就意味着机器出错:操作系统必须稳定
- 操作系统是系统安全的基础
操作系统挑战性体现在哪些地方
课本上原理讲解的部分并不是现在操作系统的主要挑战,比如并发调度算法,I/O磁盘调度可以交给器件本身去完成了,进程调度这些调度算法之类的只是操作系统重要部分的一小部分,原理概念有的是老化的知识点,作为了解即可。
那么,我们需要站在更高的眼光上看待操作系统,因为它是一个大的系统。
操作系统需要权衡
- 空间与时间
- 性能和可预测性
- 公平和性能
硬件方面,操作系统需要
- 良好的硬件管理
- 合理的资源分配
- 例如:硬盘速度跟COU,内存相差很多,操作系统需要协调处理
操作系统领域
工业界:微软,谷歌,Facework,苹果以OS为核心
学术界:ACM,IEEE,USENIX,CFF(国内)
*会议:SOSP(每两年),USENIX(每两年)
1.4如何学习操作系统
实践,coding,动手
关注实验,做实验
1.5操作系统实例
操作系统有很多,面向桌面的,面向服务器的(数据中心,气象),移动中断(手机)
- UNIX(C语言):改变了世界
- UNIX BSD
- Linux:很多操作系统都是基于它
- Windows
1.6操作系统的历史
操作系统的发展随着计算机硬件,应用需求的发展而发展
- CPU越来越快,计算机速度得到提升
- 内存越来越大,CPU执行多个程序,内存中可以放进多个程序,并发执行,减小I/O开销,速度提升
- 操作系统可以批处理,流水调度(初步形态)
- 多道程序设计
- 中断
- 分时系统(为了更好利用计算机资源)方便人机交互
- 网络的快速发展,出现了分布式的操作系统
1.7操作系统结构
为什么操作系统使用C语言?
C语言不分仪器,有好的移植性,而汇编语言需要在固定机器上,不具备可移植性。
-
微内核的设计:尽可能把内核功能移动到用户空间。比如中断处理,消息传递放在内核里,文件系统,内存管理等放在外围以程序,服务形式存在,松耦合的架构,而不是通过函数调用的紧耦合方式。
这样的代价就是性能降低,因为多次拷贝的开销远远超过函数调用。所以产业上很少采用 -
学术界存在另一种更加极端的架构,“外核”
-
虚拟机VMs:一台物理机可以虚拟出多个操作系统
VMM虚拟出的是一个完整的计算机