zalloc man page on DragonFly

Man page or keyword search:  
man Server   44335 pages
apropos Keyword Search (all sections)
Output format
DragonFly logo
[printable version]

ZONE(9)			 BSD Kernel Developer's Manual		       ZONE(9)

NAME
     zbootinit, zinitna, zinit, zdestroy, zalloc, zfree, — zone allocator

SYNOPSIS
     #include <sys/param.h>
     #include <sys/queue.h>
     #include <vm/vm_zone.h>

     void
     zbootinit(vm_zone_t z, char *name, int size, void *item, int nitems);

     int
     zinitna(vm_zone_t z, struct vm_object *obj, char *name, int size,
	 int nentries, int flags, int zalloc);

     vm_zone_t
     zinit(char *name, int size, int nentries, int flags, int zalloc);

     void
     zdestroy(vm_zone_t z);

     void *
     zalloc(vm_zone_t z);

     void
     zfree(vm_zone_t z, void *item);

DESCRIPTION
     The zone allocator is deprecated.	Use <sys/objcache.h> for new develop‐
     ments.

     The zone allocator provides an efficient interface for managing dynami‐
     cally-sized collections of items of similar size.	The zone allocator can
     work with preallocated zones as well as with runtime-allocated ones, and
     is therefore available much earlier in the boot process than other memory
     management routines.

     A zone is an extensible collection of items of identical size.  The zone
     allocator keeps track of which items are in use and which are not, and
     provides functions for allocating items from the zone and for releasing
     them back (which makes them available for later use).

     The zone allocator stores state information inside the items proper while
     they are not allocated, so structures that will be managed by the zone
     allocator and wish to use the type stable property of zones by leaving
     some fields pre-filled between allocations, must reserve two pointers at
     the very beginning for internal use by the zone allocator, as follows:

     struct my_item {
	     struct my_item  *z_rsvd1;
	     struct my_item  *z_rsvd2;
	     /* rest of structure */
     };

     Alternatively they should assume those entries corrupted after each allo‐
     cation.  After the first allocation of an item, it will have been cleared
     to zeroes, however subsequent allocations will retain the contents as of
     the last free, with the exception of the fields mentioned above.

     Zones are created in one of two fashions, depending how far along the
     boot process is.

     If the VM system is fully initialized, a dynamically allocated zone can
     be created using zinit().	The name argument should be a pointer to a
     short, descriptive name for the zone; it is used for statistics and
     debugging purposes.  The size and nentries are the size of the items held
     by the zone and the initial size (in items) of the zone, respectively.
     The flags argument should have the ZONE_INTERRUPT bit set if there is a
     chance that items may be allocated from the zone in interrupt context;
     note that in this case, the zone will never grow larger than nentries
     items.  The flags argument should have the ZONE_DESTROYABLE bit set if
     the zone is to be destroyed with zdestroy().  The final argument, zalloc,
     indicates the number of VM pages by which the zone should grow every time
     it fills up.

     If the VM system is not yet fully initialized, the zone allocator cannot
     dynamically allocate VM pages from which to dole out items, so the caller
     needs to provide a static pool of items.  In this case, the initializa‐
     tion is done in two stages: first, zbootinit() is called before first use
     of the zone; later, when the VM system is up, the initialization of the
     zone is completed by calling zinitna().

     The first argument to zbootinit() is a pointer to a static struct vm_zone
     to initialize.  The second and third are the name of the zone and the
     size of the items it will hold.  The fourth argument is a pointer to a
     static array of items from which the zone allocator will draw until the
     zone is fully initialized.	 The nitems argument is the number of items in
     the array.

     The arguments to zinitna are the same as for zinit, with the addition of
     a pointer to the zone to initialize, and a pointer to a struct vm_object
     from which to allocate pages in the ZONE_INTERRUPT case.

     To release all the memory allocated for a zone, call zdestroy().  Only
     zones created with zinit() and with the ZONE_DESTROYABLE flag can be
     destroyed.

     To allocate an item from a zone, simply call zalloc() with a pointer to
     that zone; it will return a pointer to an item, or NULL in the rare case
     where all items in the zone are in use and the allocator is unable to
     grow the zone.

     Items are released back to the zone from which they were allocated by
     calling zfree() with a pointer to the zone and a pointer to the item.

     The zone functions are not SMP-safe.  The MP lock must be held while
     calling them.

RETURN VALUES
     The zinitna() function returns 1 on success and 0 on failure; the only
     failure case is inability to preallocate address space for an interrupt-
     safe zone.

     The zinit() function returns a pointer to a fully initialized struct
     vm_zone, or NULL if it was unable to kmalloc() a struct vm_zone or the
     ZONE_INTERRUPT flag was specified and zinitna() failed to preallocate
     address space.

     The zalloc() function returns a pointer to an item, or NULL if the zone
     ran out of unused items and the allocator was unable to enlarge it.

SEE ALSO
     memory(9)

HISTORY
     The zone allocator first appeared in FreeBSD 3.0.

AUTHORS
     The zone allocator was written by John S. Dyson.

     This manual page was written by Dag-Erling Coïdan Smørgrav
     ⟨des@FreeBSD.org⟩.

BSD			       January 27, 2001				   BSD
[top]

List of man pages available for DragonFly

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net