No empty .Rs/.Re
[netbsd-mini2440.git] / share / doc / psd / 05.sysman / 1.2.t
blob89fbde1a6524a49e304b60a3133d8d9dbe1b7a93
1 .\"     $NetBSD: 1.2.t,v 1.3 2003/08/07 10:30:48 agc Exp $
2 .\"
3 .\" Copyright (c) 1983, 1993, 1994
4 .\"     The Regents of the University of California.  All rights reserved.
5 .\"
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that the following conditions
8 .\" are met:
9 .\" 1. Redistributions of source code must retain the above copyright
10 .\"    notice, this list of conditions and the following disclaimer.
11 .\" 2. Redistributions in binary form must reproduce the above copyright
12 .\"    notice, this list of conditions and the following disclaimer in the
13 .\"    documentation and/or other materials provided with the distribution.
14 .\" 3. Neither the name of the University nor the names of its contributors
15 .\"    may be used to endorse or promote products derived from this software
16 .\"    without specific prior written permission.
17 .\"
18 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
19 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
22 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 .\" SUCH DAMAGE.
29 .\"
30 .\"     @(#)1.2.t       8.9 (Berkeley) 5/29/94
31 .\"
32 .Sh 2 "Memory management
33 .Sh 3 "Text, data, and stack
34 .PP
35 Each process begins execution with three logical areas of memory
36 called text, data, and stack.  
37 The text area is read-only and shared,
38 while the data and stack areas are writable and private to the process.
39 Both the data and stack areas may be extended and contracted on program
40 request.
41 The call:
42 .DS
43 .Fd brk 1 "set data section size
44 brk(addr);
45 caddr_t addr;
46 .DE
47 sets the end of the data segment to the specified address.
48 More conveniently, the end can be extended by \fIincr\fP bytes,
49 and the base of the new area returned with the call:
50 .DS
51 .Fd sbrk 1 "change data section size
52 addr = sbrk(incr);
53 result caddr_t addr; int incr;
54 .DE
55 Application programs normally use the library routines
56 .Fn malloc
57 and
58 .Fn free ,
59 which provide a more convenient interface than
60 .Fn brk
61 and
62 .Fn sbrk .
63 .LP
64 There is no call for extending the stack,
65 as it is automatically extended as needed.
66 .Sh 3 "Mapping pages
67 .PP
68 The system supports sharing of data between processes
69 by allowing pages to be mapped into memory.  These mapped
70 pages may be \fIshared\fP with other processes or \fIprivate\fP
71 to the process.
72 Protection and sharing options are defined in \fI<sys/mman.h>\fP as:
73 .DS
74 .TS
75 l s
76 l l.
77 Protections are chosen from these bits, or-ed together:
79 PROT_READ       /* pages can be read */
80 PROT_WRITE      /* pages can be written */
81 PROT_EXEC       /* pages can be executed */
82 .TE
83 .DE
84 .DS
85 .TS
86 l s
87 l l.
88 Flags contain sharing type and options.  Sharing options, choose one:
90 MAP_SHARED      /* share changes */
91 MAP_PRIVATE     /* changes are private */
92 .TE
93 .DE
94 .DS
95 .TS
96 l s
97 l l.
98 Option flags\(dg:
100 MAP_ANON        /* allocated from virtual memory; \fIfd\fP ignored */
101 MAP_FIXED       /* map addr must be exactly as requested */
102 MAP_NORESERVE   /* don't reserve needed swap area */
103 MAP_INHERIT     /* region is retained after exec */
104 MAP_HASSEMAPHORE        /* region may contain semaphores */
108 \(dg In 4.4BSD, only MAP_ANON and MAP_FIXED are implemented.
110 The size of a page is CPU-dependent, and is returned by the
111 .Fn sysctl
112 interface described in section
113 .Xr 1.7.1 .
115 .Fn getpagesize
116 library routine is provided for convenience and backward compatibility:
118 .Fd getpagesize 0 "get system page size
119 pagesize = getpagesize();
120 result int pagesize;
123 The call:
125 .Fd mmap 6 "map files or devices into memory
126 maddr = mmap(addr, len, prot, flags, fd, pos);
127 result caddr_t maddr; caddr_t addr; size_t len; int prot, flags, fd; off_t pos;
129 causes the pages starting at \fIaddr\fP and continuing
130 for at most \fIlen\fP bytes to be mapped from the object represented by
131 descriptor \fIfd\fP, starting at byte offset \fIpos\fP.
132 If \fIaddr\fP is NULL, the system picks an unused address for the region.
133 The starting address of the region is returned;
134 for the convenience of the system,
135 it may differ from that supplied
136 unless the MAP_FIXED flag is given,
137 in which case the exact address will be used or the call will fail.
138 The \fIaddr\fP parameter
139 must be a multiple of the pagesize (if MAP_FIXED is given).
140 If \fIpos\fP and \fIlen\fP are not a multiple of pagesize,
141 they will be rounded (down and up respectively)
142 to a page boundary by the system;
143 the rounding will cause the mapped region to extend past the specified range.
144 A successful
145 .Fn mmap
146 will delete any previous mapping
147 in the allocated address range.
148 The parameter \fIprot\fP specifies the accessibility
149 of the mapped pages.
150 The parameter \fIflags\fP specifies
151 the type of object to be mapped,
152 mapping options, and
153 whether modifications made to
154 this mapped copy of the page
155 are to be kept \fIprivate\fP, or are to be \fIshared\fP with
156 other references.
157 Possible types include MAP_SHARED or MAP_PRIVATE that
158 map a regular file or character-special device memory,
159 and MAP_ANON, which maps memory not associated with any specific file.
160 The file descriptor used when creating MAP_ANON regions is not used
161 and should be \-1.
162 The MAP_INHERIT flag allows a region to be inherited after an
163 .Fn execve .
164 The MAP_HASSEMAPHORE flag allows special handling for
165 regions that may contain semaphores.
166 The MAP_NORESERVE flag allows processes to allocate regions whose
167 virtual address space, if fully allocated,
168 would exceed the available memory plus swap resources.
169 Such regions may get a SIGSEGV signal if they page fault and resources
170 are not available to service their request;
171 typically they would free up some resources via
172 .Fn munmap
173 so that when they return from the signal the page
174 fault could be completed successfully.
176 A facility is provided to synchronize a mapped region with the file
177 it maps; the call:
179 .Fd msync 2 "synchronize a mapped region
180 msync(addr, len);
181 caddr_t addr; size_t len;
183 causes any modified pages in the specified region to be synchronized
184 with their source and other mappings.
185 If necessary, it writes any modified pages back to the filesystem, and updates
186 the file modification time.
187 If \fIlen\fP is 0, all modified pages within the region containing \fIaddr\fP
188 will be flushed;
189 this usage is provisional, and may be withdrawn.
190 If \fIlen\fP is non-zero, only the pages containing \fIaddr\fP and \fIlen\fP
191 succeeding locations will be examined.
192 Any required synchronization of memory caches
193 will also take place at this time.
195 Filesystem operations on a file that is mapped for shared modifications
196 are currently unpredictable except after an
197 .Fn msync .
199 A mapping can be removed by the call
201 .Fd munmap 2 "remove a mapping
202 munmap(addr, len);
203 caddr_t addr; size_t len;
205 This call deletes the mappings for the specified address range,
206 and causes further references to addresses within the range
207 to generate invalid memory references.
208 .Sh 3 "Page protection control
210 A process can control the protection of pages using the call:
212 .Fd mprotect 3 "control the protection of pages
213 mprotect(addr, len, prot);
214 caddr_t addr; size_t len; int prot;
216 This call changes the specified pages to have protection \fIprot\fP\|.
217 Not all implementations will guarantee protection on a page basis;
218 the granularity of protection changes may be as large as an entire region.
219 .Sh 3 "Giving and getting advice
221 A process that has knowledge of its memory behavior may
222 use the
223 .Fn madvise \(dg
224 call:
226 \(dg The entry point for this system call is defined,
227 but is not implemented,
228 so currently always returns with the error ``Operation not supported.''
231 .Fd madvise 3 "give advise about use of memory
232 madvise(addr, len, behav);
233 caddr_t addr; size_t len; int behav;
235 \fIBehav\fP describes expected behavior, as given
236 in \fI<sys/mman.h>\fP:
239 l l.
240 MADV_NORMAL     /* no further special treatment */
241 MADV_RANDOM     /* expect random page references */
242 MADV_SEQUENTIAL /* expect sequential references */
243 MADV_WILLNEED   /* will need these pages */
244 MADV_DONTNEED   /* don't need these pages */
248 .Fn mincore \(dg
249 function allows a process to obtain information
250 about whether pages are memory resident:
252 .Fd mincore 3 "get advise about use of memory
253 mincore(addr, len, vec);
254 caddr_t addr; size_t len; result char *vec;
256 Here the current memory residency of the pages is returned
257 in the character array \fIvec\fP, with a value of 1 meaning
258 that the page is in-memory.
259 .Fn Mincore
260 provides only transient information about page residency.
261 Real-time processes that need guaranteed residence over time
262 can use the call:
264 .Fd mlock  2 "lock physical pages in memory
265 mlock(addr, len);
266 caddr_t addr; size_t len;
268 This call locks the pages for the specified address range into memory
269 (paging them in if necessary)
270 ensuring that further references to addresses within the range
271 will never generate page faults.
272 The amount of memory that may be locked is controlled by a resource limit,
273 see section
274 .Xr 1.6.3 .
275 When the memory is no longer critical it can be unlocked using:
277 .Fd munlock  2 "unlock physical pages in memory
278 munlock(addr, len);
279 caddr_t addr; size_t len;
281 After the
282 .Fn munlock
283 call, the pages in the specified address range are still accessible
284 but may be paged out if memory is needed and they are not accessed.
285 .Sh 3 "Synchronization primitives
286 Primitives are provided for synchronization using semaphores
287 in shared memory.\(dd
289 \(dd All currently unimplemented, no entry points exists.
291 These primitives are expected to be superseded by the semaphore
292 interface being specified by the POSIX 1003 Pthread standard.
293 They are provided as an efficient interim solution.
294 Application programmers are encouraged to use the Pthread interface
295 when it becomes available.
297 Semaphores must lie within a MAP_SHARED region with at least modes
298 PROT_READ and PROT_WRITE.
299 The MAP_HASSEMAPHORE flag must have been specified when the region was created.
300 To acquire a lock a process calls:
302 .Fd mset 2 "acquire and set a semaphore
303 value = mset(sem, wait);
304 result int value; semaphore *sem; int wait;
306 .Fn Mset
307 indivisibly tests and sets the semaphore \fIsem\fP.
308 If the previous value is zero, the process has acquired the lock and
309 .Fn mset
310 returns true immediately.
311 Otherwise, if the \fIwait\fP flag is zero,
312 failure is returned.
313 If \fIwait\fP is true and the previous value is non-zero,
314 .Fn mset
315 relinquishes the processor until notified that it should retry.
317 To release a lock a process calls:
319 .Fd mclear 2 "release a semaphore and awaken waiting processes
320 mclear(sem);
321 semaphore *sem;
323 .Fn Mclear
324 indivisibly tests and clears the semaphore \fIsem\fP.
325 If the ``WANT'' flag is zero in the previous value,
326 .Fn mclear
327 returns immediately.
328 If the ``WANT'' flag is non-zero in the previous value,
329 .Fn mclear
330 arranges for waiting processes to retry before returning.
332 Two routines provide services analogous to the kernel
333 .Fn sleep
335 .Fn wakeup
336 functions interpreted in the domain of shared memory.
337 A process may relinquish the processor by calling
338 .Fn msleep
339 with a set semaphore:
341 .Fd msleep 1 "wait for a semaphore
342 msleep(sem);
343 semaphore *sem;
345 If the semaphore is still set when it is checked by the kernel,
346 the process will be put in a sleeping state
347 until some other process issues an
348 .Fn mwakeup
349 for the same semaphore within the region using the call:
351 .Fd mwakeup 1 "awaken process(es) sleeping on a semaphore
352 mwakeup(sem);
353 semaphore *sem;
356 .Fn mwakeup
357 may awaken all sleepers on the semaphore,
358 or may awaken only the next sleeper on a queue.