SEGMENT(3) SEGMENT(3)
NAME
segment - long lived memory segments
SYNOPSIS
bind -c '#g' /mnt/segment
#g/seg1
#g/seg1/ctl
#g/seg1/data
#g/seg2
#g/seg2/ctl
#g/seg2/data
...
DESCRIPTION
The segment device provides a 2-level file system represent-
ing long-lived sharable segments that processes may
segattach(2). The name of the directory is the class argu-
ment to segattach.
New segments are created under the top level using create
(see open(2)). The DMDIR bit must be set in the permissions.
Remove(2)'ing the directory makes the segment no longer
available for segattach. However, the segment will continue
to exist until all processes using it either exit or
segdetach it.
Within each segment directory are two files, data and ctl.
Reading and writing data affects the contents of the seg-
ment. Reading and writing ctl retrieves and sets the
segment's properties.
There is only one control message, which sets the segment's
virtual address and length in bytes:
va address length type
Address is automatically rounded down to a page boundary and
length is rounded up to end the segment at a page boundary.
The segment will reside at the same virtual address in all
processes sharing it. Optionally, type can be specified as
fixed or sticky. Fixed segments are uncached and physically
continuous with a fixed physical base address suitable for
hardware DMA access. Sticky segments are like normal shared
segments but preallocated at creation time and never swapped
out. Only the hostower is allowed to create fixed or sticky
segments.
segattach, the address and length arguments are ignored in
the call; they are defined only by the va control message.
Once the address and length are set, they cannot be reset.
Page 1 Plan 9 (printed 11/15/25)
SEGMENT(3) SEGMENT(3)
Reading the control file returns a message of the same for-
mat with the segment's actual start address and length. For
fixed segments, the type and physical base address are
appended.
Opening data or reading ctl before setting the virtual
address yields the error ``segment not yet allocated''.
The permissions check when segattaching is equivalent to the
one performed when opening data with mode ORDWR.
EXAMPLE
Create a one megabyte segment at address 0x10000000:
% bind -c '#g' /mnt/segment
% mkdir /mnt/segment/example
% echo 'va 0x10000000 0x100000' > /mnt/segment/example/ctl
Put the string ``hi mom'' at the start of the segment:
% echo -n hi mom > /mnt/segment/example/data
Attach the segment to a process:
{
ulong va;
va = segattach(0, "example", 0, 0);
}
SEE ALSO
segattach(2)
SOURCE
/sys/src/9/port/devsegment.c
Page 2 Plan 9 (printed 11/15/25)