• 操作系统复习笔记1:实现临界区同步机制有哪些方法?


    实现临界区同步机制的方法如下:

    软件方法:尝试算法1(忙等&不能保证进程互斥进入临界区-->2个都用);尝试算法2(忙等&死锁--->2个都不能用qwq);Peterson算法(比较理想,忙等--->孔融让梨嘤嘤嘤);

    硬件方法:禁止中断法(不适用);特殊指令法(TS指令(Test And Test),exchange(SWAP))---->忙等,空循环qwq

    开放的并发的环境,执行的相对速度无法相互控制,就会出现所谓与时间有关的错误。(与时间片的轮转RR有关哦)

    多终端系统:学校的教务系统(手动滑稽)

    实现临界区( critical section )管理软件硬件两种方式。

    软件方法:尝试算法1(忙等&不能保证进程互斥进入临界区-->2个都用);尝试算法2(忙等&死锁--->2个都不能用qwq)Peterson算法(比较理想,忙等--->孔融让梨嘤嘤嘤)

    CPU与内存的访问是一对一的,只能是一个一个的,当然速度非常快,一般在10ns周期内。

     

    单独的内部逻辑比较完美,如何找与时间有关错呢,考虑时间片轮转,寻找那一寸的错误(天道好轮回,苍天饶过谁2333)。

    临界区的管理尝试(1)就是有这种其情况:

    进程P1的while(inside2);执行完后时间片恰好用完,----->P2的while(inside1)执行完后其分配的时间片恰好用完--->

    P1去进入临界区----->P2去进入临界区。出现与时间有关的错误qwq。

    先修改自己的逻辑变量,再判断对方是不是在临界区。看样子似乎不错了2333

    但是:这个算法是有缺点的:

    可能都进不去的死锁

    P1的inside1=true执行完时间片用完-->P2的inside2=true执行完时间片用完-->P1死循环——————>P2死循环

    Peterson算法:bool flag[n]--->意愿;turn----->轮次

    让全等待,"我想进来之前,我先礼让三分2333!"仁者无敌的哲学了2333

    硬件方法:禁止中断法(不适用);特殊指令法(TS指令(Test And Test),exchange(SWAP))

    x就跟empty似的,2333!

    others;

    Be countinued!!!!!!

  • 相关阅读:
    ES6中的class的详解
    JavaSrcipt中字符串和数组容易搞混的操作
    ES6中的数据结构Map的理解和描述
    ES6中新增数据结构Set的理解和用法详情描述
    ES6中的Promise的用法总结
    JS中的async/await的用法和理解
    字节跳动、拼多多前端面经
    前端项目优化 -Web 开发常用优化方案、Vue & React 项目优化
    记几个 DOM 操作技巧
    JavaScript 面试题
  • 原文地址:https://www.cnblogs.com/dragondragon/p/12578620.html
Copyright © 2020-2023  润新知