一.基本概念
1.什么是操作系统
- 操作系统适配不同的硬件,为软件提供统一的平台
- 是计算机中的一款基础软件
- 分为内核+外壳
2.什么是系统调用
用户态中可以通过系统调用转换成系统态,在系统态可以调用操作系统提供的功能。
用户态:用户态运行的进程,可以访问用户程序的数据
系统态:系统态运行的进程,可以访问操作系统的所有资源,不受限制
系统调用分类
- 设备管理
- 文件管理
- 进程管理
- 进程通信
- 内存管理
二.进程与线程
1.进程和线程的区别
进程 | 线程 |
---|---|
进程是资源分配的最小单位 | 线程是CPU执行的最小单位 |
进程间资源不共享 | 同一进程下的线程间资源共享 |
创建态 就绪态 运行态 阻塞态 结束状态 |
new runable waiting time_waiting bloked terminal |
2.进程间的通信方式(7种)
- 匿名管道
- 适用于具有亲缘关系进程
- 以文件的格式存储在内存中
- 有名管道
- 适用于本机的任意两个进程
- 以磁盘文件存储
- 严格遵循先进先出
- 信号
- 用于通知等待进程某个事件的发生
- 信号量
- 本质上是一个计数器
- 作用与多进程对共享资源的访问,实现进程间的同步
- 消息队列
- 存放在内存中,并有消息队列标识
- 读取循序可以不遵守队列顺序,可以按类型读
- 克服了信号消息少,匿名管道无符号字节流,以及缓冲区固定大小
- 内存共享
- 多个进程共享同一块内存,进程可以实时看到数据的修改
- 需要依赖某种同步方式,如互斥锁/信号量
- socket
- 适用于不同主机间的两个进程
- 是TCP/IP通信的基本操作单元
3.进程的调度算法(5种)
- 先来先服务调度算法(FCFS)
- 从就绪队列选取最早进入的进程
- 直到该进程执行结束或者被阻塞
- 短作业优先调度算法(SJF)
- 从就绪队列选择预估时间最短的进程
- 直到该进程完成或者发生阻塞
- 时间片轮训调度算法(RR)
- 为每个进程分配一个固定的时间片
- 时间片用完则切换
- 多级反馈队列调度算法
- 通过多级队列实现短进程可以迅速完成,并且优先级高的进程也会优先执行
- UNIX采用的算法
- 优先级调度算法
- 优先级高的进程先执行
三.内存管理
1.基本概念
- 块式存储(连续分配)
- 将内存切分成固定大小的几个块,为每个进程分配一个块
- 会造成空间碎片
- 页式存储(非连续分配)
- 将内存分成固定大小的页,页的大小远远小于块
- 提供了利用率,减少了空间碎片
- 通过页表对应逻辑地址和物理地址
- 段式存储(非连续分配)
- 段比页占用的空间更小
- 每一段是有逻辑意义
- 通过段表对应逻辑地址和物理地址
段页式存储(非连续分配)
快表(空间换时间)
- 目的:作为也变的缓存,加速逻辑地址到物理地址的转换
- 流程:首先访问快表,若快表存在则返回->若快表不存在,查询页表,并将结果保存至快表->快表快满时按一定的策略进行淘汰
- 类似于Redis
- 多级页表(时间换空间)
5.虚拟地址和物理地址
操作物理地址的缺点
- 用户程序直接操作内存,可能造成系统安全问题
- 不利于多个程序的运行
虚拟地址的优点
- 不同的进程间相互隔离,不会操作到别的进程的物理地址
- 可以通过虚拟地址访问比实际内存大的内存空间,通过将超出部分在内存和磁盘间的调入调出
- 相邻的虚拟地,在物理上不相邻
四.虚拟内存
1.什么是虚拟内存
- 通过虚拟内存实现比系统内存更大的空间
- 虚拟内存使得每个进程独享一片空间的感觉,使得每个进程在逻辑上共享
-
2.局部性原理
时间局部性
- 一个指令执行,不久后会再次执行
- 数据被访问,不久后会再次访问
- 主要原因是程序存在着大量的循环
- 空间局部性
- 一旦访问了某个存储单元,一段时间后会访问相邻的存储单元
3.虚拟存储器(时间换空间)
主要作用
访问数据不再内存中,调入内存
内存不够时,调出到外存中
4.虚拟内存技术实现
请求分页储存管理
请求分段存储管理
请求段页式存储管理
5.页面置换算法(4种)
前提:地址映射的页面不在内存中,则发生缺页中断。
将磁盘中的页面置换后,当前内存不足则会发生页面置换
置换算法
- 最佳页面置换算法(OPT):理想情况,一般用于衡量别的置换算法
- 先进先出置换算法(FIFO):淘汰最先进入内存的页面
- 最近未使用置换算法(LRU):记录每次访问的时间,淘汰最久未使用的页面
- 最少使用置换算法(LFU):维护一个时间排序的页面链表,队头是刚使用过的页面,队尾是最久未使用的页面。每次淘汰队尾元素。
LRU代码实现:使用双向链表,对头是最新元素,队尾是最久未使用元素,当队列达到一定长度,淘汰队尾元素。
五.死锁
死锁条件(4种)
- 互斥
- 请求并等待
- 不可剥夺
- 循环等待
解决办法
- 预防死锁
- 避免死锁
- 监测死锁
- 解除死锁