什么是操作系统?
- 管理计算机硬件和软件资源的程序,是计算机的基石
- 操作系统本质是运行在计算机上的软件程序,管理计算机硬件和软件资源
- 操作系统的存在屏蔽了硬件层的复杂性,像一个负责人统筹硬件和软件资源
- 操作系统内核是操作系统的核心,负责内存管理,文件管理,应用程序管理,硬件设备管理
站在JVM的角度解读进程和线程?
线程被称为轻量型的进程,是比进程更小的运行单位,但是和进程不同的是,同一类线程共享同一组系统资源,共享同一块内存空间,线程和线程之间可能相互影响。而进程是相互独立的,互不干扰。
一个进程里有多个线程,这些线程共享进程的堆资源和方法区资源(JDK1.8后被元空间取代),每个线程都拥有属于自己的虚拟机栈,本地方法栈,程序计数器;线程执行开销小,但不利于资源的管理和保护,进程相反
线程分为几个状态(生命周期)?
- new
- Runnable
- Blocked
- waiting —–死死的等待
- Timed_waiting ——-超时等待
- terminated
用户态和系统态?
用户态(常态):以用户态运行的进程可以读取用户程序的所有数据;
系统态:以系统态运行的进程或者程序可以访问计算机所有的资源,不受约束;
系统调用?
当我们想要调用操作系统提供的系统态子功能的时候,我们就需要通过系统调用的方式:由系统代理完成的操作叫系统调用
系统调用按照功能分为:
- 设备管理
- 进程控制
- 进程通信
- 内存管理
- 文件管理
进程通信的方式?
- 匿名通道
- 有名通道
- 信号
- 消息队列
- 信号量
- 共享内存
- 套接字
线程同步的方式?
- 互斥量
- 信号量
- 事件
进程的调度算法?
- 先到先服务(FCFS)调度算法:从就绪队列中选择一个最先进入该队列的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度。
- 短作业优先服务(SJF)调度算法:从就绪队列中选出一个估计运行时间最短的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度
- 时间片轮转调度算法:时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法,又称 RR(Round robin)调度。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间
- 多级反馈队列调度算法:前面介绍的几种进程调度的算法都有一定的局限性。如短进程优先的调度算法,仅照顾了短进程而忽略了长进程 。多级反馈队列调度算法既能使高优先级的作业得到响应又能使短作业(进程)迅速完成。,因而它是目前被公认的一种较好的进程调度算法,UNIX 操作系统采取的便是这种调度算法。
- **优先级调度算法:**为每个流程分配优先级,首先执行具有最高优先级的进程,依此类推。具有相同优先级的进程以 FCFS 方式执行。可以根据内存要求,时间要求或任何其他资源要求来确定优先级。
操作系统的内存管理主要是做什么?
内存的分配和回收,地址的转换(逻辑地址转换成物理地址)
操作系统的内存管理机制?
分为 连续分配管理方式 和 非连续分配管理方式
连续分配管理方式: 块式管理
非连续分配管理方式: 页式管理、段式管理、段页式管理
- 块式管理:内存分成一块一块,当程序需要内存的时候,操作系统就分配一块给它。内存利用率低,容易产生大量的内存碎片
- 页式管理:将主存分成大小相等且固定的一页一页的形式,页较小。相对于块式管理,提高了划分力度,使得内存利用率提高,减少了内存碎片。通过页面对应逻辑地址和物理地址。
- 段式管理:把主存分成一段一段,划分力度大于页式管理,每段比页还小。与页式管理不同的是,每个段都拥有实际意义(定义了一组逻辑信息),而页式管理的页并无实际意义。段式管理通过段表对应逻辑地址和物理地址
- 段页式管理:将主存分成一段一段,每段在细分成一页一页,段与段之间和段的内部都是离散的
分页内存管理需要解决的两个问题?
- 虚拟地址到物理地址的转换要快
- 解决虚拟地址空间大,页表也会很大
快表(解决问题1):
快表我们可以看作特殊的高速缓冲存储器,它缓存页表的部分信息或者全部信息
当使用了快表后地址转换的流程:
- 根据虚拟地址中的页号查快表
- 如果该页存在快表内,直接读取相应的物理地址
- 如果不在就访问内存中的页表,从页表获取物理地址,并将该映射表缓存到快表
- 当快表填满后,会按照一定策略淘汰快表中的一个页
多级页表(解决问题2):
引入多级页表的主要目的是为了避免把全部页表一直放在内存中占用过多空间,特别是那些根本就不需要的页表就不需要保留在内存中。多级页表属于时间换空间的典型场景,一级页表放主存,其他级别的页表放磁盘
分页机制和分段机制的共同点?
共同点:
- 分页机制和分段机制都是为了提高内存利用率,减少内存碎片
- 页和段都是离散存储的,所以两者都是离散分配内存,但是页和段内部都是连续的
不同点:
- 页的大小式固定的,由操作系统决定;而段的大小不固定,取决于我们运行的程序
- 分页仅仅是为了满足操作系统内存管理的需求,而段式逻辑信息的单位,在程序中体现为代码段,数据段,可以更好的满足用户的需求
逻辑(虚拟)地址和物理地址?
逻辑地址由操作系统决定,例如C语言当中指针所存储的值就是一个逻辑地址,物理地址式内存单元真正的地址
为什么需要虚拟地址?
因为直接对物理内存进行操作会带来严重问题,比如可能对操作系统造成伤害以及给同时运行多个程序造成困难
什么是虚拟内存?
虚拟内存为每个进程提供了一个一致的、私有的地址空间,它让每个进程产生了一种自己在独享主存的错觉(每个进程拥有一片连续完整的内存空间)
虚拟内存的重要意义是它定义了一个连续的虚拟地址空间,并且 把内存扩展到硬盘空间
虚拟内存技术的实现?
- 请求分页存储管理
- 请求分段存储管理
- 请求段页存储管理
页面置换算法的作用?常见的页面置换算法有哪些?
地址映射过程中,如果我们要访问的页不在主存当中就发生缺页中断,当发生缺页中断,如果当前内存中并没有空闲的页面,操作系统就必须在内存选择一个页面将其移出内存,以便为即将调入的页面腾出空间,而用来选择淘汰哪一页的规则叫做页面置换算法,可以把页面置换算法看成是淘汰页面的规则
OPT 页面置换算法(最佳页面置换算法):
最佳(Optimal, OPT)置换算法所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。但由于人们目前无法预知进程在内存下的若千页面中哪个是未来最长时间内不再被访问的,因而该算法无法实现。一般作为衡量其他置换算法的方法。
FIFO (First In First Out) 页面置换算法(先进先出页面置换算法):
总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面进行淘汰。
**LRU (Least Currently Used)页面置换算法(最近最久未使用页面置换算法): **
LRU算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 T,当须淘汰一个页面时,选择现有页面中其 T 值最大的,即最近最久未使用的页面予以淘汰。
LFU (Least Frequently Used)页面置换算法(最少使用页面置换算法):
该置换算法选择在之前时期使用最少的页面作为淘汰页。