操作系统 part2

一、程序的内存结构

references:
newcoder

程序内存结构
运行时,程序分为:text段、data段、BSS段(2个合称数据段)、堆、栈。
text段:代码段,静态分配内存,只读。
data段:初始化的非零全局变量、静态变量。
BSS段:未初始化或者零值的全局变量、静态变量。
堆:由低地址往高地址生长,系统用链表存储,地址不连续。由程序员申请分配和释放。
栈:由高地址往低地址生长,连续的内存区域。编译器自动释放。

二、死锁

references:面试常见题

1、概念

两个或以上进程,因为抢夺资源而出现了相互等待的现象,若无外力,他们都无法继续推进下去。

2、死锁条件

  1. 互斥条件:一个资源只能被一个进程使用;其他进程想使用得等待。
  2. 请求和保持条件:一个进程因请求资源而阻塞,不会释放已有资源。
  3. 不可抢夺条件:进程以获得的资源,在进程结束前不能抢夺。
  4. 循环等待条件:若干进程之间形成了头尾相接的等待资源的关系。

3、预防策略

  1. 实行资源静态分配(破坏请求和保持):进程要运行必须一次性申请到所有资源。缺点:进程的资源难以预知,资源利用率低。
  2. 允许进程抢夺某些资源(破坏不可抢夺):当进程占有一部分资源并且申请不到新的资源的时候,必须释放已有资源。缺点:降低系统性能。
  3. 实行资源有序分配(破坏循环等待):对资源排序编号,进程对资源的请求必须按照资源序号递增顺序提出,也就是说只有申请到了编号小的资源才能继续申请编号大的资源。

4、避免策略

银行家算法:允许进程动态的申请资源,但在系统分配资源之前,应先计算此次分配的安全性,若分配导致不安全,则不分配。
想要分配,需要满足以下条件:

  1. 申请资源\(\le\)系统拥有的资源
  2. 申请资源\(\le\)进程需要的资源
  3. 满足安全性。

安全性算法:
剩下的系统资源能够满足让所有的未完成的进程都能完成,则安全。
4. Finish[ i ] = false; //进程未完成
5. Need <= Work
6. 进程执行完毕
7. Work = Work + Allocation
8. Finish [ i ] = true
9. 返回继续执行 1 ,寻找其他的进程分配资源
10. 若所有的 Finish 为 true 则安全

5、鸵鸟策略

无视死锁的发生。
原因:死锁发生的概率很低,解决死锁的代价很大。

posted @ 2020-03-30 20:11  KirinSB  阅读(156)  评论(0编辑  收藏  举报