首页 > 其他分享 >【操作系统】千字解析信号量

【操作系统】千字解析信号量

时间:2024-04-01 12:34:02浏览次数:27  
标签:操作系统 信号量 预定 进程 操作 千字 资源 wait

信号量机制是一种用于控制多进程或者多线程并发访问共享资源的同步机制。信号量实质上是一个整型计数器,通常用于表示可用资源的数量或许可证的数量,类似于一个整型的全局变量。不同于一般的整型变量,对信号量的操作只有两个:P操作和V操作

P操作即wait操作,为进程申请一个资源S,S相应的信号量的值减一。若此时没有资源S可以给该进程使用,则进程阻塞等待。

V操作即signal操作,释放一个资源S,S相应的信号量的值加一。若此时有进程正在等待资源S,则唤醒该进程。

整形信号量

整形信号量是最简单的一种信号量,基本代码如下

void wait(int S)
{
 while(S<=0);
/*当S小于等于零时,do nothing,此时想访问临界资源的进程需要等待;直到S大于零时,若有申请访问临界资源的进程,则信号量减一。*/
 S--;
}

void signal(int S)
{
 S++:
}

wait操作:当S小于等于零时,do nothing,此时想访问临界资源的进程需要等待;直到S大于零时,若有申请访问临界资源的进程,则信号量减一。while循环中的条件判断不断地检查信号量S的值,直到S大于0为止。这意味着所有申请访问该资源的进程都必须等待直到资源可用。

signal操作:wait操作和signal操作必须成对出现。进程访问完某资源后,要释放它。

整形信号量虽然简单易懂,但容易形成忙等。进程占有处理机,但一直在判断S是否大于零,而S又始终小于等于零,形成死循环,不能再往下执行。

记录型信号量

typedef struct
{
 int value;//整型变量记录资源数
 struct process*L;//阻塞队列(等待队列)
}
void wait(semaphore S)
{
 S.value--;
 if(S.value<0)
   block(S,L);//block原语使进程从运行态进入阻塞态
}
void signal(semaphore S)
{
 S.value++;
 if(S.value<0)
   wakeup(S,L);//wakeup原语唤醒阻塞等待的进程
}

wait操作:直接预定了资源,使信号量减一。若预定后资源量大于零,说明肯定有富余,可以分配,不必等待;若预定后资源量等于零,说明在预定前正好资源数目为1,正好分给该进程,不必等待;若预定后资源量小于零,说明在预定前资源量已经小于或等于零了,没有多余的量分给该进程了,需要等待;

signal操作:当有程序用完该资源后,对信号量进行释放时,S.value++.若信号量值加一后不大于零,说明此前有进程预定了该资源。这时,从阻塞队列里唤醒预约了当前资源的进程,进行分配。

标签:操作系统,信号量,预定,进程,操作,千字,资源,wait
From: https://blog.csdn.net/2301_76172693/article/details/137223391

相关文章

  • 1.1.1、操作系统发展史、Linux 与 Unix
    关注公众号“融码一生”,领取全套PDF/电子书Linux是众多操作系统之一,常见操作系统:win7、win10、Mac、Android、IOS。计算机是一台按用户要求接收信息、存储与处理数据,再将处理结果输出(文字、图片、音频、视频等)的机器。计算机由硬件和软件组成:硬件是计算机赖以工作......
  • 操作系统基础概念
    操作系统概念概念和定义定义:操作系统(OperatingSystem,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件。直观的例子:打开Windows操作系统的“任务管理......
  • 操作系统体系结构
    操作系统体系结构时钟管理:利用时钟中断实现计时功能原语:原语是一种特殊的程序,具有原子性。也就是说,这段程序的运行必须一气呵成,不可被“中断”非内核功能:Ubuntu、Centos的开发团队,其主要工作是实现非内核功能,而内核都是用了Linux内核内核内核是操作系统最基木,最核心的......
  • 操作系统引导和虚拟机
    操作系统引导安装操作系统后:C盘(是这个磁盘的活动分区,安装了操作系统)主存主存由RAM和ROM组成,ROM(BIOS)包含:ROM引导程序,即自举程序断电后,RAM会消失,但是ROM不会整个开机过程:CPU通电,找到ROM执行引导程序,然后引导磁盘里的主引导记录(读入RAM),判断C盘位置,然后把C盘的引导记录......
  • ubuntu使用-ubuntu23.10中创建arm架构的银河麒麟操作系统v10
    ubuntu使用-ubuntu23.10中创建arm架构的银河麒麟操作系统v10ubuntuqemu银河麒麟arm安装qemu之后,从应用中或者使用virt-manager命令打开虚拟系统管理器。创建虚拟机,架构选择aarch64,机器类型不知道选什么,暂选的是virt,后面有问题的话再说。参考国产银河麒麟操作系统下载地址收集--......
  • 操作系统概念-进程管理-同步互斥camproj
    操作系统概述操作系统定义:能有效的组织和管理系统中的各种软/硬件资源,合理的组织计算机系统工作流程,控制程序的执行,并且向用户提供一个良好的工作环境和友好的接口。操作系统有两个重要的作用:通过资源管理提高计算机系统的效率;改善人机界面向用户提供友好的工作环境。操......
  • credwiz.exe 是 Windows 操作系统中的一个程序,用于备份和还原用户凭据。凭据可以包括
    credwiz.exe是Windows操作系统中的一个程序,用于备份和还原用户凭据。凭据可以包括保存的密码、证书、访问令牌等信息。使用凭据向导(CredentialBackupandRestoreWizard)可以帮助用户在需要时轻松地备份和恢复这些重要的凭据。这个工具通常用于帮助用户在更换计算机、重装操......
  • 操作系统实验6之信号量的实现与应用
    操作系统中常用信号量相关系统调用函数用法1、sem_open:用于创建或打开一个命名的信号量。点击查看代码#include<semaphore.h>sem_t*sem_open(constchar*name,intoflag,mode_tmode,unsignedintvalue);name:信号量的名称,必须以斜杠开头,例如/my_semaphore。oflag:......
  • 你问我答!手把手教学,银河麒麟桌面操作系统编译安装BIMP插件过程详解
    (引言:银河麒麟应热心用户后台提问,推出银河麒麟桌面操作系统编译安装BIMP插件详解过程详解专题。如有其它问题和需求,欢迎后台留言咨询……)1.GIMP简介GIMP是GNU图像处理程序(GNUImageManipulationProgram)的缩写。包括几乎所有图象处理所需的功能,号称Linux下的PhotoS......
  • 13_信号量
    信号量信号量的简介队列与信号量的对比二值信号量二值信号量相关API函数创建二值信号量函数释放二值信号量函数获取二值信号量函数二值信号量实验代码freertos_demo.c/**********************************************************************************......