3-Jul-1994 ======== breaf usage of novad v1.10 ======== The modified part is only argument of "novad". You can get a breaf usage by typing like below. --------------------------------- prompt% novad NOVA Buffer Manager version 1.10 2-Jul-1994 written by M.Nomachi, Y.Takeuchi usage: novad [options] name [options] -b # buffer size in K-byte (default 16) -B # buffer size in byte -n # number of buffers (default 8) -p # max number of client processes (default 20) -v # max free buffer length (default 0) -V # max free buffer length in byte <= 0: fixed length buffer > 0: variable length buffer --------------------------------- Here "-v", "-V" and "-B" are the new options. You can use v1.10 like v1.08, when "-v" and "-V" are omitted. (v1.10 is upper compatible with v1.08) ======== examples of novad v1.10's arguments ======== 1. buffer size = 4500 bytes (fixed) # of buffers = 100 # of processes = 20 total shared memory for buffers = 100 * 4500 bytes (fixed) novad -B 4500 -n 100 -p 20 /tmp/nova 2. buffer size = (from 1 byte?) up to 5 Kbytes (variable) # of buffers = 100 # of processes = 10 total shared memory for buffers = 300 Kbytes novad -b 3 -n 100 -p 10 -v 5 /tmp/nova 3. buffer size = (from 1 byte?) up to 6 Mbytes (variable) # of buffers = 60 # of processes = 10 total shared memory for buffers = 30 Mbytes novad -b 512 -n 60 -p 10 -v 6144 /tmp/nova ======== behavior of novad v1.10 ======== Now we think the case of example3 and 1 producer process and 2 consumer processes exists. novad -b 512 -n 60 -p 10 -v 6144 /tmp/nova free_buffer =====> producer ==> consumer1 ==> consumer2 # of buffer 1 58 1 0 0 0 buffer size 24Mbytes 0 6M When producer calls "nova_get()", The process gets a 6Mbytes free buffer. free_buffer =====> producer ==> consumer1 ==> consumer2 # of buffer 1 58 0 1 0 0 buffer size 24M 0 6M When producer uses 1Mbyte of the buffer, producer sets "length=1024*1024" then calls "nova_put(...,length)". The buffer length is settled at this time. The remainng buffer area are returned to the free buffer queue, and next free buffer is prepared for producer. free_buffer =====> producer ==> consumer1 ==> consumer2 # of buffer 1 57 1 0 1 0 buffer size 23M 0 6M 1M free_buffer =====> producer ==> consumer1 ==> consumer2 # of buffer 1 57 1 0 0 1 buffer size 23M 0 6M 1M free_buffer =====> producer ==> consumer1 ==> consumer2 # of buffer 1 1 57 1 0 0 0 buffer size 1M 23M 0 6M