No empty .Rs/.Re
[netbsd-mini2440.git] / share / doc / papers / newvm / 1.t
blob105fff595bc2dcb77f2ddb773a48b8da1e92f01e
1 .\"     $NetBSD: 1.t,v 1.2 1998/01/09 06:41:37 perry Exp $
2 .\"
3 .\" Copyright (c) 1986 The Regents of the University of California.
4 .\" 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.t 5.1 (Berkeley) 4/16/91
31 .\"
32 .NH
33 Motivations for a New Virtual Memory System
34 .PP
35 The virtual memory system distributed with Berkeley UNIX has served
36 its design goals admirably well over the ten years of its existence.
37 However the relentless advance of technology has begun to render it
38 obsolete.
39 This section of the paper describes the current design,
40 points out the current technological trends,
41 and attempts to define the new design considerations that should
42 be taken into account in a new virtual memory design.
43 .SH
44 Implementation of 4.3BSD virtual memory
45 .PP
46 All Berkeley Software Distributions through 4.3BSD
47 have used the same virtual memory design.
48 All processes, whether active or sleeping, have some amount of
49 virtual address space associated with them.
50 This virtual address space
51 is the combination of the amount of address space with which they initially
52 started plus any stack or heap expansions that they have made.
53 All requests for address space are allocated from available swap space
54 at the time that they are first made;
55 if there is insufficient swap space left to honor the allocation,
56 the system call requesting the address space fails synchronously.
57 Thus, the limit to available virtual memory is established by the
58 amount of swap space allocated to the system.
59 .PP
60 Memory pages are used in a sort of shell game to contain the
61 contents of recently accessed locations.
62 As a process first references a location
63 a new page is allocated and filled either with initialized data or
64 zeros (for new stack and break pages).
65 As the supply of free pages begins to run out, dirty pages are
66 pushed to the previously allocated swap space so that they can be reused
67 to contain newly faulted pages.
68 If a previously accessed page that has been pushed to swap is once
69 again used, a free page is reallocated and filled from the swap area
70 [Babaoglu79], [Someren84].
71 .SH
72 Design assumptions for 4.3BSD virtual memory
73 .PP
74 The design criteria for the current virtual memory implementation
75 were made in 1979.
76 At that time the cost of memory was about a thousand times greater per
77 byte than magnetic disks.
78 Most machines were used as centralized time sharing machines.
79 These machines had far more disk storage than they had memory
80 and given the cost tradeoff between memory and disk storage,
81 wanted to make maximal use of the memory even at the cost of
82 wasting some of the disk space or generating extra disk I/O.
83 .PP
84 The primary motivation for virtual memory was to allow the
85 system to run individual programs whose address space exceeded
86 the memory capacity of the machine.
87 Thus the virtual memory capability allowed programs to be run that
88 could not have been run on a swap based system.
89 Equally important in the large central timesharing environment
90 was the ability to allow the sum of the memory requirements of
91 all active processes to exceed the amount of physical memory on
92 the machine.
93 The expected mode of operation for which the system was tuned
94 was to have the sum of active virtual memory be one and a half
95 to two times the physical memory on the machine.
96 .PP
97 At the time that the virtual memory system was designed,
98 most machines ran with little or no networking.
99 All the file systems were contained on disks that were
100 directly connected to the machine.
101 Similarly all the disk space devoted to swap space was also
102 directly connected.
103 Thus the speed and latency with which file systems could be accessed
104 were roughly equivalent to the speed and latency with which swap
105 space could be accessed.
106 Given the high cost of memory there was little incentive to have
107 the kernel keep track of the contents of the swap area once a process
108 exited since it could almost as easily and quickly be reread from the
109 file system.
111 New influences
113 In the ten years since the current virtual memory system was designed,
114 many technological advances have occurred.
115 One effect of the technological revolution is that the
116 micro-processor has become powerful enough to allow users to have their
117 own personal workstations.
118 Thus the computing environment is moving away from a purely centralized
119 time sharing model to an environment in which users have a
120 computer on their desk.
121 This workstation is linked through a network to a centralized
122 pool of machines that provide filing, computing, and spooling services.
123 The workstations tend to have a large quantity of memory, 
124 but little or no disk space.
125 Because users do not want to be bothered with backing up their disks,
126 and because of the difficulty of having a centralized administration
127 backing up hundreds of small disks, these local disks are typically 
128 used only for temporary storage and as swap space.
129 Long term storage is managed by the central file server.
131 Another major technical advance has been in all levels of storage capacity.
132 In the last ten years we have experienced a factor of four decrease in the
133 cost per byte of disk storage.
134 In this same period of time the cost per byte of memory has dropped
135 by a factor of a hundred!
136 Thus the cost per byte of memory compared to the cost per byte of disk is
137 approaching a difference of only about a factor of ten.
138 The effect of this change is that the way in which a machine is used
139 is beginning to change dramatically.
140 As the amount of physical memory on machines increases and the number of
141 users per machine decreases, the expected
142 mode of operation is changing from that of supporting more active virtual 
143 memory than physical memory to that of having a surplus of memory that can
144 be used for other purposes.
146 Because many machines will have more physical memory than they do swap
147 space (with diskless workstations as an extreme example!),
148 it is no longer reasonable to limit the maximum virtual memory
149 to the amount of swap space as is done in the current design.
150 Consequently, the new design will allow the maximum virtual memory
151 to be the sum of physical memory plus swap space.
152 For machines with no swap space, the maximum virtual memory will
153 be governed by the amount of physical memory.
155 Another effect of the current technology is that the latency and overhead
156 associated with accessing the file system is considerably higher
157 since the access must be be over the network
158 rather than to a locally-attached disk.
159 One use of the surplus memory would be to
160 maintain a cache of recently used files;
161 repeated uses of these files would require at most a verification from
162 the file server that the data was up to date.
163 Under the current design, file caching is done by the buffer pool,
164 while the free memory is maintained in a separate pool.
165 The new design should have only a single memory pool so that any
166 free memory can be used to cache recently accessed files.
168 Another portion of the memory will be used to keep track of the contents
169 of the blocks on any locally-attached swap space analogously
170 to the way that memory pages are handled.
171 Thus inactive swap blocks can also be used to cache less-recently-used
172 file data.
173 Since the swap disk is locally attached, it can be much more quickly
174 accessed than a remotely located file system.
175 This design allows the user to simply allocate their entire local disk
176 to swap space, thus allowing the system to decide what files should
177 be cached to maximize its usefulness.
178 This design has two major benefits.
179 It relieves the user of deciding what files
180 should be kept in a small local file system.
181 It also insures that all modified files are migrated back to the
182 file server in a timely fashion, thus eliminating the need to dump
183 the local disk or push the files manually.
185 User Interface
187 This section outlines our new virtual memory interface as it is
188 currently envisioned.
189 The details of the system call interface are contained in Appendix A.
191 Regions
193 The virtual memory interface is designed to support both large,
194 sparse address spaces as well as small, densely-used address spaces.
195 In this context, ``small'' is an address space roughly the
196 size of the physical memory on the machine, 
197 while ``large'' may extend up to the maximum addressability of the machine.
198 A process may divide its address space up into a number of regions.
199 Initially a process begins with four regions; 
200 a shared read-only fill-on-demand region with its text,
201 a private fill-on-demand region for its initialized data,
202 a private zero-fill-on-demand region for its uninitialized data and heap,
203 and a private zero-fill-on-demand region for its stack.
204 In addition to these regions, a process may allocate new ones.
205 The regions may not overlap and the system may impose an alignment
206 constraint, but the size of the region should not be limited
207 beyond the constraints of the size of the virtual address space.
209 Each new region may be mapped either as private or shared.
210 When it is privately mapped, changes to the contents of the region
211 are not reflected to any other process that map the same region.
212 Regions may be mapped read-only or read-write.
213 As an example, a shared library would be implemented as two regions;
214 a shared read-only region for the text, and a private read-write
215 region for the global variables associated with the library.
217 A region may be allocated with one of several allocation strategies.
218 It may map some memory hardware on the machine such as a frame buffer.
219 Since the hardware is responsible for storing the data,
220 such regions must be exclusive use if they are privately mapped.
222 A region can map all or part of a file.
223 As the pages are first accessed, the region is filled in with the
224 appropriate part of the file.
225 If the region is mapped read-write and shared, changes to the
226 contents of the region are reflected back into the contents of the file.
227 If the region is read-write but private,
228 changes to the region are copied to a private page that is not
229 visible to other processes mapping the file,
230 and these modified pages are not reflected back to the file.
232 The final type of region is ``anonymous memory''.
233 Uninitialed data uses such a region, privately mapped;
234 it is zero-fill-on-demand and its contents are abandoned
235 when the last reference is dropped.
236 Unlike a region that is mapped from a file,
237 the contents of an anonymous region will never be read from or
238 written to a disk unless memory is short and part of the region
239 must be paged to a swap area.
240 If one of these regions is mapped shared,
241 then all processes see the changes in the region.
242 This difference has important performance considerations;
243 the overhead of reading, flushing, and possibly allocating a file
244 is much higher than simply zeroing memory.
246 If several processes wish to share a region,
247 then they must have some way of rendezvousing.
248 For a mapped file this is easy;
249 the name of the file is used as the rendezvous point.
250 However, processes may not need the semantics of mapped files
251 nor be willing to pay the overhead associated with them.
252 For anonymous memory they must use some other rendezvous point.
253 Our current interface allows processes to associate a
254 descriptor with a region, which it may then pass to other
255 processes that wish to attach to the region.
256 Such a descriptor may be bound into the UNIX file system
257 name space so that other processes can find it just as
258 they would with a mapped file.
260 Shared memory as high speed interprocess communication
262 The primary use envisioned for shared memory is to
263 provide a high speed interprocess communication (IPC) mechanism
264 between cooperating processes.
265 Existing IPC mechanisms (\fIi.e.\fP pipes, sockets, or streams)
266 require a system call to hand off a set
267 of data destined for another process, and another system call
268 by the recipient process to receive the data.
269 Even if the data can be transferred by remapping the data pages
270 to avoid a memory to memory copy, the overhead of doing the system
271 calls limits the throughput of all but the largest transfers.
272 Shared memory, by contrast, allows processes to share data at any
273 level of granularity without system intervention.
275 However, to maintain all but the simplest of data structures,
276 the processes must serialize their modifications to shared
277 data structures if they are to avoid corrupting them.
278 This serialization is typically done with semaphores.
279 Unfortunately, most implementations of semaphores are
280 done with system calls. 
281 Thus processes are once again limited by the need to do two
282 system calls per transaction, one to lock the semaphore, the
283 second to release it.
284 The net effect is that the shared memory model provides little if 
285 any improvement in interprocess bandwidth.
287 To achieve a significant improvement in interprocess bandwidth
288 requires a large decrease in the number of system calls needed to
289 achieve the interaction.
290 In profiling applications that use
291 serialization locks such as the UNIX kernel,
292 one typically finds that most locks are not contested.
293 Thus if one can find a way to avoid doing a system call in the case
294 in which a lock is not contested,
295 one would expect to be able to dramatically reduce the number
296 of system calls needed to achieve serialization.
298 In our design, cooperating processes manage their semaphores
299 in their own address space.
300 In the typical case, a process executes an atomic test-and-set instruction
301 to acquire a lock, finds it free, and thus is able to get it.
302 Only in the (rare) case where the lock is already set does the process
303 need to do a system call to wait for the lock to clear.
304 When a process is finished with a lock, 
305 it can clear the lock itself.
306 Only if the ``WANT'' flag for the lock has been set is
307 it necessary for the process to do a system call to cause the other
308 process(es) to be awakened.
310 Another issue that must be considered is portability.
311 Some computers require access to special hardware to implement
312 atomic interprocessor test-and-set. 
313 For such machines the setting and clearing of locks would
314 all have to be done with system calls;
315 applications could still use the same interface without change,
316 though they would tend to run slowly.
318 The other issue of compatibility is with System V's semaphore
319 implementation.
320 Since the System V interface has been in existence for several years,
321 and applications have been built that depend on this interface,
322 it is important that this interface also be available.
323 Although the interface is based on system calls for both setting and
324 clearing locks,
325 the same interface can be obtained using our interface without
326 system calls in most cases.
328 This implementation can be achieved as follows.
329 System V allows entire sets of semaphores to be set concurrently.
330 If any of the locks are unavailable, the process is put to sleep
331 until they all become available.
332 Under our paradigm, a single additional semaphore is defined
333 that serializes access to the set of semaphores being simulated.
334 Once obtained in the usual way, the set of semaphores can be
335 inspected to see if the desired ones are available.
336 If they are available, they are set, the guardian semaphore
337 is released and the process proceeds.
338 If one or more of the requested set is not available,
339 the guardian semaphore is released and the process selects an
340 unavailable semaphores for which to wait.
341 On being reawakened, the whole selection process must be repeated.
343 In all the above examples, there appears to be a race condition.
344 Between the time that the process finds that a semaphore is locked,
345 and the time that it manages to call the system to sleep on the
346 semaphore another process may unlock the semaphore and issue a wakeup call.
347 Luckily the race can be avoided.
348 The insight that is critical is that the process and the kernel agree
349 on the physical byte of memory that is being used for the semaphore.
350 The system call to put a process to sleep takes a pointer
351 to the desired semaphore as its argument so that once inside
352 the kernel, the kernel can repeat the test-and-set.
353 If the lock has cleared
354 (and possibly the wakeup issued) between the time that the process
355 did the test-and-set and eventually got into the sleep request system call,
356 then the kernel immediately resumes the process rather than putting
357 it to sleep.
358 Thus the only problem to solve is how the kernel interlocks between testing
359 a semaphore and going to sleep;
360 this problem has already been solved on existing systems.
362 References
364 .IP [Babaoglu79] 20
365 Babaoglu, O., and Joy, W.,
366 ``Data Structures Added in the Berkeley Virtual Memory Extensions
367 to the UNIX Operating System''
368 Computer Systems Research Group, Dept of EECS, University of California,
369 Berkeley, CA 94720, USA, November 1979.
370 .IP [Someren84] 20
371 Someren, J. van,
372 ``Paging in Berkeley UNIX'',
373 Laboratorium voor schakeltechniek en techneik v.d. 
374 informatieverwerkende machines,
375 Codenummer 051560-44(1984)01, February 1984.