计算机基础问题-操作系统

计算机基础问题-操作系统
搜罗整理一下资料,时常回来看看,该记的记,该背的背啊~

1.进程之间有哪些通信方式

进程同步: 控制多个进程按一定的顺序执行;

进程通信: 进程间传输信息

进程通信是一种手段,而进程同步是一种目的。即为了能够达到进程同步的目的,需要让进程进行通信。

  1. 管道
    1. 只支持半双工通信
    2. 只能在父子进程或兄弟进程中使用
  2. FIFO(命名管道)
    1. 常用于客户-服务器应用程序中,FIFO用作汇聚点,在客户进程和服务器进程之间传输信息
    2. 效率低下,实现简单
  3. 消息队列
    1. 独立于读写进程存在,避免了FIFO中同步管道的打开和关闭时可能产生的困难;
    2. 避免了FIFO的同步阻塞问题,不需要进程自己提高同步方法
    3. 读进程可以根据消息类型有选择地接收消息,不像FIFO那样只能默认接收
    4. 不适合发送数据很大的情况
  4. 信号量(Semaphore)
    1. 一个计数器,用于为多个进程提供对共享数据对象的访问
  5. 共享存储
    1. 允许多个进程共享一个给定的存储区
    2. 需要使用信号量用来同步对共享存储的访问
    3. 多个进程可以将同一个文件映射到它们的地址空间从而实现共享内存
    4. 系统加载一个进程的时候,分配给进程的内存并不是实际物理内存,而是虚拟内存空间。那么我们可以让两个进程各自拿出一块虚拟地址空间来,然后映射到相同的物理内存中,这样,两个进程虽然有着独立的虚拟内存空间,但有一部分却是映射到相同的物理内存,这就完成了内存共享机制了
  6. 套接字(Socket)
    1. 可用于不同机器间的进程通信
  7. 总结: 共有6种通信方式,其中,管道FIFO 属于同一类管道类。

2. 经典的进程调度算法

参考来源:进程调度,一个调度器的自白

进程是资源分配的基本单位,进程调度器负责计算机内所有进程的调度,为进程们分配CPU资源。

1. FCFS(First Come First Serve)先来先服务调度算法

  1. 最初的一种进程调度算法,既可以用于作业调度,也能用于进程调度;
  2. 在作业调度中: 每次从后备作业队列中选择最先到来的作业进入内存,分配必要的资源,创建进程并进入就绪队列
  3. 在进程调度中: 每次从就绪队列中选择最先进入的进程,将处理机分配给他,使其运行,直到 运行完毕 或某种原因而阻塞时才释放处理机。
  4. FCFS 简单,效率低。对长作业(进程)比较有利,相应的,对于短作业(进程)而言,举个较为极端的栗子,他等待了10000年,却只执行了1秒钟。有利于 CPU 繁忙型作业,不适用于I/O繁忙型作业。
  5. 不能作为分时系统和实时系统的主要调度策略,经常和其他结合使用(和优先级调度算法结合使用)。

有了上述对于短作业(进程)的痛点,调度算法进行了改进;如下

2.SJF(Shortest Job First) / SPF (Shortest Process First)

  1. SJF :从后备队列中选择一个或若干个估计运行时间最短的作业,调入内存运行;
  2. SPF :从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给他,使之立即运行。
  3. 该算法解决了 FCFS 中对于短作业(进程)等待时间很长,运行时间很短的问题,但是也带来了新的问题;
  4. 如果后备队列中源源不断的进入预估运行时间短的作业,那么原有的那些预估运行时间长的作业就迟迟得不到运行,极端一点,就会导致长作业被**“饿死”,即长时间得不到调度。长进程同理,也会出现“饥饿”** 情况。
  5. 该算法没有考虑作业的紧迫程度,不能保证紧迫作业能被及时处理(这个问题可以被 优先级调度算法 解决)
  6. 由于作业的长度是由用户所提供的估计执行时间而定,所以不一定能真正做到短作业(进程)优先调度。

有了 FCFS 和 SJF 后,出现了新的综合考虑二者(既照顾长作业,由照顾短作业) 的调度算法出现,如下:

