操作系统概念中的共享内存系统

时间:2014-09-23 05:20:23

标签: c++ c operating-system producer-consumer circular-buffer

我正在研究操作系统概念第8版中的操作系统。

在关于这个过程的章节中,我不了解共享内存系统的一件事。

以下变量驻留在生产者和使用者进程共享的内存区域中:

#define BUFFER_SIZE 10
typedef struct{
...
}iten;
item buffer[BUFFER_SIZE];
int i = 0;
int out = 0;

共享缓冲区实现为一个循环数组,包含2个逻辑指针,in和out。变量指向缓冲区中的下一个自由位置,out指向缓冲区中的第一个完整位置。

制片人流程:

item nextProceduced
while(true){
   /*produce an intem in nextProduced*/
   while(((in+1)%BUFFER_SIZE) == out)
       ;//do nothing
   buffer[in] = nextProceduced;
   in = (in+1) % BUFFER_SIZE;

}

消费者流程:

   item nextConsume
   while(true){
        /*produce an intem in nextProduced*/
        while(in == out)
            ;//do nothing
        nextComsumed = buffer[out]
        out = (out+1) % BUFFER_SIZE;
   }

它说:"缓冲区在= = out时为空,缓冲区为满((i + 1)%BUFFER_SiZE)== out,此方案最多允许BUFFER_SIZE-1项同时在缓冲区"。

对于声明:"当((i + 1)%BUFFER_SiZE)== out"时,缓冲区已满,我实际上并不认真对待。

例如,如果缓冲区已满,那么"在"将指向缓冲区[9]元素," out"将指向buffer [8]元素,当((i + 1)%BUFFER_SiZE)== out时,缓冲区如何填满?

0 个答案:

没有答案