MEMO
- OS:管理计算机硬件的软件;为应用程序提供基础;充当计算机硬件与用户之间的媒介。存于磁盘。
一个一直运行在计算机上的程序(也叫kernel内核);- 计算机系统 可以粗分为:硬件、OS、应用程序、用户;
or 硬件、软件、数据。- 计算机逻辑层次:应用程序-->系统程序-->OS-->硬件
- 程序:OS(kernel内核)、系统程序(不是内核一部分)、应用程序;
5.多核单CPU:一般情况,多核间通信共享内存。
多个单核CPU:每个CPU较为独立。- L1高速缓存:内置于CPU核
OS 功能
- 用户视角:便于使用、资源管理
- 系统视角:资源分配器;控制程序(管理用户程序执行)
多道程序设计:通过合理安排使得CPU总有一个执行任务,提高CPU利用率。
因为要实现多道程序设计,OS在内存中要同时保存多个任务-->作业池 job pool
- 虚拟内存优点:用户可以执行内存大于物理内存的程序。
OS执行
现代OS是中断驱动的,陷阱(异常)是软件生成中断(可能因为一些/0错误、用户特定请求)
- 用户模式
- 内核模式:遇到陷阱or中断
内核存储结构
- 链表、堆栈、队列
- 树(红黑树)
- 哈希函数、哈希表
- 位图:第i位与第i个资源有关。
计算机系统组成
存储结构
- 内存:(主存)CPU能访问的存储空间,易失性,断电后数据消失。ROM、DRAM、RAM、
- 外存:(辅存)断电后仍然可以保存数据,磁盘、硬盘、固态磁盘(快于磁盘)
寄存器-->高速缓存L1、L2……-->主存-->固态存储-->硬盘、、、
I/O结构
- 当程序要从硬盘读取一个文件时,先检查内存中是否有数据。若没有数据,则执行实际I/O。I/O操作执行时,用户线程将阻塞等待数据从硬盘写到内存中。对于用户来说线程是被阻塞的。
- 不中断:CPU忙等,不断轮询访问是否结束I/O,浪费CPU
- 有中断:CPU调度其他线程,I/O执行完之后,原线程发中断信号通知CPU,然后恢复进程(or线程)上下文信息。
计算机体系结构
- 单处理器系统:系统只有1个通用CPU
- 多处理器系统
- 集群系统
多处理器系统
也叫并行系统、多核系统。
-
优点
- 增加吞吐量:短期内完成更多工作
- 规模经济:共享数据等待
- 增加可靠性:如果某个核故障,可顶替
-
非对称处理系统(主从系统):高可靠性(从处理器向主处理器要任务or做预先规定任务)
-
对称处理系统SMP:现代大多OS支持,每个处理器都参与。高效
集群系统
≥2个独立系统组成,每个系统可单可多组合。松耦合。
- 对称集群:都运行程序,互相监督
复杂的应用调试 - 非对称集群:一台跑程序、一台热备份(监视活动服务器)
缺点:一台过度利用,一台没充分利用
提供高可用性服务,相比单核、SMP有更强大的计算能力-->并行计算
OS服务
- 提供用户功能
- 用户界面:CLI命令行界面 or 批处理界面 e.g.GUI图形用户界面
- 程序执行:程序加载到内存中运行
- I/O操作
- 文件系统操作
- 通信:进程间(共享内存、消息传递)、网络连接的不同计算机之间
- 错误检验
- 确保系统本身高效
- 资源分配:CPU周期、I/O设备……
- 记账:记录用户使用资源的类型和数量
- 保护与安全
系统调用
系统调用提供OS服务接口,与kernel直接相关,仅在kernel态运行。。通过中断-->向内核请求-->获取内核服务。通常用C/C++/汇编语言编写(fast)。
而API是应用编程接口,一系列定义好的函数e.g.printf()、read(),提高程序可移植性。
类型 | Windows | UNIX |
---|---|---|
进程控制 | CreateProcess() | fork() |
CreateProcess() | fork() | |
WaitForSingleObject() | wait() | |
文件管理 | CreateFile() | open() |
ReadFile() | read() | |
WriteFile() | write() | |
CloseHandle() | close() | |
设备管理 | - | - |
信息维护 | - | - |
通信 | CreatePipe() | pipe() |
CreateFileMapping() | shm_open() | |
MapViewOfFile() | mmap() |
向OS传递参数
- 利用register寄存器
- 存在块or表中,寄存器存储 块or表 的地址
- 压用堆栈,利用OS弹出
系统程序
也叫系统工具,处于应用程序与OS交界层。
种类1. 文件管理 2. 状态信息(时间、内存、磁盘空间……) 3. 文件修改 4. 程序语言支持 5. 程序加载执行 6. 通信 7. 后台服务
OS设计
用户目标and系统目标
策略与机制分离
- 策略policy:what to do
- 机制mechanism:how to do,实现
这样“实现”对功能不敏感更加可取,避免每次策略policy的改变要重定义很多很多东西。(这个好理解,和各种分层、函数道理一样)
OS常见结构
简单结构
MS-DOS:没有很好区分功能的接口and层次。
早期UNIX:两部分:内核+系统程序。发展成单片结构(UNIX、Linux、Windows仍采用简单单片结构)
分层方法
自顶向下,简化构造和调试。向上隐藏具体实现。
难点:合理定义各层、效率较差。
微内核
Mach OS。消息传递通信模型,都在内核内完成,大多数服务作为用户进程运行,而不是内核进程。so一个服务出错不会影响OS其他部分。
优点:利于拓展。可移植性强
可加载的内核模块
现代UNIX(Solaris、Linux、Mac OS)和 Windows实现
- 核心:内核提供核心服务,其他服务在内核运行时动态实现。
混合系统
Mac OS X 和 两个移动操作系统:iOS、Android(有Dalvik虚拟机)
OS调试
故障分析
- 进程故障-->写到日志文件,OS也进行核心转储 core dump,捕获进程内存,保存到另一文件以便以后分析。
- 内核故障called崩溃 crash-->错误信息保存到日志文件,内存状态保存到崩溃转储 crash dump
OS生成
SYSGEN程序,获取硬件配置
系统引导
生成OS后,硬件需要知道内核在哪。--> 引导程序汇编语言编写,存放于固件,“固化的软件”,不是外存!!OS存放于磁盘,e.g.只读内存ROM。
引导程序定位内核,加载到内核执行。e.g.GRUB引导Linux系统。
- 开机/重启时运行,初始化各组件,定位OS,加载到内存。