清华大学os网课笔记
操作系统的概述
操作系统是一个控制程序
管理应用程序,
为应用程序提供服务
杀死程序
资源管理:管理外设,分配资源
作为抽象层在物理层之上
作为系统软件为应用软件提供支持
面向应用程序的接口:
shell
面向计算机内部的接口:
kernal
硬件三大套:cpu 内存 磁盘
os kernel的特征:
*并发**:一段时间内多个程序同时运行
并行*: 一个时间点内多个程序同时运行(多个cpu)
*共享**:同时访问,互斥共享
*虚拟**:cpu->进程,磁盘->文件,内存->地址空间。多道文件设计,让用户觉得自己独享整个计算机。
*异步**:程序的执行是走走停停的,向前推进的速度不可预知。到那时只要环境相同,运行的结果也要相同。
操作系统历史
- 移动终端上linux应用广泛
- cpu性能越越强
- 多道程序设计
- 分时调度:在于时钟会定时产生中断,每千分之一秒
- 未来的发展趋势:多核多处理,分布式操作系统
操作系统结构
- 微内核设计:尽然把内核服务放到用户空间。中断处理,消息传递 放到内核中。
文件系统,网络协议放到用户空间,以服务的方式松耦合存在,而非函数调用的方式。
代价是性能。
操作系统启动
- bios->bootloader->os
- disk:存放os
- bios:基本io处理系统,开机检验外设
- bootloader:加载os,让os从硬盘到内存中去
- bios从一个特定的地址执行,cs:ip(cs:段寄存器,ip:指令寄存器)
- bootloader一般放在disk的第一个主引导扇区(512字节)
操作系统中的事件:中断,异常和系统调用
- 系统调用:异步或同步,来源于应用程序,应用程序主动向os发出服务请求
- 异常:同步,来源于不良的应用程序,非法指令(内存出错)
- 中断:异步,来源于外设(鼠标的移动,键盘的输入),不同的硬件设备的计时器和网络的中断
- 应用程序不能直接访问外设。内核是被信任的,内核统一的向程序暴露接口。
计算机体系结构/内存分层
- 抽象:逻辑地址空间
- 保护:独立地址空间
- 共享:访问相同内容
- 虚拟化:更多的地址空间
- 主存:物理内存,接电从硬盘读数据到主存
地址空间
- 物理地址空间—内存条代表的贮存,硬盘代表的磁盘
- 逻辑地址空间—一个运行的程序所拥有的内存范围 (0,max)
- cpu—mmu查找逻辑地址对应的物理地址,如果没找到就到内存中去找
操作系统需要建立逻辑地址和物理地址的关系。 - 操作系统的地址安全检测
连续内存分配
- 空闲内存不能被利用
- 外部碎片
- 内部碎片
分区的动态分配
首次适配(first fit)
:找到第一个满足 程序需求的连续空闲块- 优点*:简单
- 缺点*:容易产生不合适的空闲块
最佳匹配(best fit)
:使用最小的满足要求的空闲块- 优点*:简单
- 缺点*:容易产生不合适的空闲块
最差分配原则(worst fit)
:使用最大的满足要求的空闲快- *优点**:分配中等尺寸效果最好
- *劣势**:
连续的内存分配算法
- 压缩式
- 交换式
非连续内存分配:分段
- 难点在于逻辑地址到物理地址的映射
- 操作系统维护段表
非连续内存的分配:分页
- 划分物理内存大小—帧frame
- 一个物理地址是一个二元数组(f,o)
- f—帧号(F位,一共有2的F次方个帧)
- o—帧内偏移位(s位,每帧有s的s次方字节)
- 物理地址
2^s*f + o
- 划分逻辑地址—页page
- 一个程序的逻辑地址空间被划分为大小相等的页
- 页内偏移的大小
- 页表
- 页表
- 建立方案 转换逻辑地址为物理地址page to frames
- cpu根据page number和 offeset在page table内寻址,之后根据找到的frame number 和offset去物理地址寻址
- 快表TLB使用关联内存实现
- 页表太大的问题:使用多级页表
- 多级页表的最后一层才是真正的寻找物理地址
- 反向页表
*基于hash的方向页表: