操作系统查漏补缺

进程的描述与控制

进程的描述

  1. 定义:程序+PCB(进程控制块)+数据集合,是系统资源分配的最小单位。
  2. 目的:为了使程序并发执行,并能对其加以描述和控制。
  3. 特征:动态性、并发性、独立性、异步性。
  4. 三种基本状态:就绪态、运行态、阻塞态

         进程的同步

  1. 同步方式:临界区、互斥区、信号量、事件、管程
  2. 临界区:在每个进程中访问临界资源的代码称为临界区;在进入临界区之前,对临界资源进行观察,观察是否被访问。
  3. 管程:java虚拟机的方法级和方法内部的同步就使用了管程。  定义:定义了个数据结构和能为并发进程在该数据结构上的一组操作,这组操作能同步进程和改变管程中的数据。即 管程是OOP的思想,将临界资源抽象为一组数据结构;将对资源的操作抽象为一个方法。
  4. 管程和进程的区别:(1)管程是共享数据结构,如消息队列;进程是私有的;(2)管程是为了解决共享资源互斥问题,进程是为了实现系统的并发性。(3)管程是被动工作,即进程进入管程访问临界区资源;进程是主动工作。(4)进程拥有动态性和并发性,而管程则没有。
  5. 同步遵循的规则:空闲让进、忙则等待、有限等待、让权等待
  6. 出现死锁的情况:必须同时满足四条,互斥条件、请求与保持、循环等待、不可剥夺资源
  7. 避免死锁的算法:银行家算法+安全性算法
进程通信方式
  1. 主要有四大类:共享存储区、管道通信、消息传递、客户-服务器模型
  2. 管道:用于连接一个写进程-读进程的并实现它们之间的通信的文件,又名pipe。提供互斥、同步以及确认对方是否存在。
  3. C/S模型,最核心的就是套接字。基于文件型的套接字类似于管道,基于网络的套接字就和平常我们说的一致。
   
线程相关

  1. 定义:系统调度和分配的最小单位
  2. 目的:和进程类似,为了OS有更好的并发性。
  3. 和进程的区别:(1)进程是最小的可拥有资源的独立单位,换言之,线程并没有独立的资源。(2)并发性:进程之间能并发执行;同一进程的多个线程也能并发执行。(3)切换:进程在切换时消耗的资源大于线程;但一个进程崩溃不会影响其他进程;而一个线程崩溃则隶属于的整个进程拉闸。(4)独立性:进程拥有自己的PCB数据结构,是独立的;而线程是共享进程的资源,谈不上什么独立性。
  4. 线程的实现方式:(1)内核态线程  (2)用户态线程 (3)二者混用
  5. java线程间通信方式:线程不独立占有资源,所以线程间进行通信主要就是为了同步(1)互斥锁 (2)信号量 (3)对于读写进程单向的管道 (4)wait/notify (5)临界区也算上一个吧

调度算法

  1. 先来先服务(FCFS):最简单的,顾名思义,哪个进程先到就先服务哪个。
  2. 短作业优先(SJF):属于优先级调度算法的一种,以作业长度为优先级判定。 缺点:(1)对长作业非常不利 (2)人机无法进行交互 (3)没有考虑每个作业的紧迫程度
  3. 高响应比优先:结合了FCFS和SJF,本质上你我觉得还是优先级算法。

  • 进程调度
  1. 进程调度的任务:(1)保存CPU当前的现场信息,如程序计数器、通用寄存器中的内容,将断点信息保存到PCB中。(2)选取下一个执行的进程,改为运行态 (3)将CPU分配给进程,并让其从上次断点处开始运行,把断点信息装入寄存器中。
  2. 组成部分:(1)排队器 (2)分配器 (3)上下文切换器 
  3. 调度方式:(1)协同式  (2)抢占式
  4. 抢占式调度:(1)RR时间片轮转 (2)优先级调度算法 (3)多级反馈队列调度算法

内存分区分配方式

  • 单一连续分配
  • 固定分区分配
  • 动态分区分配(可变分区分配):(1)基于顺序搜索分配算法 (2)基于索引分配算法
  1. 基于顺序搜索:(1)首次适应算法 (2)循环首次 (3)最佳适应算法 (4)最坏适应算法 
  2. 首次适应算法(FF):从可分配内存的链首开始寻找,找到一个可以用的内存空间,装进去,OK。  缺点:大量碎片
  3. 循环首次:不是从链首了,而是从上一次找到的空闲分区的下一个开始。
  4. 最佳适应:找到一个和需要内存大小相近的空间,装进去。  缺点:大量碎片
  5. 最坏适应:找最大的内存空间,寅吃卯粮。   优点:查找效率高,碎片少。
  6. 基于索引分配:(1)快速适应 (2)伙伴系统 (3)哈希算法
  • 动态可重定位分配:(1)相对于动态分区分配多一个“紧凑”,即碎片整理功能。

页面置换算法
  1. 最佳置换算法:这个东西实际应用中实现不了,但是可以作为一个检验性能的标杆。核心就是,观察已经存入的内存页面,将最长时间(未来)不再访问的页面换出。而实际应用中,我们明显无法预测到未来,到底是个什么情况。
  2. 先进先出FIFO:啥都有它,不介绍了
  3. 最近最久未使用置换算法LRU:顾名思义,就是将内存中最近最久没有使用的页面置换出去。   操作系统中实现它使用了寄存器和,这个栈很精髓,编程实现的话要用这个。用栈保存当前使用各个页面的页号,每当进程访问某页面 的时候,便将该页面的页号从栈中移除并压入栈顶,因此,栈顶始终是最新被访问页面的页号,栈底是最久未使用的页号。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值