一种带配额的信号量制造技术

技术编号:9990920 阅读:131 留言:1更新日期:2014-05-02 04:10
本发明专利技术公开一种带配额的信号量,其包括一整型的变量、一睡眠调度队列、一配额值及两个操作(V与P),其运作如下:过程1:初始化,给该信号量一个非负数的整数值作为整型的变量X;给该信号量一个配额值作为限制值;过程2:运行V,变量X的值被增加,当该变量X的值增加到配额值时,将调用该信号量操作的进程挂到睡眠调度队列进行休眠,直到有其他的进程调用P操作,该变量X的值被减少小于配额值,则重新唤醒被挂到睡眠调度队列的进程;过程3:运行P,变量X的值被减少,当该变量X的值减到0时,将调用该信号量操作的进程挂到睡眠调度队列进行休眠,直到有其他进程调用V操作,该变量X的值大于1,则重新唤醒被挂到睡眠调度队列的进程。

【技术实现步骤摘要】
【专利摘要】本专利技术公开一种带配额的信号量,其包括一整型的变量、一睡眠调度队列、一配额值及两个操作(V与P),其运作如下:过程1:初始化,给该信号量一个非负数的整数值作为整型的变量X;给该信号量一个配额值作为限制值;过程2:运行V,变量X的值被增加,当该变量X的值增加到配额值时,将调用该信号量操作的进程挂到睡眠调度队列进行休眠,直到有其他的进程调用P操作,该变量X的值被减少小于配额值,则重新唤醒被挂到睡眠调度队列的进程;过程3:运行P,变量X的值被减少,当该变量X的值减到0时,将调用该信号量操作的进程挂到睡眠调度队列进行休眠,直到有其他进程调用V操作,该变量X的值大于1,则重新唤醒被挂到睡眠调度队列的进程。【专利说明】一种带配额的信号量
本专利技术涉及信号量,具体涉及一种新颖的带配额的信号量。
技术介绍
众所周知,现代计算机操作系统中有多种同步原语,例如信号量,自旋锁,互斥锁和条件变量等。它们都有各自应用的场景用来实现多个进程或多个线程之间的同步和互斥。其中,信号量(Semaphore)是以一个整数变量,提供信号,以确保在并行计算环境中,不同进程在访问共享资源时,不会发生冲突。是一种不需要使用忙碌等待(busywaiting)的一种方法。信号量的概念是由荷兰计算机科学家艾兹格?迪杰斯特拉(EdsgerW.Dijkstra)专利技术的,广泛的应用于不同的操作系统中。在系统中,给予每一个进程一个信号量,代表每个进程目前的状态,未得到控制权的进程会在特定地方被强迫停下来,等待可以继续进行的信号到来。现在信号量机制已经被广泛的应用到单处理机和多处理机系统以及计算机网络中。在实际使用中,信号量S具备两种操作动作,之前称为V (又称signalO)与P(wait O)。V操作会增加信号量S的数值,P操作会减少它。其运作方式如下: 过程1:初始化,给与它一个非负数的整数值。过程2:运行P (wait()),信号量S的值将被减少。企图进入临界区段的进程,需要先运行P (waito)。当信号量S减为负值时,进程会被挡住,不能继续;当信号量S不为负值时,进程可以获准进入临界区段。过程3:运行V(又称signal O ),信号量S的值会被增加。退出离开临界区段的进程,将会运行V (又称signal O)。当信号量S不为负值时,先前被挡住的其他进程,将可获准进入临界区段。目前的信号量适用的场景是生产者一消费者应用。生产者即为产生消息的进程,消费者为获取消息的进程。生产者生产资源(消息),消费者消耗资源(消息),当消费者消费资源的速度比生产者快的时候,资源降低为零时,消费者将被调度休眠,直到生产者生产出更多的可用的资源。同时,从上面所述的场景中可以看到,信号量这种同步原语,不考虑生产者能力远大于消费者能力的场景。
技术实现思路
因此,针对上述的问题,本专利技术提出一种带配额的信号量,该带配额的信号量是一种信号量的变种,也是一种新的同步原语,针对消费消息的进程无法快速消费足够多的消息的情况进行考虑,且能够解决一些更为复杂问题,从而解决现有技术之不足。为了解决上述技术问题,本专利技术所采用的技术方案是,一种带配额的信号量,包括一个整型的变量、一个睡眠调度队列以及一个配额值,该信号量包括两个操作,V(signalO)与P (wait O ),其运作方式如下:过程1:初始化,给该信号量一个非负数的整数值作为整型的变量X ;同时,给该信号量一个配额值作为限制值; 过程2:运行V(signal O ),变量X的值被增加,当该变量X的值增加到配额值时,将调用该信号量操作的进程挂到睡眠调度队列进行休眠,直到有其他的进程调用P操作,该变量X的值被减少小于配额值,则重新唤醒被挂到睡眠调度队列的进程; 过程3:运行P(wait O ),变量X的值被减少,当该变量X的值减到O时,将调用该信号量操作的进程挂到睡眠调度队列进行休眠,直到有其他的进程调用V操作,该变量X的值被增加大于1,则重新唤醒被挂到睡眠调度队列的进程。优选的,所述配额值为整型配额值,是对生产者的生产能力的限制值,该配额值如果没有预设,则默认为无穷大。这样,在默认的情况下,这种带配额的信号量就退化为原来的信号量,即可作为普通信号量来使用。本专利技术的所谓带配额的信号量是对生产者的一种限制。这种同步原语和信号量一样,有一个整型的信号量值,但是除此之外,本专利技术的带配额的信号量要引入一个整型变量作为配额值。同样与信号量相似,新的同步原语(该带配额的信号量)也有P操作(消费操作),v操作(生产操作)。当V操作时,信号量值加1,当对信号量做P操作时,信号量值减1,当信号量值减到等于O时,调用信号量P操作的进程被挂到睡眠队列上睡眠,直到有其他的进程调用V操作时,信号量值大于1,被睡眠的消费者进程才被唤醒继需处理。与信号量不同的是,带配额的信号量当生产者进程调用V操作,将信号量值加I直到等于配额值时,生产者进程同样也要被挂到睡眠队列上睡眠,直到其他的消费者进程的P操作将信号量的值减小到小于配额值时,生产者进程才能被唤醒继续执行。此专利技术通过上述方法,采用了一个带配额的信号量概念,不但能够解决传统信号量所解决的问题,而且还能解决更多的复杂问题,如共享内存进程间通讯就可以用带配额的信号量很简单的解决。传统的信号量其实是本专利技术提出的“带配额的信号量”的一个特例,那既是配额值无穷大的“带配额的信号量”。通过将无法继续操作的进程进入休眠状态,可减少系统资源的消耗。本专利技术创新性的提出了一种带配额的信号量概念,对原信号量的同步原语进行改进,而产生一种更高效率的进程间通信的工具,解决了生产者生产了太多的消息而获取者来不及处理的问题,其具有很好的实用价值。【具体实施方式】现结合【具体实施方式】对本专利技术进一步说明。现有技术中的信号量这种同步原语,不考虑生产者能力远大于消费者能力的场景。让举一个例子说明。用共享内存进行进程间通信,将一片共享内存划分多个邮箱槽位用来传递消息。每次生产者进程从共享内存中分配一个邮箱,写入信息,通知消费者进程提取信息。这时候需要一个同步原语来做两个进程间的同步。信号量是很自然想到的一种选择,但是如果生产者发送信息的速度远大于消费者进程的话,意味着有可能生产者分配光所有的共享内存槽位之后,在消费者还没来得及处理之前就会重用没有处理的共享内存槽位,这样就会导致消息的丢失。究其原因,是对生产者没有限制。所以本专利技术提出一种新的操作系统进程间,线程间的同步原语“带配额的信号量”。本专利技术提出的带配额的信号量,其实是一种新型的信号量,它不但能够解决传统信号量所解决的问题,而且还能解决更多的复杂问题,如上所述的共享内存进程间通讯就可以用带配额的信号量很简单的解决。传统的信号量其实是本专利技术提出的“带配额的信号量”的一个特例,那既是配额值无穷大的“带配额的信号量”。具体的,本专利技术的一种带配额的信号量,包括一个整型的变量,一个配额值(默认值为无穷大),一个睡眠调度队列,两个操作(P操作和V操作)。其中,一个整型变量X就是信号量的值。一个整型配额值Quota就是对生产者的生产能力的限制值,由用户定义,如果不定义默认值就是无穷大(在默认值的情况下,这种同步原语就退化成了原来的信号量)。一个睡眠队列,这个睡眠队列与计本文档来自技高网
...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:吴江
申请(专利权)人:赛凡信息科技厦门有限公司
类型:发明
国别省市:

网友询问留言 已有1条评论
  • 来自[美国] 2015年01月21日 10:57
    配额是指一国政府在一定时期内对某些敏感商品的进口或出口进行数量或金额上的控制,其目的旨在调整国际收支和保护国内工农业生产,是非关税壁垒措施之一。
    0
1