操作系统学习笔记001
预备知识:数据结构,计算机组成原理
什么是操作系统:
- 没有一个完整,精确,公认的定义
- 从功能和特点来介绍操作系统
- 功能
- 用户角度上,操作系统是一个控制软件
- 管理应用程序
- 为应用程序提供服务
- 杀死应用程序
- 对于操作系统管理的内部对象来说
- 资源管理
- 管理外设,分配资源
- 资源管理
- 功能
操作系统层次结构
- 硬件之上
- 应用程序之下
应用软件:办公软件,视频播放软件
操作系统位于应用软件之下,为应用软件提供服务支撑
外壳(Shell) kernel(内核)
OS Kernel的特征
- 并发
- 计算机系统中同时存在多个运行的程序,需要OS管理和调度
- 共享
- “同时”访问
- 互斥共享
- 虚拟
- 利用多道程序设计技术,让每个用户都觉得有一个计算机专门为他服务
- 异步
- 程序的执行不是一贯到底,而是走走停停,向前推进的速度不可预知
- 但只要运行环境相同,OS需要保证程序运行的结果也要相同
为什么要学习操作系统
-
综合课程 -结合许多不同的课程
- 程序设计语言
- 数据结构
- 算法
- 计算机体系结构
- 材料
- 操作系统概念和原理,源代码
- 技能
- 操作系统的设计与实现
-
已经有了很多操作系统,例如Windows,Linux
-
为什么要学习操作系统:
- 操作系统还在不停的发展,在工控等各种领域有强烈的需求!
- 操作系统很酷,很有用,有挑战。
-
操作系统:计算机科学研究的基石之一
- 计算机系统的基本组成部分
- 由硬件的发展和应用的需求驱动
- 学术和工业的持续推进
-
工业界
- 微软,谷歌、Facebook,,,
- 苹果:iPhone,iPad,,,以OS为核心
-
学术界
- ACM
- IEEE
- USENIX
- 国内:CCF
-
了解操作系统最新进展的会议:
- SOSP(每两年,1967 - …)
- USENIX(每两年,1994 - …)
-
学习操作系统很有挑战:
- Windowsxp 4500万行代码
- 实际操作系统的代码量巨大不可能完全掌握
- 目标是理解其核心内容
- 操作系统管理并发
- 并发导致有趣的编程挑战
- 操作系统代码管理原始硬件
- 时间依赖行为,非法行为,硬件故障
- 操作系统代码必须是高效的
- 低耗cpu、内存、磁盘
- 操作系统出错,就意味着机器出错
- 操作系统必须比用户程序拥有更高的稳定性
- 操作系统是系统安全的基础
-
操作系统需要权衡:
- 空间与时间
- 性能和可预测性
- 公平和性能
-
硬件方面,操作系统需要:
- 良好的硬件管理
- 合理的资源分配
- 例如:硬盘速度跟CPU,内存相差很多,操作系统需要协调处理
-
如何学习操作系统:
- 我听到的我会忘记
- 我看到的我能记住
- 只有我做过的我才能理解
-
操作系统实例
-
UNIX BSD
-
Linux仿UNIX
-
-
Windows家族
-
操作系统的历史
计算机硬件 应用需求的发展操作系统发展 -
早期计算机使用纸带传输程序和数据,操作系统只起到加载作用
-
CPU等硬件快速发展,计算机速度得到提升,性能未得到充分利用
- 内存越来越大,cpu执行多个程序
- 为了更好的利用计算机资源,并且更好的和用户交互,出现了分时系统
- 时钟来触发操作系统切换应用程序,中断
操作系统结构
ms-dos
linux
ucore:
消息传递调用取代函数调用 松耦合->微内核:
灵活和安全,代价是性能
外核:
和应用紧耦合,主要在学术界,性能好,安全
VMM 虚拟机监视器
运行在传统os中
优点:多操作系统共享硬件资源
启动 中断 异常 系统调用
disk:存放os
bios:基本i/o处理系统
boot loader:加载os,到内存 cpu可执行
通电后BIOS执行0xf000:fff0内存地址的内容
BIOS执行自检
post(加电自检)
检查完毕加载boot loader
bootloader一般放在硬盘的一个扇区512kb
系统调用 中断 异常
-
定义:
- 系统调用(来源于应用程序)
- 应用程序主动向操作系统发出服务请求
- 异常(来源于不良的应用程序)
- 非法指令或者其他坏的处理状态(如:内存出错)
- 中断(来源于外设)
- 来自不同的硬件设备的计时器和网络的中断
- 系统调用(来源于应用程序)
-
在计算机运行中,内核是被信任的第三方
-
只有内核可以执行特权指令
-
为了方便应用程序
操作系统如何设计实现中断 异常 系统调用
它们三者有什么区别和特点
- 源头
- 中断:外设
- 异常:应用程序意想不到的行为
- 系统调用:应用程序请求操作系统提供服务
- 处理时间
- 中断:异步
- 异常:同步
- 系统调用:异步或同步
- 响应
- 中断:持续,对用户应用程序是透明的
- 异常:杀死或者重新执行意想不到的应用程序指令
- 系统调用:等待和持续
物理内存管理 连续内存分配
地址空间定义
逻辑地址空间与物理地址空间
逻辑地址生成
以上为地址相关知识,接下来内存分配相关知识
连续内存分配和内存碎片
连续内存分配:分配的地址是连续的
###碎片整理
####紧凑(compaction)
####碎片整理:分区对换(Swapping in/out)
非连续内存分配:分段
本章内容:
为社么要采用非连续内存分配
分段
分页
页表
连续分配内存的缺点
- 分配给一个程序的物理内存是连续的
- 内存利用率较低
- 有外碎片、内碎片的产生
非连续分配内存的优点缺点
非连续分配的缺点
- 一个程序的物理地址空间是非连续的
- 更好的内存利用和管理
- 允许共享代码与数据(共享库等…)
- 支持动态加载和动态链接
非连续分配的缺点
- 如何建立虚拟地址和物理地址直接的转换
- 软件方案
- 硬件方案
两种硬件方案
分段
分页
分段
需要关注的问题:
1. 程序的分段地址空间
2. 分段寻址方案
这样的设计需要一个映射机制映射逻辑地址到物理地址 :
分段寻址方案:
非连续分页:分页
分段机制用的很少,更多的是使用分页机制
分段的大小是可变的 分页内存的划分是有固定大小的帧(Frame)的
本节重点:
1. 分页地址空间
2. 页寻址方案
- 划分物理地址内存至固定大小的帧(Frame)
- 大小是2的幂,e.g.,512,4096,8192
- 划分逻辑地址空间至相同大小的页(Page)
- 大小是2的幂,e.g:512,4096,8192
- 建立方案 转换逻辑地址为物理地址(pages to frames)
- 页表
- MMU/TLB
帧(Frame)
o:offset
上图不明,只做参考
-
解析 :
用9bit可以表示2的9次方512的地址偏移,即帧的大小是512
3,6 表示第三段 偏移6 得:物理地址=3*512+6=1542 -
以上为物理帧的表示,接下来为逻辑地址页的实现
页的计算和帧的技术相似
接下来逻辑地址和物理地址映射:
非连续内存分配:页表
概述
MMU内存管理单元里的TLB
二级页表 多级页表
反向页表
虚拟内存
覆盖技术
上世纪89十年代技术,为了应对当时内存小的状况
内存中要有一段常驻内存来调度内存的覆盖
这个技术为面对当时的生态的的技术 现在很少使用
交换技术
虚存技术