操作系统:重点总结(面试常客)
1. 什么是操作系统:
(1) 操作系统是计算机管理软硬件资源的程序,是计算机系统的内核和基石
(2) 本质上其实就是运行在计算机系统上的程序
(3) 给用户提供了一个和计算机系统交互的界面
(4) 操作系统分为这个内核和外壳,内核的话就是操作硬件的系统,外壳的话就是围绕着内核的程序
2. 什么是系统调度:
(1) 首先需要知道用户态和系统态进程
(2) 用户态:用户自身运行的程序,也就是一般我们自己运行的一些程序,可以访问用户自身的数据
(3) 系统态:系统态为可以访问计算机任何资源的进程,比如文件管理
(4) 系统调度则为用户假设在用户进程内需要调度系统态进程则需要通过系统调度,比如内存分配,进程管理等
3.进程与线程的区别:
基于操作系统来说,进程是内存分配的最小单位,线程是cpu执行的最小单位,基于JVM来说的话,线程共享的区域为堆和方法区,线程独有的是虚拟机栈,本地方法栈,程序计数器
3. 进程之间的通信:
(1) 管道
(2) 信号
(3) 消息队列
4. 线程之间的同步问题:
a) 为什么需要同步:主要是为了保护共享资源的一个安全性,避免冲突问题
b) 操作系统一般有三种方式来解决同步问题
i. 互斥量:想要操作共享变量必须获取互斥量,比如说sychonized,各种lock的实现机制都是基于互斥量的持有
ii. 信号量:它允许同一时刻多个线程访问同一资源,但是要控制线程数量
iii. 事件:比如wait,nodify,通过通知的方式实现多线程同步,控制线程的优先级
5. 进程的调度算法
a) 先到先服务:按请求顺序进行排序,先请求的先调度执行
b) 时间片轮转:给线程分配一定的时间片,在时间片内执行,假设没有执行完就上下文切换
c) 优先级:给进程分配优先级,按优先级顺序进行线程调度,优先级取决于内存,时间
d) 短作业优先:先调度执行时间短的进程
e) 多级反馈队列:目前主流的线程调度方式,通过多个队列对应不同优先级线程,将长期需要CPU调度的线程移动到优先级较低的队列中,将IO密集型或线程交互多的线程移动到优先级较低的队列中
6. 操作系统的内存管理:
(1) 内存管理主要负责内存的分配和回收,地址抓换(比如逻辑地址转为物理地址)
(2) 内存管理机制:
a) 连续管理方式和非连续管理方式
b) 连续管理方式为在内存中分配连续的一块一块的内存,用户程序分配在其中一块内存中运行,这就是块式管理方式;
非连续管理方式就是用户程序以散列的方式存储在内存中,比如页式存储,段式存储,页式存储为把内存分配为一页一页,比块式更小,更好的CPU利用率,通过页表来存储一些逻辑信息,其次就是段式存储方式,这种方式比页的划分力度更大,用户程序一段一段的散列存储在内存中,最后一种就是段页式,它的实现是在,分段的基础上再分页,段和段之间及段的内部都是散列的
7. 逻辑地址和物理地址
a) 逻辑地址为,平时开发中和用户交互的就是逻辑地址
b) 物理地址:CPU,存储器实际进行数据交换的地址,内存中的唯一标识
8. 快表和多级页表:
a) 快表:为了解决虚拟地址到物理地址的转换速率,加速访问页表中数据的一种方式,可以理解为一个缓存,缓存物理地址,通过逻辑地址能够快速访问
b) 多级页表:时间换空间的典型实例,主要基于局限性原理
9. 分页和分段的的异同:
a) 相同点:分页和分段机制都是为了提高CPU利用率,分页和分段都是散列存储在内存中,但其内部是连续的
b) 不同点:页的大小是固定的由操作系统决定,段的大小是不固定的,取决于当前运行的程序,段相比页有更好的灵活性,可以体现数据段,代码段
10. CPU寻址以及为什么需要虚拟地址
a) CPU寻址主要就是为了通过虚拟地址访问物理地址,通过内存管理单元来实现
b) 为什么要有虚拟地址空间:
i. 如果没有虚拟内存,则用户可以直接操作物理内存,会导致操作系统的崩溃,同时也会出现多个进程运行地址冲突无法正常运行的问题
ii. 虚拟地址的好处:主要还是使进程之间通过虚拟地址进行隔离,避免对实际物理地址的更改,其次就是当内存空间小的时候,内存管理器会通过虚拟地址把物理内存存到硬盘中
11. 虚拟内存
a) 当用户启动了多个进程,导致占用内存远远超过了物理内存,此时为什么程序还能持续工作呢,正是由于虚拟内存的存在,通过虚拟内存,可以让进程拥有比物理内存更大的一个空间,且虚拟内存为进程提供了一致,独立的空间;其主要目的还是为了通过虚拟内存,实现物理内存到硬盘的一个扩展
b) 局部性原理:这个就是解决为什么只要加载程序的部分内存到内存中就可以运行的依据,分为时间局部性和空间局部性
i. 时间局部性:时间局部性主要体现在指令或者数据可能会被重复的访问,那么我将近来使用的指令或者数据保存到告诉缓存中,提高指令和数据的访问速度
ii. 空间局部性:空间局部性主要体现在指令的执行由于顺序存放,顺序执行的特点,一般是在一个地址范围内,数据的存放也一般以聚簇的形式存在,比如数组,链表,然后将将要取的数据放入到缓存中
iii. 虚拟内存实际上实现了一种“内存—外存”两级存储器的结构,利用局部性原理实现高速缓存
12. 虚拟存储器
a) 虚拟存储器理论上就是一个比内存空间更大的一个供程序运行的区域,为什么叫虚拟存储器,实际上就是通过虚拟内存程序可以只执行程序的一部分就可以运行程序,内存中不存在的程序就到外存中加载到内存中运行,内存中不用的程序就会被调度到外存中
13.虚拟内存技术的实现:
(1)虚拟内存的实现需要建立在离散分配的内存管理方法上
(2)主要实现方法:
a.请求分页存储管理:基于分页存储管理,当一个程序需要加载到内存中运行时,只需要加入其部分页就可以运行,如果发现需要调度的页面不在内存中则通过页面调度算法实现淘汰页面并加入需要页面内的策略
b.请求分段存储管理:基于分段存储管理,同样只需要加入部分片段就可以运行程序,假设需要的某个段不在内存中,则通过段式置换方法将其加入到内存中执行
c.请求段页式存储管理:分页分段的结合,分段再分页
14.页面置换算法:
(1)为一种内存中页面的一个淘汰策略,以便加入需要的页面到内存中执行
(2)FIFO,LRU(最近最久未使用),LFU(最近最少使用)
(3)OPT:以后用不使用