zoukankan      html  css  js  c++  java
  • 操作系统 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、鸵鸟策略

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

  • 相关阅读:
    Intellij IDEA Java web 项目搭建
    Spring的AOP原理
    为何有DAO与Service层?为何先搞Dao接口在搞DaoImpl实现?直接用不行吗?
    DAO层,Service层,Controller层、View层协同工作机制
    浅谈service、DAO层引入(转)
    java书籍推荐转
    Java点滴-List<Integer> list; 中尖括号的意思
    Composer更新慢的终极解决方案-转
    laravel门面DB返回数组配置
    laravel构建联合查询
  • 原文地址:https://www.cnblogs.com/KirinSB/p/12600820.html
Copyright © 2011-2022 走看看