glenda.party
term% ls -F
term% cat index.txt
SEGMENT(3)                 Library Functions Manual                 SEGMENT(3)



NAME
       segment - long lived memory segments

SYNOPSIS
       bind '#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 representing long-
       lived sharable segments that processes may segattach(2).  The  name  of
       the directory is the class argument 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 segment.  Reading and  writing
       ctl retrieves and sets the segment's properties.

       There is only one control message, which sets the segment's virtual ad‐
       dress 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 re‐
       side at the same virtual address in all processes sharing it.   Option‐
       ally,  type can be specified as fixed to create a physically continuous
       segment with a fixed physical base address suitable  for  hardware  DMA
       access.   When the segment is attached using 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.

       Reading the control file returns a message of the same format 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 per‐
       formed when opening data with mode ORDWR.

EXAMPLE
       Create a one megabyte segment at address 0x10000000:
            % bind '#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



                                                                    SEGMENT(3)