930:'s MapViewOfFile, because inter-file pointers do not work when mapping files into semi-arbitrary places. In Multics, a file (or a segment from a multi-segment file) is mapped into a segment in the address space, so files are always mapped at a segment boundary. A file's linkage section can contain pointers for which an attempt to load the pointer into a register or make an indirect reference through it causes a trap. The unresolved pointer contains an indication of the name of the segment to which the pointer refers and an offset within the segment; the handler for the trap maps the segment into the address space, puts the segment number into the pointer, changes the tag field in the pointer so that it no longer causes a trap, and returns to the code where the trap occurred, re-executing the instruction that caused the trap. This eliminates the need for a
865:
thrashing happens. The process that has the token is given a privilege to allocate more physical memory pages to build its working set, which is expected to quickly finish its execution and to release the memory pages to other processes. A time stamp is used to handover the token one by one. The first version of swap-token was implemented in Linux 2.6. The second version is called preempt swap-token and is also in Linux 2.6. In this updated swap-token implementation, a priority counter is set for each process to track the number of swap-out pages. The token is always given to the process with a high priority, which has a high number of swap-out pages. The length of the time stamp is not a constant but is determined by the priority: the higher the number of swap-out pages of a process, the longer the time stamp for it will be.
373:
369:) by which one can program as if there were only one storage." This is exactly the situation in computers with cache memory, one of the earliest commercial examples of which was the IBM System/360 Model 85. In the Model 85 all addresses were real addresses referring to the main core store. A semiconductor cache store, invisible to the user, held the contents of parts of the main store in use by the currently executing program. This is exactly analogous to GĂĽntsch's system, designed as a means to improve performance, rather than to solve the problems involved in multi-programming.
2266:
2747:
2737:
2727:
2717:
2707:
519:
33:
606:. Each entry in the page table holds a flag indicating whether the corresponding page is in real memory or not. If it is in real memory, the page table entry will contain the real memory address at which the page is stored. When a reference is made to a page by the hardware, if the page table entry for the page indicates that it is not currently in real memory, the hardware raises a
961:, provides for marking an address space as unswappable; doing so does not pin any pages in the address space. This can be done for the duration of a job by entering the name of an eligible main program in the Program Properties Table with an unswappable flag. In addition, privileged code can temporarily make an address space unswappable using a SYSEVENT
404:. The addition of virtual memory into the Atlas also eliminated a looming programming problem: planning and scheduling data transfers between main and secondary memory and recompiling programs for each change of size of main memory. The first Atlas was commissioned in 1962 but working prototypes of paging had been developed by 1959. In 1961, the
946:, in addition to whatever facilities they have for paging and segmentation. When this occurs, the OS writes those pages and segments currently in real memory to swap files. In a swap-in, the OS reads back the data from the swap files but does not automatically read back pages that had been paged out at the time of the swap out operation.
772:
of one second) whereas I/O buffers are usually short-term fixed (usually measured in significantly less than wall-clock time, possibly for tens of milliseconds). Indeed, the OS has a special facility for "fast fixing" these short-term fixed data buffers (fixing which is performed without resorting to a time-consuming
365:, since his high-speed memory was intended to contain a copy of some blocks of code or data taken from the drums. Indeed, he wrote (as quoted in translation): "The programmer need not respect the existence of the primary memory (he need not even know that it exists), for there is only one sort of addresses (
914:
solutions combined paging and segmentation because x86 paging offers only two protection domains whereas a VMM, guest OS or guest application stack needs three. The difference between paging and segmentation systems is not only about memory division; segmentation is visible to user processes, as part
268:
During the 1960s and early '70s, computer memory was very expensive. The introduction of virtual memory provided an ability for software systems with large memory demands to run on computers with less real memory. The savings from this provided a strong incentive to switch to virtual memory for all
860:
is the minimum set of pages that should be in memory in order for it to make useful progress. Thrashing occurs when there is insufficient memory available to store the working sets of all active programs. Adding real memory is the simplest response, but improving application design, scheduling, and
771:
and successor systems, the term is "fixed", and such pages may be long-term fixed, or may be short-term fixed, or may be unfixed (i.e., pageable). System control structures are often long-term fixed (measured in wall-clock time, i.e., time measured in seconds, rather than time measured in fractions
663:
Typically, a page fault that cannot be resolved results in an abnormal termination of the application. However, some systems allow the application to have exception handlers for such errors. The paging supervisor may handle a page fault exception in several different ways, depending on the details:
455:
showed that their virtual memory overlay system consistently worked better than the best manually controlled systems. Throughout the 1970s, the IBM 370 series running their virtual-storage based operating systems provided a means for business users to migrate multiple older systems into fewer, more
620:
Systems can have, e.g., one page table for the whole system, separate page tables for each address space or process, separate page tables for each segment; similarly, systems can have, e.g., no segment table, one segment table for the whole system, separate segment tables for each address space or
310:
that may produce unwanted and unpredictable delays in response to input, especially if the trap requires that data be read into main memory from secondary memory. The hardware to translate virtual addresses to physical addresses typically requires a significant chip area to implement, and not all
918:
This difference has important consequences; a segment is not a page with variable length or a simple way to lengthen the address space. Segmentation that can provide a single-level memory model in which there is no differentiation between process memory and file system consists of only a list of
864:
A system thrashing is often a result of a sudden spike in page demand from a small number of running programs. Swap-token is a lightweight and dynamic thrashing protection mechanism. The basic idea is to set a token in the system, which is randomly given to a process that has page faults when
446:
Before virtual memory could be implemented in mainstream operating systems, many problems had to be addressed. Dynamic address translation required expensive and difficult-to-build specialized hardware; initial implementations slowed down access to memory slightly. There were worries that new
660:(LRU) algorithm. Stolen page frames that have been modified are written back to auxiliary storage before they are added to the free queue. On some systems the paging supervisor is also responsible for managing translation registers that are not automatically loaded from page tables.
731:. If the pages containing these pointers or the code that they invoke were pageable, interrupt-handling would become far more complex and time-consuming, particularly in the case of page fault interruptions. Hence, some part of the page table structures is not pageable.
763:, transfers cannot be stopped if a page fault occurs and then restarted when the page fault has been processed. For example, the data could come from a measurement sensor unit and lost real time data that got lost because of a page fault can not be recovered.
909:
linear, paged address space. Segments can be moved in and out of that space; pages there can "page" in and out of main memory, providing two levels of virtual memory; few if any operating systems do so, instead using only paging. Early non-hardware-assisted
651:
This part of the operating system creates and manages page tables and lists of free page frames. In order to ensure that there will be enough free page frames to quickly resolve page faults, the system may periodically steal allocated page frames, using a
629:
use different parts of a single range of virtual addresses. If there are multiple page or segment tables, there are multiple virtual address spaces and concurrent applications with separate page tables redirect to different real addresses.
835:
mechanisms, for the paging supervisor and page tables in older systems, and for application programs using non-standard I/O management. For example, IBM's z/OS has 3 modes (virtual-virtual, virtual-real and virtual-fixed).
2285:, University of Michigan Engineering Summer Conference 1970 (revised May 1971), compares the scheduling and resource allocation approaches, including virtual memory and paging, used in four mainframe operating systems:
738:
The paging supervisor code and drivers for secondary storage devices on which pages reside must be permanently pinned, as otherwise paging would not even work because the necessary code would not be available.
447:
system-wide algorithms utilizing secondary storage would be less effective than previously used application-specific algorithms. By 1969, the debate over virtual memory for commercial computers was over; an
680:
For a fault due to a write attempt into a read-protected page, if it is a copy-on-write page then a free page frame will be assigned and the contents of the old page copied; otherwise it is treated as an
885:
supports a similar segmentation scheme as an option, but it is rarely used. Segmentation and paging can be used together by dividing each segment into pages; systems with this memory structure, such as
861:
memory usage can help. Another solution is to reduce the number of active tasks on the system. This reduces demand on real memory by swapping out the entire working set of one or more processes.
688:
In most cases, there will be an update to the page table, possibly followed by purging the
Translation Lookaside Buffer (TLB), and the system restarts the instruction that causes the exception.
831:
and similar OSes, some parts of systems memory are managed in "virtual-real" mode, called "V=R". In this mode every virtual address corresponds to the same real address. This mode is used for
64:
technique that provides an "idealized abstraction of the storage resources that are actually available on a given machine" which "creates the illusion to users of a very large (main) memory".
269:
systems. The additional capability of providing virtual address spaces added another level of security and reliability, thus making virtual memory even more attractive to the marketplace.
499:. However, loading segment descriptors was an expensive operation, causing operating system designers to rely strictly on paging rather than a combination of paging and segmentation.
2776:
357:
does not stand up to careful scrutiny. The computer proposed by GĂĽntsch (but never built) had an address space of 10 words which mapped exactly onto the 10 words of the drums,
881:
instead of paging, dividing virtual address spaces into variable-length segments. A virtual address here consists of a segment number and an offset within the segment. The
120:
between processes, increased security due to memory isolation, and being able to conceptually use more memory than might be physically available, using the technique of
856:" can occur, in which the computer spends an unsuitably large amount of time transferring pages to and from a backing store, hence slowing down useful work. A task's
734:
Some pages may be pinned for short periods of time, others may be pinned for long periods of time, and still others may need to be permanently pinned. For example:
346:
323:. Virtual memory was therefore introduced not only to extend primary memory, but to make such an extension as easy as possible for programmers to use. To allow for
109:(MMU), automatically translates virtual addresses to physical addresses. Software within the operating system may extend these capabilities, utilizing, e.g.,
113:, to provide a virtual address space that can exceed the capacity of real memory and thus reference more memory than is physically present in the computer.
302:
and other special-purpose computer systems that require very fast and/or very consistent response times may opt not to use virtual memory due to decreased
968:
Swapping does not necessarily require memory management hardware, if, for example, multiple jobs are swapped in and out of the same area of storage.
361:
the addresses were real addresses and there was no form of indirect mapping, a key feature of virtual memory. What GĂĽntsch did invent was a form of
1173:
116:
The primary benefits of virtual memory include freeing applications from having to manage a shared memory space, ability to share memory used by
790:
refer to pages temporarily made nonpageable (as for I/O buffers) as "locked", and simply "nonpageable" for those that are never pageable. The
2273:
671:
If the page is valid and the page information is not loaded into the MMU, the page information will be stored into one of the page registers.
186:
can employ hardware support to increase performance of their virtual memory implementations. Older operating systems, such as those for the
2687:
965:(SVC); certain changes in the address space properties require that the OS swap it out and then swap it back in, using SYSEVENT TRANSWAP.
2348:
1180:
684:
If the virtual address is a valid page in a memory-mapped file or a paging file, a free page frame will be assigned and the page read in.
1887:
Song Jiang; Xiaodong Zhang (2005). "Token-ordered LRU: an effective page replacement policy and its implementation in Linux systems".
2316:
2184:
1587:
396:
mechanism to map the virtual addresses available to the programmer onto the real memory that consisted of 16,384 words of primary
2396:
1401:
915:
of memory model semantics. Hence, instead of memory that looks like a single large space, it is structured into multiple spaces.
759:
to which they are attached expect to find data buffers located at physical memory addresses; regardless of whether the bus has a
311:
chips used in embedded systems include that hardware, which is another reason some of those systems do not use virtual memory.
1614:
2740:
2544:
2368:
2150:
1826:
1672:
1555:
998:
293:
61:
2730:
19:
This article is about the computer memory management technique. For the technique of pooling multiple storage devices, see
2750:
355:
Logical Design of a
Digital Computer with Multiple Asynchronous Rotating Drums and Automatic High Speed Memory Operation
1792:
1244:
934:
completely and works when different processes map the same file into different places in their private address spaces.
625:
in a tree of region tables for each address space or process. If there is only one page table, different applications
280:. Each program thus appears to have sole access to the virtual memory. However, some older operating systems (such as
2222:
1210:
1018:
558:
105:
and the assignment of real memory to virtual memory. Address translation hardware in the CPU, often referred to as a
2317:
The
Virtual-Memory Manager in Windows NT, Randy Kath, Microsoft Developer Network Technology Group, 12 December 1992
1940:
2042:
1698:
1339:
1971:
1643:
350:
331:, many early systems divided memory between multiple programs without virtual memory, such as early models of the
194:), generally have no virtual memory functionality, though notable exceptions for mainframes of the 1960s include:
137:
2567:
2341:
536:
954:
2692:
540:
1147:
583:
in size; systems with large virtual address ranges or amounts of real memory generally use larger page sizes.
1628:
1314:
257:
145:
1689:
2552:
2390:
853:
319:
In the 1950s, all larger programs had to contain logic for managing primary and secondary storage, such as
41:
2238:, by Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau. Arpaci-Dusseau Books, 2014. Relevant chapters:
2529:
962:
773:
208:
2710:
2597:
2587:
2577:
2430:
2334:
988:
692:
691:
If the free page frame queue is empty then the paging supervisor must free a page frame using the same
653:
24:
1154:
1102:
579:, blocks of contiguous virtual memory addresses. Pages on contemporary systems are usually at least 4
2656:
791:
144:
explicitly); and, when each process is run in its own dedicated address space, by obviating the need
602:
to process instructions; such hardware that handles this specific translation is often known as the
2516:
2294:
2081:
1579:
385:
230:
133:
2771:
2720:
2582:
2557:
2463:
2260:
1925:
1089:
1068:
529:
303:
242:
175:
1525:
755:
must reside in pinned pages while the I/O operation is in progress because such devices and the
2534:
2486:
2384:
2191:. z/OS MVS Programming: Authorized Assembler Services Reference SET-WTO SA23-1375-00. 1990–2014
2076:
1064:
983:
603:
576:
372:
171:
106:
20:
1998:
1849:
1782:
1503:
Kilburn, T.; Edwards, D.B.G.; Lanigan, M.J.; Sumner, F.H. (1962), "One-level
Storage System",
1234:
2562:
1949:
1816:
1746:
Sayre, D. (1969). "Is automatic "folding" of programs efficient enough to displace manual?".
878:
874:
639:
572:
492:
440:
413:
405:
328:
320:
222:
167:
155:
149:
141:
102:
77:
2245:
677:
If there is a stolen page frame containing the desired page, that page frame will be reused.
2254:
748:
397:
90:
37:
2257:
8:
2440:
2242:
2002:
1477:
657:
487:
processor, but its segment swapping technique scaled poorly to larger segment sizes. The
273:
117:
98:
2682:
2666:
2592:
2094:
1926:"Swap Token effectively minimizes system thrasing effects and is adopted in OS kernels"
1763:
1445:
1296:
931:
911:
336:
187:
2248:
2458:
2357:
2239:
2218:
2146:
1904:
1856:
1822:
1788:
1729:
z/VM built on IBM Virtualization
Technology General Information Version 4 Release 3.0
1668:
1622:
1551:
1543:
1437:
1288:
1240:
1206:
1048:
993:
787:
599:
2251:
2139:
1767:
1449:
1300:
1269:"Direct address translation for virtual memory in energy-efficient embedded systems"
2635:
2630:
2473:
2098:
2086:
1896:
1755:
1702:
1596:
1508:
1486:
1429:
1374:
1280:
978:
626:
614:
610:
595:
324:
307:
212:
203:
199:
68:
2310:
1475:
Liptay, J.S. (1968), "Structural
Aspects of the System/360 Model 85 – The Cache",
435:
as
Virtual Machine Facility/370. IBM introduced the Start Interpretive Execution (
2625:
2524:
2320:
1662:
1268:
1200:
756:
299:
296:
that run all processes in a single address space composed of virtualized memory.
183:
86:
495:
layer, enabling the page fault exception to chain with other exceptions without
190:
of the 1960s, and those for personal computers of the early to mid-1980s (e.g.,
2640:
2607:
2602:
2448:
1900:
1378:
1076:
1003:
668:
If the virtual address is invalid, the paging supervisor treats it as an error.
480:
432:
389:
377:
261:
170:; implementations usually require hardware support, typically in the form of a
72:
408:
independently released the first commercial computer with virtual memory, the
2765:
2617:
2420:
2415:
1908:
1512:
1441:
1292:
943:
891:
849:
508:
277:
251:
218:
94:
2064:
1284:
894:, are usually paging-predominant, segmentation providing memory protection.
464:; during the 1970s, other minicomputers implemented virtual memory, notably
1044:
674:
If the page is uninitialized, a new page frame may be assigned and cleared.
496:
457:
362:
285:
136:
of physical memory; by delegating to the kernel the burden of managing the
110:
2112:
2090:
2025:
1759:
1727:
1706:
1433:
741:
Timing-dependent components may be pinned to avoid variable paging delays.
2661:
1040:
898:
882:
857:
752:
744:
594:
are used to translate the virtual addresses seen by the application into
488:
484:
452:
401:
342:
A claim that the concept of virtual memory was first developed by German
2235:
1600:
1343:
272:
Most modern operating systems that support virtual memory also run each
2425:
2027:
2005:
1647:
1490:
768:
728:
607:
591:
543: in this section. Unsourced material may be challenged and removed.
420:
2572:
2453:
2165:
The most important requirement is that the program be APF authorized.
1156:
System/360 Model 67 Time
Sharing System Preliminary Technical Summary
832:
816:
812:
720:
424:
343:
179:
158:
can be considered a generalization of the concept of virtual memory.
49:
2326:
2063:
Bensoussan, André; Clingen, CharlesT.; Daley, Robert C. (May 1972).
919:
segments (files) mapped into the process's potential address space.
518:
456:
powerful, mainframes that had improved price/performance. The first
2506:
2501:
2491:
2481:
723:
mechanisms rely on an array of pointers to their handlers, such as
580:
439:) instruction as part of 370-XA on the 3081, and VM/XA versions of
2496:
2298:
2290:
2045:
Virtual
Machines: Architectures, Implementations and Applications
1021:, a series of specifications intended to unify CPU and GPU memory
922:
This is not the same as the mechanisms provided by calls such as
887:
783:
779:
634:
633:
Some earlier systems with smaller real memory sizes, such as the
469:
384:
The first true virtual memory system was that implemented at the
247:
234:
32:
1784:
IBM Power
Systems Performance Guide: Implementing and Optimizing
1420:
Jessen, E. (1996). "Die Entwicklung des virtuellen Speichers".
1110:
1106:
906:
845:
828:
461:
393:
332:
281:
238:
121:
1942:
Burroughs B5500 Information Processing System Reference Manual
571:
Nearly all current implementations of virtual memory divide a
132:
Virtual memory makes application programming easier by hiding
2286:
1399:
Jessen, Elke (2004). "Origin of the Virtual Memory Concept".
1202:
Architectural and Operating System Support for Virtual Memory
1123:
927:
902:
760:
428:
409:
289:
225:
1182:
z/OS Version 2 Release 4 z/OS Introduction and Release Guide
2028:"System Design of a Computer for Time Sharing Applications"
1502:
1072:
1013:
958:
923:
707:(never swapped to secondary storage). Other terms used are
1126:
there is a 3-level tree of regions for each address space.
747:
that are accessed directly by peripheral devices that use
643:
instead of page tables in memory for address translation.
1997:
1865:
1007:
950:
724:
476:
465:
448:
191:
2777:
Department of Computer Science, University of Manchester
2026:
Glaser, Edward L.; Couleur, John F. & Oliver, G. A.
1886:
215:(software based virtual memory without hardware support)
93:, as seen by a process or task, appears as a contiguous
2304:
2369:
Memory management as a function of an operating system
2062:
794:
also uses the term "locked" in the specification for
380:
was the first computer to feature true virtual memory.
1063:
on mainframe operating systems. This usage runs from
71:, using a combination of hardware and software, maps
1386:
In the Beginning: Recollections of Software Pioneers
1233:
Haldar, Sibsankar; Aravind, Alex Alagarsamy (2010).
1088:
IBM had previously used the term hypervisor for the
388:
to create a one-level storage system as part of the
2141:
The Multics System: An Examination of Its Structure
1198:
942:Some operating systems provide for swapping entire
2138:
1920:
1918:
1456:
1267:Zhou, Xiangrong; Petrov, Peter (1 December 2008).
1188:. IBM. 22 September 2020. p. 3. GA32-0887-40.
613:, invoking the paging supervisor component of the
491:introduced paging support underneath the existing
2065:"The Multics Virtual Memory: Concepts and Design"
2006:"Introduction and Overview of the Multics System"
1526:"Ferranti Atlas 1 & 2 – Systems Architecture"
2763:
1691:System/370 integrated emulation under OS and DOS
1199:Bhattacharjee, Abhishek; Lustig, Daniel (2017).
140:(eliminating the need for the program to handle
2185:"Control swapping (DONTSWAP, OKSWAP, TRANSWAP)"
1915:
1617:. Archived from the original on 6 October 2014.
1205:. Morgan & Claypool Publishers. p. 1.
306:; virtual memory systems trigger unpredictable
166:Virtual memory is an integral part of a modern
2215:Computer Architecture, A Quantitative Approach
1687:
1667:. Jones and Bartlett Publishers. p. 113.
1580:"The origin of the VM/370 time-sharing system"
1342:. Microsoft. 23 September 2011. Archived from
1273:ACM Transactions on Embedded Computing Systems
460:to introduce virtual memory was the Norwegian
44:to form a large range of contiguous addresses.
2342:
1232:
703:Operating systems have memory areas that are
400:with an additional 98,304 words of secondary
2688:International Symposium on Memory Management
2213:Hennessy, John L.; and Patterson, David A.;
1868:. May 2022. pp. 3-46–3-53. SA22-7832-13
1550:. John Wiley and Sons. pp. 1832–1835.
868:
2349:
2335:
2041:Smith, J. E.; Uhlig, R. (14 August 2005).
2040:
1781:Quintero, Dino; et al. (1 May 2013).
1701:. Vol. 38. AFIPS Press. p. 164.
1369:
1367:
1365:
1363:
1361:
1266:
621:process, separate segment tables for each
2080:
1938:
1588:IBM Journal of Research & Development
1092:, but that did not involve virtual memory
937:
822:
559:Learn how and when to remove this message
2174:e.g., requesting use of preferred memory
2136:
1858:z/Architecture - Principles of Operation
1780:
1413:
1239:. Pearson Education India. p. 269.
371:
31:
1664:Memory Systems and Pipelined Processors
1541:
1402:IEEE Annals of the History of Computing
1373:
1358:
1148:"SYSTEM COMPONENTS: Dynamic Relocation"
502:
2764:
2283:Advanced Topics in Systems Programming
1814:
1660:
1577:
1474:
1462:
1419:
1398:
294:single address space operating systems
148:program code or to access memory with
2356:
2330:
1745:
999:Memory management (operating systems)
905:processors, the segments reside in a
475:Virtual memory was introduced to the
2236:Operating Systems: Three Easy Pieces
1542:Denning, Peter J. (1 January 2003).
1162:. IBM. 1966. p. 21. C20-1647-0.
1010:mode that allows for virtual memory.
646:
541:adding citations to reliable sources
512:
16:Computer memory management technique
2397:Input–output memory management unit
13:
2267:"Time-Sharing Supervisor Programs"
2207:
2047:, HOTCHIPS 17, Tutorial 1, part 2"
1641:
431:, and in 1972 provided it for the
14:
2788:
2229:
1821:. Excel Books India. p. 62.
1019:Heterogeneous System Architecture
2746:
2745:
2736:
2735:
2726:
2725:
2716:
2715:
2706:
2705:
2305:LinuxMM: Linux Memory Management
1787:. IBM Corporation. p. 138.
1699:Spring Joint Computer Conference
1578:Creasy, R. J. (September 1981).
1548:Encyclopedia of Computer Science
517:
353:in 1956 in his doctoral thesis,
288:) and even modern ones (such as
2568:Concurrent mark sweep collector
2177:
2168:
2159:
2130:
2113:"Multics Execution Environment"
2105:
2056:
2034:
2019:
1991:
1964:
1932:
1880:
1842:
1818:Foundation of Operating Systems
1808:
1774:
1739:
1720:
1681:
1654:
1635:
1607:
1571:
1535:
1518:
1496:
1468:
1392:
1116:
1113:only supported 2 KB pages.
1095:
1082:
804:
795:
767:In IBM's operating systems for
698:
528:needs additional citations for
101:. The operating system manages
36:Virtual memory combines active
2693:Region-based memory management
1979:. January 1968. pp. 21–30
1735:. 12 April 2002. GC24-5991-04.
1332:
1307:
1260:
1226:
1192:
1166:
1140:
1053:
1033:
761:memory management unit for I/O
586:
1:
2137:Organick, Elliott I. (1972).
1133:
419:IBM developed the concept of
376:The University of Manchester
351:Technische Universität Berlin
258:Time Sharing Operating System
127:
23:. For the TBN game show, see
2741:Memory management algorithms
2553:Automatic Reference Counting
2391:Translation lookaside buffer
2323: (archived 22 June 2010)
1174:"BCP (Base Control Program)"
852:are used, a problem called "
839:
97:or collection of contiguous
7:
2731:Automatic memory management
2530:C dynamic memory allocation
2281:by Michael T. Alexander in
1688:Gary R. Allred (May 1971).
1379:"Before Memory Was Virtual"
1043:; contemporary systems use
971:
963:Supervisor Call instruction
774:Supervisor Call instruction
209:THE multiprogramming system
10:
2793:
2751:Memory management software
2598:Tracing garbage collection
2431:Virtual memory compression
2313:, mailing list discussion.
1901:10.1016/j.peva.2004.10.002
1661:Cragon, Harvey G. (1996).
989:Cache replacement policies
873:Some systems, such as the
693:page replacement algorithm
654:page replacement algorithm
506:
314:
75:used by a program, called
25:Virtual Memory (game show)
18:
2701:
2675:
2649:
2616:
2543:
2515:
2472:
2439:
2406:
2377:
2364:
2069:Communications of the ACM
1748:Communications of the ACM
1627:: CS1 maint: unfit URL (
1340:"Windows Version History"
792:Single UNIX Specification
2525:Static memory allocation
2517:Manual memory management
1513:10.1109/TEC.1962.5219356
1026:
869:Segmented virtual memory
627:running at the same time
386:University of Manchester
161:
2583:Garbage-first collector
2558:Boehm garbage collector
2464:x86 memory segmentation
1864:(Fourteenth ed.).
1285:10.1145/1457246.1457251
782:used the term "wired".
243:IBM System/360 Model 67
178:. While not necessary,
40:and inactive memory on
2588:Mark–compact algorithm
2385:Memory management unit
2249:Introduction to Paging
1889:Performance Evaluation
1315:"AMD-V™ Nested Paging"
984:Page (computer memory)
938:Address space swapping
823:Virtual-real operation
604:memory management unit
479:architecture with the
381:
172:memory management unit
107:memory management unit
103:virtual address spaces
45:
21:Storage virtualization
2311:Birth of Linux Kernel
2091:10.1145/355602.361306
1950:Burroughs Corporation
1760:10.1145/363626.363629
1707:10.1109/AFIPS.1971.58
1434:10.1007/s002870050034
719:pages. For example,
573:virtual address space
451:research team led by
406:Burroughs Corporation
375:
276:in its own dedicated
168:computer architecture
156:Memory virtualization
35:
2535:new and delete (C++)
2258:Swapping: Mechanisms
2255:Advanced Page Tables
2189:IBM Knowledge Center
1973:GE-645 System Manual
1850:"Translation Tables"
749:direct memory access
537:improve this article
503:Paged virtual memory
416:rather than paging.
347:Fritz-Rudolf GĂĽntsch
2441:Memory segmentation
2279:on 1 November 2012.
2243:Address Translation
1815:Sharma, Dp (2009).
1601:10.1147/rd.255.0483
1531:. 12 November 2009.
1478:IBM Systems Journal
1422:Informatik-Spektrum
1039:Early systems used
695:for page stealing.
658:Least recently used
150:relative addressing
2683:Automatic variable
2667:Unreachable memory
2593:Reference counting
2563:Cheney's algorithm
2545:Garbage collection
2261:Swapping: Policies
1939:Burroughs (1964).
1491:10.1147/sj.71.0015
1059:IBM uses the term
1049:solid state memory
1014:CUDA Pinned memory
912:x86 virtualization
596:physical addresses
382:
83:physical addresses
46:
2759:
2758:
2711:Memory management
2459:Virtual 8086 mode
2358:Memory management
2152:978-0-262-15012-5
1828:978-81-7446-626-6
1674:978-0-86720-474-2
1557:978-0-470-86412-8
1346:on 8 January 2015
1236:Operating Systems
994:Memory management
647:Paging supervisor
569:
568:
561:
124:or segmentation.
78:virtual addresses
62:memory management
2784:
2749:
2748:
2739:
2738:
2729:
2728:
2719:
2718:
2709:
2708:
2636:Dangling pointer
2631:Buffer over-read
2603:Strong reference
2474:Memory allocator
2351:
2344:
2337:
2328:
2327:
2280:
2278:
2272:. Archived from
2271:
2201:
2200:
2198:
2196:
2181:
2175:
2172:
2166:
2163:
2157:
2156:
2144:
2134:
2128:
2127:
2125:
2123:
2109:
2103:
2102:
2084:
2060:
2054:
2053:
2051:
2038:
2032:
2031:
2023:
2017:
2016:
2014:
2012:
2003:Vyssotsky, V. A.
1995:
1989:
1988:
1986:
1984:
1978:
1968:
1962:
1961:
1959:
1957:
1947:
1936:
1930:
1929:
1922:
1913:
1912:
1884:
1878:
1877:
1875:
1873:
1863:
1854:
1846:
1840:
1839:
1837:
1835:
1812:
1806:
1805:
1803:
1801:
1778:
1772:
1771:
1743:
1737:
1736:
1734:
1724:
1718:
1717:
1715:
1713:
1696:
1685:
1679:
1678:
1658:
1652:
1651:
1646:. Archived from
1639:
1633:
1632:
1626:
1618:
1611:
1605:
1604:
1584:
1575:
1569:
1568:
1566:
1564:
1544:"Virtual memory"
1539:
1533:
1532:
1530:
1522:
1516:
1515:
1500:
1494:
1493:
1472:
1466:
1460:
1454:
1453:
1417:
1411:
1410:
1396:
1390:
1389:
1383:
1371:
1356:
1355:
1353:
1351:
1336:
1330:
1329:
1327:
1325:
1319:
1311:
1305:
1304:
1264:
1258:
1257:
1255:
1253:
1230:
1224:
1223:
1221:
1219:
1196:
1190:
1189:
1187:
1178:
1170:
1164:
1163:
1161:
1152:
1144:
1127:
1120:
1114:
1099:
1093:
1086:
1080:
1057:
1051:
1037:
979:Processor design
955:OS/VS2 Release 2
811:
810:
807:
802:
801:
798:
615:operating system
564:
557:
553:
550:
544:
521:
513:
443:to exploit it.
325:multiprogramming
300:Embedded systems
213:Electrologica X8
200:Atlas Supervisor
184:virtual machines
138:memory hierarchy
73:memory addresses
69:operating system
2792:
2791:
2787:
2786:
2785:
2783:
2782:
2781:
2762:
2761:
2760:
2755:
2697:
2671:
2645:
2626:Buffer overflow
2612:
2539:
2511:
2468:
2435:
2402:
2373:
2360:
2355:
2321:Wayback Machine
2276:
2269:
2265:
2232:
2210:
2208:Further reading
2205:
2204:
2194:
2192:
2183:
2182:
2178:
2173:
2169:
2164:
2160:
2153:
2135:
2131:
2121:
2119:
2111:
2110:
2106:
2061:
2057:
2049:
2039:
2035:
2024:
2020:
2010:
2008:
1996:
1992:
1982:
1980:
1976:
1970:
1969:
1965:
1955:
1953:
1945:
1937:
1933:
1924:
1923:
1916:
1885:
1881:
1871:
1869:
1861:
1852:
1848:
1847:
1843:
1833:
1831:
1829:
1813:
1809:
1799:
1797:
1795:
1779:
1775:
1754:(12): 656–660.
1744:
1740:
1732:
1726:
1725:
1721:
1711:
1709:
1694:
1686:
1682:
1675:
1659:
1655:
1650:on 10 May 2017.
1640:
1636:
1620:
1619:
1613:
1612:
1608:
1582:
1576:
1572:
1562:
1560:
1558:
1540:
1536:
1528:
1524:
1523:
1519:
1505:IRE Trans EC-11
1501:
1497:
1473:
1469:
1461:
1457:
1418:
1414:
1397:
1393:
1381:
1372:
1359:
1349:
1347:
1338:
1337:
1333:
1323:
1321:
1317:
1313:
1312:
1308:
1265:
1261:
1251:
1249:
1247:
1231:
1227:
1217:
1215:
1213:
1197:
1193:
1185:
1176:
1172:
1171:
1167:
1159:
1150:
1146:
1145:
1141:
1136:
1131:
1130:
1121:
1117:
1100:
1096:
1087:
1083:
1061:virtual storage
1058:
1054:
1038:
1034:
1029:
1024:
974:
940:
871:
842:
825:
808:
805:
799:
796:
727:completion and
701:
649:
589:
565:
554:
548:
545:
534:
522:
511:
505:
468:models running
317:
174:built into the
164:
130:
87:computer memory
67:The computer's
58:virtual storage
28:
17:
12:
11:
5:
2790:
2780:
2779:
2774:
2772:Virtual memory
2757:
2756:
2754:
2753:
2743:
2733:
2723:
2721:Virtual memory
2713:
2702:
2699:
2698:
2696:
2695:
2690:
2685:
2679:
2677:
2673:
2672:
2670:
2669:
2664:
2659:
2653:
2651:
2647:
2646:
2644:
2643:
2641:Stack overflow
2638:
2633:
2628:
2622:
2620:
2614:
2613:
2611:
2610:
2608:Weak reference
2605:
2600:
2595:
2590:
2585:
2580:
2575:
2570:
2565:
2560:
2555:
2549:
2547:
2541:
2540:
2538:
2537:
2532:
2527:
2521:
2519:
2513:
2512:
2510:
2509:
2504:
2499:
2494:
2489:
2484:
2478:
2476:
2470:
2469:
2467:
2466:
2461:
2456:
2451:
2449:Protected mode
2445:
2443:
2437:
2436:
2434:
2433:
2428:
2423:
2418:
2412:
2410:
2408:Virtual memory
2404:
2403:
2401:
2400:
2394:
2388:
2381:
2379:
2375:
2374:
2372:
2371:
2365:
2362:
2361:
2354:
2353:
2346:
2339:
2331:
2325:
2324:
2314:
2308:
2302:
2263:
2240:Address Spaces
2231:
2230:External links
2228:
2227:
2226:
2209:
2206:
2203:
2202:
2176:
2167:
2158:
2151:
2129:
2117:Multicians.org
2104:
2082:10.1.1.10.6731
2075:(5): 308–318.
2055:
2033:
2018:
1990:
1963:
1931:
1914:
1879:
1841:
1827:
1807:
1794:978-0738437668
1793:
1773:
1738:
1719:
1680:
1673:
1653:
1634:
1606:
1570:
1556:
1534:
1517:
1507:(2): 223–235,
1495:
1467:
1455:
1428:(4): 216–219.
1412:
1391:
1375:Denning, Peter
1357:
1331:
1306:
1259:
1246:978-8131730225
1245:
1225:
1211:
1191:
1165:
1138:
1137:
1135:
1132:
1129:
1128:
1115:
1094:
1081:
1077:z/Architecture
1052:
1031:
1030:
1028:
1025:
1023:
1022:
1016:
1011:
1004:Protected mode
1001:
996:
991:
986:
981:
975:
973:
970:
944:address spaces
939:
936:
870:
867:
841:
838:
824:
821:
765:
764:
742:
739:
700:
697:
686:
685:
682:
678:
675:
672:
669:
648:
645:
640:page registers
588:
585:
567:
566:
525:
523:
516:
504:
501:
481:protected mode
390:Atlas Computer
378:Atlas Computer
316:
313:
266:
265:
262:RCA Spectra 70
254:
245:
228:
216:
206:
163:
160:
129:
126:
54:virtual memory
15:
9:
6:
4:
3:
2:
2789:
2778:
2775:
2773:
2770:
2769:
2767:
2752:
2744:
2742:
2734:
2732:
2724:
2722:
2714:
2712:
2704:
2703:
2700:
2694:
2691:
2689:
2686:
2684:
2681:
2680:
2678:
2674:
2668:
2665:
2663:
2660:
2658:
2657:Fragmentation
2655:
2654:
2652:
2648:
2642:
2639:
2637:
2634:
2632:
2629:
2627:
2624:
2623:
2621:
2619:
2618:Memory safety
2615:
2609:
2606:
2604:
2601:
2599:
2596:
2594:
2591:
2589:
2586:
2584:
2581:
2579:
2576:
2574:
2571:
2569:
2566:
2564:
2561:
2559:
2556:
2554:
2551:
2550:
2548:
2546:
2542:
2536:
2533:
2531:
2528:
2526:
2523:
2522:
2520:
2518:
2514:
2508:
2505:
2503:
2500:
2498:
2495:
2493:
2490:
2488:
2485:
2483:
2480:
2479:
2477:
2475:
2471:
2465:
2462:
2460:
2457:
2455:
2452:
2450:
2447:
2446:
2444:
2442:
2438:
2432:
2429:
2427:
2424:
2422:
2421:Memory paging
2419:
2417:
2416:Demand paging
2414:
2413:
2411:
2409:
2405:
2398:
2395:
2392:
2389:
2386:
2383:
2382:
2380:
2376:
2370:
2367:
2366:
2363:
2359:
2352:
2347:
2345:
2340:
2338:
2333:
2332:
2329:
2322:
2318:
2315:
2312:
2309:
2306:
2303:
2300:
2296:
2292:
2288:
2284:
2275:
2268:
2264:
2262:
2259:
2256:
2253:
2250:
2247:
2244:
2241:
2237:
2234:
2233:
2224:
2223:1-55860-724-2
2220:
2216:
2212:
2211:
2190:
2186:
2180:
2171:
2162:
2154:
2148:
2145:. MIT Press.
2143:
2142:
2133:
2118:
2114:
2108:
2100:
2096:
2092:
2088:
2083:
2078:
2074:
2070:
2066:
2059:
2048:
2046:
2037:
2029:
2022:
2007:
2004:
2000:
1999:CorbatĂł, F.J.
1994:
1975:
1974:
1967:
1951:
1944:
1943:
1935:
1927:
1921:
1919:
1910:
1906:
1902:
1898:
1895:(1–4): 5–29.
1894:
1890:
1883:
1867:
1860:
1859:
1851:
1845:
1830:
1824:
1820:
1819:
1811:
1796:
1790:
1786:
1785:
1777:
1769:
1765:
1761:
1757:
1753:
1749:
1742:
1731:
1730:
1723:
1708:
1704:
1700:
1693:
1692:
1684:
1676:
1670:
1666:
1665:
1657:
1649:
1645:
1642:Joyner, Ian.
1638:
1630:
1624:
1616:
1610:
1602:
1598:
1594:
1590:
1589:
1581:
1574:
1559:
1553:
1549:
1545:
1538:
1527:
1521:
1514:
1510:
1506:
1499:
1492:
1488:
1484:
1480:
1479:
1471:
1464:
1463:Jessen (2004)
1459:
1451:
1447:
1443:
1439:
1435:
1431:
1427:
1424:(in German).
1423:
1416:
1408:
1404:
1403:
1395:
1387:
1380:
1376:
1370:
1368:
1366:
1364:
1362:
1345:
1341:
1335:
1316:
1310:
1302:
1298:
1294:
1290:
1286:
1282:
1278:
1274:
1270:
1263:
1248:
1242:
1238:
1237:
1229:
1214:
1212:9781627056021
1208:
1204:
1203:
1195:
1184:
1183:
1175:
1169:
1158:
1157:
1149:
1143:
1139:
1125:
1119:
1112:
1108:
1104:
1098:
1091:
1085:
1078:
1074:
1070:
1066:
1062:
1056:
1050:
1046:
1042:
1036:
1032:
1020:
1017:
1015:
1012:
1009:
1005:
1002:
1000:
997:
995:
992:
990:
987:
985:
982:
980:
977:
976:
969:
966:
964:
960:
956:
952:
947:
945:
935:
933:
929:
925:
920:
916:
913:
908:
904:
900:
895:
893:
892:IBM System/38
889:
884:
880:
876:
866:
862:
859:
855:
851:
850:page stealing
847:
837:
834:
830:
820:
818:
814:
793:
789:
785:
781:
777:
775:
770:
762:
758:
754:
750:
746:
743:
740:
737:
736:
735:
732:
730:
726:
722:
718:
714:
710:
706:
696:
694:
689:
683:
679:
676:
673:
670:
667:
666:
665:
661:
659:
655:
644:
642:
641:
636:
631:
628:
624:
618:
616:
612:
609:
605:
601:
597:
593:
584:
582:
578:
574:
563:
560:
552:
549:December 2010
542:
538:
532:
531:
526:This section
524:
520:
515:
514:
510:
509:Memory paging
500:
498:
494:
490:
486:
482:
478:
473:
471:
467:
463:
459:
454:
450:
444:
442:
438:
434:
430:
426:
422:
417:
415:
411:
407:
403:
399:
395:
391:
387:
379:
374:
370:
368:
364:
360:
356:
352:
348:
345:
340:
338:
334:
330:
326:
322:
312:
309:
305:
301:
297:
295:
291:
287:
283:
279:
278:address space
275:
270:
263:
259:
255:
253:
249:
246:
244:
240:
236:
232:
229:
227:
224:
220:
217:
214:
210:
207:
205:
201:
197:
196:
195:
193:
189:
185:
181:
177:
173:
169:
159:
157:
153:
151:
147:
143:
139:
135:
134:fragmentation
125:
123:
119:
114:
112:
108:
104:
100:
96:
95:address space
92:
88:
84:
80:
79:
74:
70:
65:
63:
59:
55:
51:
43:
39:
34:
30:
26:
22:
2407:
2282:
2274:the original
2246:Segmentation
2214:
2193:. Retrieved
2188:
2179:
2170:
2161:
2140:
2132:
2120:. Retrieved
2116:
2107:
2072:
2068:
2058:
2044:
2036:
2021:
2009:. Retrieved
1993:
1981:. Retrieved
1972:
1966:
1954:. Retrieved
1941:
1934:
1892:
1888:
1882:
1870:. Retrieved
1857:
1844:
1832:. Retrieved
1817:
1810:
1798:. Retrieved
1783:
1776:
1751:
1747:
1741:
1728:
1722:
1710:. Retrieved
1690:
1683:
1663:
1656:
1648:the original
1637:
1609:
1592:
1586:
1573:
1561:. Retrieved
1547:
1537:
1520:
1504:
1498:
1482:
1476:
1470:
1458:
1425:
1421:
1415:
1406:
1400:
1394:
1385:
1348:. Retrieved
1344:the original
1334:
1322:. Retrieved
1309:
1276:
1272:
1262:
1250:. Retrieved
1235:
1228:
1216:. Retrieved
1201:
1194:
1181:
1168:
1155:
1142:
1118:
1097:
1084:
1060:
1055:
1035:
967:
948:
941:
921:
917:
896:
879:segmentation
872:
863:
843:
826:
803:, as do the
778:
766:
753:I/O channels
745:Data buffers
733:
716:
712:
708:
704:
702:
699:Pinned pages
690:
687:
662:
650:
638:
632:
622:
619:
598:used by the
590:
570:
555:
546:
535:Please help
530:verification
527:
497:double fault
493:segmentation
474:
458:minicomputer
445:
436:
418:
414:segmentation
392:. It used a
383:
366:
363:cache memory
358:
354:
341:
329:multitasking
318:
298:
271:
267:
165:
154:
131:
115:
111:disk storage
91:Main storage
82:
76:
66:
57:
53:
47:
29:
2662:Memory leak
2011:13 November
1983:25 February
1956:28 November
1644:"Burroughs"
1615:"The Atlas"
1409:(4): 71–72.
1279:(1): 1–31.
899:Intel 80386
883:Intel 80286
877:B5500, use
858:working set
592:Page tables
587:Page tables
489:Intel 80386
485:Intel 80286
453:David Sayre
421:hypervisors
402:drum memory
398:core memory
304:determinism
146:to relocate
2766:Categories
2426:Page table
1872:18 January
1595:(5): 486.
1563:10 January
1252:16 October
1218:16 October
1134:References
901:and later
769:System/370
729:page fault
656:, e.g., a
608:page fault
507:See also:
321:overlaying
286:OS/VS2 SVS
188:mainframes
128:Properties
2573:Finalizer
2454:Real mode
2195:9 October
2122:9 October
2077:CiteSeerX
1952:. 1021326
1909:0166-5316
1485:: 15–21,
1442:0170-6012
1293:1539-9087
875:Burroughs
854:thrashing
840:Thrashing
833:interrupt
819:systems.
817:Unix-like
813:man pages
721:interrupt
611:exception
581:kilobytes
423:in their
344:physicist
337:registers
223:Burroughs
180:emulators
118:libraries
50:computing
2507:ptmalloc
2502:mimalloc
2492:jemalloc
2482:dlmalloc
2378:Hardware
1768:15655353
1623:cite web
1450:11514875
1377:(1997).
1324:28 April
1301:18156695
1071:through
972:See also
957:through
815:on many
600:hardware
260:for the
250:for the
241:for the
221:for the
211:for the
202:for the
142:overlays
99:segments
2578:Garbage
2497:libumem
2399:(IOMMU)
2319:at the
2299:Multics
2291:TSS/360
2099:6434322
1834:18 July
1800:18 July
1712:12 June
1697:. 1971
1350:9 March
1067:on the
953:, from
897:In the
888:Multics
788:Windows
784:OpenVMS
780:Multics
637:, used
635:SDS 940
483:of the
412:, with
349:at the
315:History
274:process
248:Multics
235:TSS/360
81:, into
60:, is a
2650:Issues
2297:, and
2221:
2149:
2097:
2079:
1907:
1825:
1791:
1766:
1671:
1554:
1448:
1440:
1299:
1291:
1243:
1209:
1111:DOS/VS
1107:OS/VS1
1103:DOS/VS
1090:360/65
1069:360/67
949:IBM's
932:linker
907:32-bit
846:paging
829:OS/VS1
709:locked
705:pinned
681:error.
623:region
462:NORD-1
394:paging
333:PDP-10
292:) are
282:OS/VS1
252:GE 645
239:CP/CMS
122:paging
2676:Other
2487:Hoard
2393:(TLB)
2387:(MMU)
2287:CP-67
2277:(PDF)
2270:(PDF)
2095:S2CID
2050:(PDF)
1977:(PDF)
1946:(PDF)
1862:(PDF)
1853:(PDF)
1764:S2CID
1733:(PDF)
1695:(PDF)
1583:(PDF)
1529:(PDF)
1446:S2CID
1382:(PDF)
1320:. AMD
1318:(PDF)
1297:S2CID
1186:(PDF)
1177:(PDF)
1160:(PDF)
1151:(PDF)
1124:IBM Z
1045:disks
1041:drums
1027:Notes
1006:, an
928:Win32
903:IA-32
844:When
806:mlock
797:mlock
757:buses
717:wired
715:, or
713:fixed
577:pages
575:into
433:S/370
429:CP-67
425:CP-40
410:B5000
308:traps
290:IBM i
226:B5000
204:Atlas
162:Usage
56:, or
2252:TLBs
2219:ISBN
2197:2016
2147:ISBN
2124:2016
2013:2007
1985:2022
1958:2013
1905:ISSN
1874:2023
1836:2017
1823:ISBN
1802:2017
1789:ISBN
1714:2022
1669:ISBN
1629:link
1565:2023
1552:ISBN
1438:ISSN
1352:2015
1326:2015
1289:ISSN
1254:2017
1241:ISBN
1220:2017
1207:ISBN
1109:and
1101:IBM
1073:z/OS
959:z/OS
926:and
924:mmap
890:and
848:and
786:and
427:and
359:i.e.
335:via
327:and
284:and
256:The
237:and
198:the
182:and
42:DASD
2295:MTS
2087:doi
1897:doi
1866:IBM
1756:doi
1703:doi
1597:doi
1509:doi
1487:doi
1430:doi
1281:doi
1122:On
1075:on
1065:TSS
1047:or
1008:x86
951:MVS
827:In
776:).
751:or
725:I/O
539:by
477:x86
470:VMS
466:VAX
449:IBM
437:SIE
367:sic
264:/46
231:MTS
219:MCP
192:DOS
176:CPU
85:in
48:In
38:RAM
2768::
2293:,
2289:,
2187:.
2115:.
2093:.
2085:.
2073:15
2071:.
2067:.
2001:;
1948:.
1917:^
1903:.
1893:60
1891:.
1855:.
1762:.
1752:12
1750:.
1625:}}
1621:{{
1593:25
1591:.
1585:.
1546:.
1481:,
1444:.
1436:.
1426:19
1407:26
1405:.
1384:.
1360:^
1295:.
1287:.
1275:.
1271:.
1179:.
1153:.
1105:,
809:()
800:()
711:,
617:.
472:.
441:VM
339:.
233:,
152:.
89:.
52:,
2350:e
2343:t
2336:v
2307:.
2301:.
2225:)
2217:(
2199:.
2155:.
2126:.
2101:.
2089::
2052:.
2043:"
2030:.
2015:.
1987:.
1960:.
1928:.
1911:.
1899::
1876:.
1838:.
1804:.
1770:.
1758::
1716:.
1705::
1677:.
1631:)
1603:.
1599::
1567:.
1511::
1489::
1483:7
1465:.
1452:.
1432::
1388:.
1354:.
1328:.
1303:.
1283::
1277:8
1256:.
1222:.
1079:.
562:)
556:(
551:)
547:(
533:.
27:.
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.