• 操作系统 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、鸵鸟策略

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

  • 相关阅读:
    toolblock 编写脚本并运用。
    C#等待子线程执行完毕
    win10+python3.7+dlib+opencv+face_recognition实现人脸识别
    c# tcp/ip通信
    【微信Xposed】kotlin反射异常RuntimeException:looper or serial is null
    安卓APK开启调试
    常用汇编指令对标志位的影响
    简单的.net反调试,调试检测
    虚拟机VMware和win10 hyper-v不兼容的问题
    对某城APP抓包分析--过SSL证书校验
  • 原文地址:https://www.cnblogs.com/KirinSB/p/12600820.html
Copyright © 2020-2023  润新知