3. 高响应比优先调度算法

  1. 主要用于作业调度

  2. 是 FCFS 和 SJF 的综合平衡:同时考虑每个作业的等待时间和预估运行时间,在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,选择响应比最高的作业投入运行。响应比公式如下:

    响应比Rp = (等待时间 + 要求服务时间) / 要求服务时间

  3. 根据上述公式,我们可以得到如下结论:

    1. 作业等待时间相同的时候,要求服务时间越短,响应比越高,有利于短作业
    2. 要求服务时间相同的时候,等待时间越长,响应比越高,此时就是 FCFS
    3. 对于长作业,作业的响应比可以随着等待时间的增加而提高,当其等待时间足够长时,响应比就很大,从而可以获得处理机,克服了 “饥饿” 的情况,兼顾了长作业。

4.时间片轮转算法

  1. 适用于分时系统
  2. 系统将所有的就绪进程按到达时间排成一个队列,进程调度程序总是选择队列头的进程运行,并开启定时器,即一个时间片。一个时间片用完之后,该进程被迫**“下机”** 进入队列尾排队等待下一次循环到队列头。下一个进程还是选择当前的队列头,即 FCFS,因为是按照到达时间排队的。
  3. 时间片的大小对系统性能影响较大
    1. 如果时间片足够大,以至于队列中所有进程都能在一个时间片内运行完毕,那么就退化成一个 FCFS 了;
    2. 如果时间片很小,单位时间可以运行的进程从直观上来说就会越多,但是,此时处理机就会在进程间频繁切换,进程的频繁切换会导致大量CPU资源浪费(上下文切换产生开销),使处理机开销增大。
  4. 时间片长短的决定因素:系统的响应时间就绪队列中的进程数目以及系统的处理能力

5. 优先级调度算法

  1. 可用于作业调度和进程调度;
  2. 优先级高的先运行,每次都选择优先级最高的作业(进程)来运行
  3. 根据新的最高优先级进程能否抢占正在运行的进程,又可以分为
    1. 非剥夺式优先级调度算法: 等待前一个运行的进程运行结束最新高优先级才运行
    2. 剥夺式优先级调度算法: 不管三七二十一,立即停止当前正在运行的进程,运行更重要或紧迫的进程
  4. 根据进程创建后优先级是否可以改变,又可以分为:
    1. 静态优先级: 优先级在创建时确定,在运行时不变。主要依据:进程类型、进程对资源的需求、用户要求
    2. 动态优先级: 优先级动态变化,为保证低优先级不被 “饿死”, 低优先级随时间增加,优先级可以逐步升高。主要依据:进程占用CPU的时间的长度、就绪进程等待CPU时间的长短

6.多级反馈队列调度算法(结合前五种的优点)

  1. 是时间片轮转算法和优先级调度算法的综合和发展;
  2. 动态调整进程优先级和时间片大小
  3. 如下优点:
    1. 终端型作业用户:短作业优先
    2. 短批处理作业用户:周转时间较短
    3. 长批处理作业用户:经过前面几个队列得到部分执行,不会长期得不到处理。

3.用户级线程和内核级线程

参考来源:用户级线程和内核级线程有什么区别?

4.多线程模型

有些系统同时支持用户线程和内核线程,由此产生了不同的多线程模型,即实现用户级线程和内核级线程的连接方式。

多线程模型

  1. 多对一模型:(a) 将多个用户级线程映射到一个内核级线程,线程管理在用户空间完成。用户级线程对操作系统不可见(即透明)
    1. 优点: 线程管理在用户空间完成,效率高
    2. 缺点: 当一个线程在使用内核服务时被阻塞,那么整个进程都会被阻塞;多个线程不能并行运行在多个处理机上。
  2. 一对一模型:(b) 每个用户线程对应一个内核级线程
    1. 优点: 当一个线程被阻塞后,其他线程还能正常执行,因此并发性能好;
    2. 缺点: 每创建一个用户级线程都要创建一个对应的内核级线程与之对应,开销较大,会影响到应用程序的性能。
  3. 多对多模型:© 将 n 个用户级线程对应到 m 个内核级线程。n >= m
    1. 特点:是前两种模型取了一个折中。集两者之所长。

5.线程的来源

参考来源:线程的来龙去脉

6.互斥

参考来源:互斥那点事儿-上

参考来源:互斥那点事儿-下

7.各种锁

参考来源:一句话撸完重量级锁、自旋锁、轻量级锁、偏向锁、悲观、乐观锁等各种锁 ---- 不看后悔系列

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值