操作系统 知识点总结
![/%E7%9F%A5%E8%AF%86%E7%82%B9%E6%80%BB%E7%BB%93-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/featured-image.png /%E7%9F%A5%E8%AF%86%E7%82%B9%E6%80%BB%E7%BB%93-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/featured-image.png](/%E7%9F%A5%E8%AF%86%E7%82%B9%E6%80%BB%E7%BB%93-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/featured-image.png)
简介:OS
知识点总结
操作系统基础
什么是操作系统?
操作系统本质上是一个运行在计算机上的软件程序 ,主要用于管理计算机硬件和软件资源。
操作系统的功能?
进程管理 存储管理 文件管理 设备管理 网络管理 安全管理
用户态和内核态
什么是用户态和内核态?
用户态进程只能访问用户程序的数据,内核态进程可以访问所有系统资源。
- 用户态(User Mode) : 用户态运行的进程可以直接读取用户程序的数据,拥有较低的权限。
- 内核态(Kernel Mode) :内核态运行的进程几乎可以访问计算机的任何系统资源,拥有非常高的权限。
为什么要有用户态和内核态?只有一个内核态不行么?
为了保证系统的安全性、稳定性和性能。
- 如果只有用户态,应用程序无法访问到受保护的系统资源。
- 如果只有内核态,所有进程共享系统资源,会造成系统资源冲突,影响系统的性能和安全性。
用户态和内核态是如何切换的?
三种方式:系统调用 中断 异常
- 系统调用:用户程序主动阻塞
- 中断:来自于处理器外部
- 异常:来自于当前指令
系统调用
什么是系统调用?
系统调用是应用程序与操作系统之间进行交互的一种方式,通过系统调用,应用程序可以访问操作系统底层资源例如文件、设备、网络等。
当用户程序需要操作系统级别的资源时,必须通过系统调用的方式向操作系统提出服务请求,并由操作系统代为完成。
系统调用和普通库函数调用非常相似,只是系统调用由操作系统内核提供,运行于内核态,而普通的库函数调用由函数库或用户自己提供,运行于用户态。
分类:设备管理 文件管理 进程管理 内存管理
系统调用的过程了解吗?
- 用户程序发起系统调用,并主动进入阻塞态。
- CPU收到中断信号,进入内核态,查询中断向量表,执行相应的中断服务程序。
- 中断服务程序完成后,返回到用户态,唤醒用户程序。
- 用户程序继续执行。
进程和线程
什么是进程和线程?
进程是计算机中正在运行的一个程序实例。是资源分配的基本单位。
线程和进程类似,但是更加轻量。是处理机调度的基本单位。
进程和线程的区别是什么?
- 一个进程中可以有多个线程。多个线程共享进程的堆和方法区,但是每个线程有自己的栈空间和程序计数器。
- 进程切换开销大,但是有利于资源的管理和保护。线程正相反。
有了进程为什么还需要线程?
- 进程切换开销大,线程更加轻量级。
- 多线程可以更加充分的利用到多核处理器。
- 线程间通讯更加方便,不需要经过内核。
为什么要使用多线程?
- 硬件层面:现在的CPU核数越来越多,多线程可以更加充分的利用到多核处理器。
- 软件层面:现在的大型软件并发量越来越大,多线程并发编程正是开发高并发系统的基础。
线程间的同步的方式有哪些?
五种方式:互斥锁(Mutex) 读写锁(Read-Write Lock) 信号量(Semaphore) 屏障(Barrier) 事件(Event)
PCB 是什么?包含哪些信息?
进程控制块:是操作系统中用来管理和跟踪进程的数据结构,每个进程都对应着一个独立的 PCB。
包含:进程的描述信息、调度信息、对资源的需求信息、打开文件表、保存的处理机现场。。。
进程有哪几种状态?
创建 就绪 运行 阻塞 结束
进程间的通信方式有哪些?
匿名管道 命名管道 信号 信号量 消息队列 共享内存 套接字
- 匿名管道:父子进程或者兄弟进程之间通信。
- 命名管道:以磁盘文件的方式存在,可以实现任意两个进程通信。
- 信号:只是一种通知信号。
- 信号量:Semaphore,用户进程同步和互斥。
- 消息队列:消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识。消息队列存放在内核中,只有在内核重启或者显式地删除一个消息队列时,该消息队列才会被真正的删除。消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取.比 FIFO 更有优势。消息队列克服了信号承载信息量少,管道只能承载无格式字 节流以及缓冲区大小受限等缺点。
- 共享内存:多个进程可以访问同一块内存空间。需要依靠某种同步操作,如互斥锁和信号量等。可以说这是最有用的进程间通信方式。
- 套接字:用于不同主机的进程间通讯。
进程的调度算法有哪些?
先到先服务算法 短作业优先算法 时间片轮转算法 优先级调度算法 多级反馈队列算法
什么是僵尸进程和孤儿进程?
僵尸进程:进程已经终止,但是PCB和占用的资源没有得到释放。
孤儿进程:子进程仍在运行,但是父进程已经终止或不存在。
僵尸进程 :子进程已经终止,但是其父进程仍在运行,且父进程没有调用 wait()或 waitpid()等系统调用来获取子进程的状态信息,释放子进程占用的资源,导致子进程的 PCB 依然存在于系统中,但无法被进一步使用。这种情况下,子进程被称为“僵尸进程”。避免僵尸进程的产生,父进程需要及时调用 wait()或 waitpid()系统调用来回收子进程。
孤儿进程 :一个进程的父进程已经终止或者不存在,但是该进程仍在运行。这种情况下,该进程就是孤儿进程。孤儿进程通常是由于父进程意外终止或未及时调用 wait()或 waitpid()等系统调用来回收子进程导致的。为了避免孤儿进程占用系统资源,操作系统会将孤儿进程的父进程设置为 init 进程(进程号为 1),由 init 进程来回收孤儿进程的资源。
如何查看是否有僵尸进程?
使用top命令,进程状态为Z
死锁
什么是死锁?
多个进程占有着资源,并请求其他资源。相互等待,形成了循环等待链。导致所有进程无限期阻塞。
产生死锁的四个必要条件是什么?
互斥 请求和保持 非抢占式 循环等待
能写一个模拟产生死锁的代码吗?
|
|
精简版
|
|
解决死锁的方法
预防 避免 检测 解除
死锁的预防
资源静态分配(打破请求并保持条件):进程必须在执行前就必须申请到所需的全部资源。
资源按序申请(打破循环等待条件):资源只能按照约定好的顺序进行申请。
死锁的避免
银行家算法:在每次资源分配前都判断系统是否会进入到不安全状态
死锁的检测
定时地运行一个 “死锁检测” 的程序,利用资源分配图判断系统内是否出现死锁
死锁的解除
- 结束所有进程,系统重启
- 结束所有涉及死锁的进程
- 逐个结束涉及死锁的进程,直到死锁解除
- 抢占资源
内存管理
内存管理主要做了什么?
内存的分配与回收 地址转换 内存扩充 内存映射 内存优化 内存安全 …
什么是内存碎片?
内部碎片:已经分配给进程,但未使用的内存空间
外部碎片:未分配给进程,但又无法使用到的内存空间
- 页式内存管理 会导致 内部碎片
- 段式内存管理 会导致 外部碎片
- 段页式内存管理 都会导致
常见的内存管理方式有哪些?
连续内存管理 非连续内存管理
虚拟内存
什么是虚拟内存?有什么用?
虚拟内存(Virtual Memory) 是计算机系统内存管理非常重要的一个技术,本质上来说它只是逻辑存在的,是一个假想出来的内存空间,主要作用是作为进程访问主存(物理内存)的桥梁并简化内存管理。
隔离进程,提高物理内存利用率,简化内存管理,多个进程共享物理内存,提高内存使用安全性,提供更大的可使用内存空间
什么是虚拟地址和物理地址?
程序访存时访问的是虚拟地址,经过内存管理单元转换成物理地址,再访存。
什么是虚拟地址空间和物理地址空间?
- 虚拟地址空间是虚拟地址的集合,是虚拟内存的范围。每一个进程都有一个一致且私有的虚拟地址空间。
- 物理地址空间是物理地址的集合,是物理内存的范围。
虚拟地址与物理内存地址是如何映射的?
虚拟地址 = 逻辑页号 + 页内地址
物理地址 = 物理页号 + 页内地址
通过查询页表,将逻辑页号转换成物理页号
分段机制为什么会导致内存外部碎片?
段的长度不固定
单级页表有什么问题?为什么需要多级页表?
使用单级页表会导致页表本身很大,浪费内存空间
TLB 有什么用?使用 TLB 之后的地址翻译流程是怎样的?
TLB是快表,缓存了部分页表。是为了加快地址转换速度
换页机制有什么用?
使得应用程序可以使用的内存空间大于物理内存大小,代价是页面调入调出消耗时间
常见的页面置换算法有哪些?
页面置换算法:用来选择淘汰哪一个物理页的规则
最佳页面置换算法(OPT),先进先出算法(FIFO),最近最久未使用算法(LRU),最不经常使用算法(LFU),时钟置换算法(Clock)
FIFO算法存在Belady异常:页面数增多但缺页率反而提高
分页机制和分段机制有哪些共同点和区别?
共同点:
- 都是非连续内存管理方式
- 都采用了地址映射的方法,将虚拟地址映射到物理地址,以实现对内存的管理和保护。
区别:
- 分页以页作为基本单位,长度固定;分段以段作为基本单位,长度不固定。
- 分页会产生内部碎片;分段会产生外部碎片。
- 分页机制对程序没有任何要求,程序只需要按照虚拟地址进行访问即可;而分段机制需要程序员将程序分为多个段,并且显式地使用段寄存器来访问不同的段。
局部性原理
时间局部性:当前访问的页,可能会被反复访问。
空间局部性:当前访问的页,附近的页可能也会被访问到。
文件系统
文件系统主要做了什么?
文件系统主要负责管理和组织计算机存储设备上的文件和目录
存储管理,文件管理,目录管理,文件访问控制
硬链接和软链接有什么区别?
硬链接:指向源文件的inode节点,共享同一个文件。
软链接:类似于快捷方式,只是保存了文件路径。
硬链接为什么不能跨文件系统?
因为不同文件系统的inode节点号可能冲突
常见的磁盘调度算法有哪些?
先来先服务算法(FCFS),最短寻道时间优先算法(SSTF),SCAN,C-SCAN,LOOK,C-LOOK