×
操作系统教程操作系统的定义和功能操作系统的类型

进程管理

与进程有关的时间操作系统CPU调度操作系统调度算法操作系统FCFS调度操作系统FCFS护航效果操作系统FCFS与开销操作系统最短作业优先(SJF)调度预测SJF进程的CPU突发时间最短剩余时间优先(SRTF)调度算法循环调度算法循环调度算法示例最高响应比下(HRRN)调度最高响应比下(HRRN)调度示例优先级调度非抢占式优先级调度抢先式优先级调度

同步

进程同步简介临界区问题锁定变量机制测试集锁定机制优先级反转开启可变或严格的交替方式感兴趣变量机制帕特森(Peterson)解决方案同步机制无需等待睡眠和唤醒信号量介绍计算信号量的问题计算信号量的问题二进制信号量或互斥量

死锁

死锁简介处理死锁的策略死锁预防避免死锁避免死锁使用RAG进行死锁检测死锁检测和恢复

内存管理

内存管理简介固定分区动态分区压缩(碎片整理)用于动态分区的位图链表动态分区分区算法分页技术分页技术实例二进制地址基础知识物理和逻辑地址空间页表从页表映射到主内存页表项查找最佳页面大小虚拟内存后备缓冲器按需分页转换页表页面替换算法Belady异常分段分页与分段比较分段的分页

文件管理

文件的属性文件上的操作文件访问方法目录结构一级目录两级目录树型结构目录非循环图结构化目录文件系统文件系统结构主引导记录(MBR)磁盘中的数据结构内存中的数据结构目录实现目录实现连续分配链表分配文件分配表索引分配链接索引分配索引节点空闲空间管理磁盘调度

计算信号量的问题


有一些情况需要同时在临界区执行多个进程。 但是,当我们需要同时在临界区中有多个进程时,可以使用计数信号量。

信号量实现的编程代码如下所示,其中包括信号量的结构以及在临界区中可以执行的入口和退出的逻辑。

struct Semaphore  
{  
    int value; // processes that can enter in the critical section simultaneously.   
    queue type L; // L contains set of processes which get blocked   
}  
Down (Semaphore S)  
{  
    SS.value = S.value - 1; //semaphore's value will get decreased when a new   
    //process enter in the critical section   
    if (S.value< 0)  
    {  
        put_process(PCB) in L; //if the value is negative then   
        //the process will get into the blocked state.  
        Sleep();   
    }  
    else  
        return;  
}  
up (Semaphore s)  
{  
    SS.value = S.value+1; //semaphore value will get increased when   
    //it makes an exit from the critical section.   
    if(S.value<=0)  
    {  
        select a process from L; //if the value of semaphore is positive   
        //then wake one of the processes in the blocked queue.   
        wake-up();  
    }  
    }  
}

在这种机制中,临界区的入口和退出是根据计数信号量的值执行的。在任何时间点计算信号量的值表示可以同时在临界区输入的最大进程数。

想要进入临界区的进程首先将信号量值减1,然后检查它是否为负值。如果它变为负数,则该过程被推入阻塞过程的列表(即q),否则它进入临界区。

当进程从临界区退出时,它会将计数信号量增加1,然后检查它是否为负值或零。如果它是负数,那么这意味着至少有一个进程在阻塞状态下等待,因此,为了确保有界等待,阻塞进程列表中的第一个进程将被唤醒并进入临界区。

被阻止列表中的进程将按其睡眠顺序进行唤醒。如果计数信号量的值为负数,则表示处于阻塞状态的进程数量,如果为正数,则表示临界区域中可用的插槽数量。


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)