操作系统是管理计算机硬件和软件资源的程序,是系统软件
用户态转为内核态需要向操作系统发起系统调用请求,操作系统接收到进程的系统调用请求后,就会从用户态切换为内核态,执行相应的系统调用,并将结果返回给进程,最后从内核态切换为用户态,进入内核态需要付出较大的开销(需要进行一系列的上下文切换和权限检查)
同时具有用户态和内核态主要是为了保证计算机系统的安全性、稳定性和性能
用户态–>内核态的三种方式
匿名管道
用于父子进程或兄弟进程之间的通信
有名管道
以磁盘的文件的方式存在,实现本机任意两个进程间的通信。遵循先进先出
信号
消息队列
信号量
是一个计数器,用于多线程对共享数据的访问
共享内存
使得多个进程可以访问同一块内存空间,需要依赖某种同步操作,如互斥锁和信号量等。
套接字socket
用于客户端和服务器之间的通信
先来先服务(FCFS)
从就绪队列里选择最先进入队列的进程为之分配资源
短作业优先(SJF)
从就绪队列里选择一个估计运行时间最短的进程为之分配资源
时间片轮转(RR)
每个进程被分配一个时间段,称为它的时间片,即允许运行的时间
多级反馈队列(MFQ)
根据先来先服务原则给就绪队列排序,为就绪队列赋予不同的优先级数,不同的时间片,按照优先级抢占CPU,既能使高优先级的作业得到响应又能使短作业(进程)迅速完成。
优先级调度
每个进程分配优先级,优先级高的进程先运行,具有相同优先级的进程以 FCFS 方式执行
多个进程在运行过程中,由于竞争资源或彼此通信而造成的阻塞现象
静态分配策略
破坏占有并等待
条件,一个进程在执行前就获得到它所需要的的全部资源
层次分配策略
破坏循环等待
条件,将资源分为不同等级的层次,进程在申请高层次的资源时必须先申请低层次的资源,在释放低层次的资源时必须先释放高层次的资源,在申请同一层资源中的另一资源时需要释放已得到的该层资源
银行家算法:
当一个进程申请使用资源的时候,银行家算法通过先 试探 分配给该进程资源,然后通过安全性算法判断分配后的系统是否处于安全状态,若不安全则试探分配作废,让该进程继续等待。
虚拟内存逻辑上存在,作为进程访问主存的物理桥梁并简化内存管理
隔离进程
进程通过自己私有的虚拟内存访问主存,一个进程中的代码无法改变其他进程或操作系统使用的物理内存。
提升物理内存利用率
操作系统只需要将进程当前正在使用的部分数据或指令载入主存。
简化内存管理
多个进程共享物理内存
提高内存使用安全性
地址翻译/地址转换:操作系统通过CPU中的MMU(内存管理单元)将虚拟地址转换为物理地址
连续的物理内存、每段大小不等
分段机制下的虚拟地址的组成:
具体的地址翻译过程如下:
连续等长的的物理页
分页机制下的虚拟地址的组成
具体的地址翻译过程如下:
属于MMU(内存管理单元)内部的单元,本质上是一块高速缓存。
使用了TLB的翻译流程:
先来先服务算法
最短寻道时间优先算法
能最小化寻道时间
易出现饥饿问题:远离磁头的请求长时间得不到服务
扫描算法(电梯算法):如果磁头从一个方向刚扫描完,请求才到的话。这个请求就需要等到磁头从相反方向过来之后才能得到处理。
循环扫描算法 :只往一个方向扫描,并且只按照一个方向扫描,直到到达磁盘边界,然后回到磁盘起点,重新开始循环。
边扫描边观察算法:边扫描边观察这个方向还有没有磁盘请求,没有就可以立刻调转磁头方向
均衡循环扫描算法:磁头移动的方向上已经没有磁道访问请求了,就可以立即让磁头返回,并且磁头只需要返回到有磁道访问请求的位置即可。