一、程序的内存结构

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、鸵鸟策略

无视死锁的发生。

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

最新文章

  1. PALIN - The Next Palindrome 对称的数
  2. 两种不同png图片的在项目中的运用
  3. converntion
  4. [置顶] 如何运行用记事本写的java程序
  5. Tomjson - json 解析库
  6. poj_2195Going Home(最小费用最大流)
  7. DALI 2.0解码模块
  8. 学号:201621123032 《Java程序设计》第7周学习总结
  9. luogu2252 取石子游戏
  10. 网易2019校招内推编程题-瞌睡-C++实现
  11. 老罗最新发布了“子弹短信”这款IM,主打熟人社交能否对标微信?
  12. Civil 3D 二次开发 创建AutoCAD对象—— 00 ——
  13. Vim保存时权限不足
  14. javascript监听数组变化
  15. 56.两数之和.md
  16. 深入浅出 JVM GC(4)常用 GC 参数介绍
  17. Matlab基本用法
  18. Windows折腾之路 兼谈纯净强迫情节
  19. Hash课堂测试补写
  20. 实验4 [BX]和loop指令

热门文章

  1. 查看Java的汇编指令
  2. PAT练习num4-D进制的A+B
  3. 在EXCEL中如何同时冻结行与列?
  4. Vue 标签Style 动态三元判断绑定
  5. Linux磁盘的分区操作
  6. spark开窗函数
  7. Trove自动钓鱼脚本(国际服
  8. Manachar’s Algorithm
  9. 可视化Go内存管理
  10. Linux网络数据包的揭秘以及常见的调优方式总结