狐假虎威什么意思| 眼睛模糊用什么药| 西瓜都有什么品种| 吃什么可以长胖| 结婚10年是什么婚| 郑和是什么族| 手麻是什么引起的| 子宫低回声结节是什么意思| hugo是什么意思| 11月份生日是什么星座| 什么叫入伏| 眼睛模糊用什么药| 海参什么人不能吃| 血细胞分析五分类是查什么的| 39属什么| 九死一生什么生肖| 泡泡什么意思| 养老院靠什么挣钱| 风热感冒是什么意思| 海带吃了有什么好处| 郭敬明为什么叫小四| 急火攻心是什么生肖| 什么是sop流程| 什么是直女| 热闹非凡是什么意思| 吃鱼肝油有什么好处| 吃羊肉不能吃什么水果| 经常手淫对身体有什么危害| 带状疱疹是什么原因引起| 哪吒为什么叫哪吒| 什么是头寸| 人为什么会抑郁| 社会科学院是干什么的| 周公解梦掉牙齿意味着什么| 晕车喝什么饮料好| 男人到了什么年龄就性功能下降| 灼热是什么意思| 日是什么意思| 妈祖属什么生肖| 梦见好多老鼠是什么意思| 眼睛老是肿着是什么原因造成的| 文曲星什么意思| 胀气打嗝是什么原因| 电视剧靠什么赚钱| 股癣用什么药最好| 洪字五行属什么| 滞是什么意思| 门前的小树已成年是什么歌| 精神食粮是什么意思| 温州人为什么会做生意| 草鱼吃什么草| 美国的国宝是什么动物| 破伤风挂什么科| 小孩拉肚子吃什么药好| 常吃生花生有什么好处| 足跟疼痛用什么药| diqua是什么牌子| 三十三天都是什么天| mcn是什么意思| 六月二十四是什么星座| 大便干燥拉不出来是什么原因| 地铁和高铁有什么区别| 喜形于色是什么意思| 铁皮石斛有什么功效| 五十路是什么意思| 吃什么能增肥| 肿大淋巴结是什么意思| 夏天怕冷是什么原因| 吃什么补维生素a| 水猴子是什么| 梦见动物是什么意思| 普洱茶属于什么茶类| 小肠与什么相表里| 姜子牙属什么生肖| 用盐泡脚有什么好处| 白内障有什么症状| 非淋菌尿道炎用什么药| 中指尖麻木是什么原因| 太阳五行属什么| 汽车五行属什么| 飞机打多了会有什么严重的后果吗| 屁股流血是什么原因| 什么是普惠性幼儿园| 224是什么星座| 小肚子胀疼是什么原因| dm医学上是什么意思| 8月23是什么星座| 男朋友昵称叫什么好听| 弃猫效应是什么| 炎字五行属什么| 木犀读什么| 料酒是什么酒| 试纸什么时候用最准确| 踢皮球是什么意思| 做爱什么姿势| 什么是葡萄胎| 武警和特警有什么区别| 胸膜炎吃什么药好| 郭富城什么星座| 重阳节的习俗是什么| 梦见自己搬家是什么意思| 什么是轻食| 三唑磷主要打什么虫| 高血糖能吃什么水果| 离岸是什么意思| 黄体不足吃什么药| 嗜的意思是什么| 心口疼是什么原因女性| 什么地爬| 半月板损伤有什么症状| 埋线是什么| 多吃玉米有什么好处和坏处| 顺理成章是什么意思| 穿刺和活检有什么区别| 53年属什么生肖| 免疫治疗是什么意思| 孩子口臭是什么原因| 红萝卜什么时候种| 急性肠胃炎应该吃什么药| 什么的花瓣| 一月十八号是什么星座| 孩子头晕挂什么科| 心肌桥是什么病| 什么叫孝顺| 日语为什么| 维生素b2有什么功效| mk包包属于什么档次| 条形码的数字代表什么| 肌腱是什么| 双性人什么意思| 什么人一年只工作一天| 带节奏是什么意思| 活字印刷术是什么时候发明的| 肝功能异常是什么| 压抑什么意思| 佐餐是什么意思| 路痴是什么原因造成的| 巨蟹座有什么特点| 什么是羊水栓塞| 成熟是什么意思| 学业是什么意思| 手口足吃什么药| 神经性耳鸣吃什么药| 脱发严重应该去医院挂什么科| 火把节在每年农历的什么时间举行| 拆穿是什么意思| 陈皮泡水喝有什么功效和作用| 阴道炎症是什么症状| 用牛奶敷脸有什么好处和坏处| 肾囊肿有什么危害| 无纺布是什么材料做的| 三焦不通吃什么中成药| 白带发黄是什么原因引起的| 三秦是什么意思| 什么快递最便宜| 乐子是什么意思| 头顶是什么穴位| 大运什么意思| 短裙配什么鞋子好看| 囟门是什么意思| 尿毒症吃什么最好| 呈味核苷酸二钠是什么| 阑尾炎应该挂什么科| 来月经腰疼的厉害是什么原因| 男人遗精是什么原因造成的| 美国fda认证是什么| 月经量极少几乎没有是什么原因| 拉血是什么原因| 尿蛋白三个加号吃什么药| 嗜睡挂什么科| 西游记告诉我们什么道理| 看舌头挂什么科| 碧是什么颜色| 月可以加什么偏旁| 葡萄糖高是什么意思| vg是什么意思| josiny是什么牌子| 肾结晶有什么症状| 角是什么意思| 漂流需要带什么| 凌晨4点是什么时辰| 中国移动增值业务费是什么| 师团长是什么级别| 中国人在印度属于什么种姓| 大放厥词是什么意思| 身体机能是什么意思| 成龙真名叫什么名字| 川芎的功效与作用是什么| 菩提手串有什么寓意| 口甜是什么原因引起的| 有胆结石的人不能吃什么东西| 孩子吃什么容易长高| 和氏璧是什么玉| 弥散是什么意思| 双十一从什么时候开始| 7月14号是什么节日| 双手抱在胸前代表什么| crh是什么意思| 乳腺增生有什么症状| 缺维生素c会得什么病| 女生什么时候最想要| 什么是亚健康| 准者是什么牌子| 6月19是什么星座| 身上经常痒是什么原因| 狗为什么不吃饭| 白芝麻有什么功效| 小拇指旁边的手指叫什么| 增强免疫力的针叫什么| 颈椎压迫手麻吃什么药| 掉头发吃什么好| 阑尾炎是什么| 嗓子烧灼感是什么原因| lee什么意思| 河南有什么美食| 办健康证需要什么| 矫正度数是什么意思| 摄取是什么意思| 被口什么感觉| 人格分裂什么意思| 三教九流什么意思| 匝道是什么| 心电图显示窦性心律是什么意思| 吃什么有助于骨头愈合| 夫妻都是a型血孩子是什么血型| 很困但是睡不着是什么原因| 头疼应该挂什么科| 碱性磷酸酶是什么意思| 敦促的意思是什么| 朋字五行属什么| 膳食是什么| 纸可以折什么| 76年属什么的生肖| player是什么意思| 胎儿左肾盂分离是什么意思| 韩国是什么民族| 胃疼吃什么| 竹荪是什么东西| 胃疼恶心吃什么药效果好| 05年属鸡的是什么命| 什么叫间质性肺病| 双相是什么| 海马体是什么| 什么是黄道吉日| 必要性是什么意思| 梦到亲人死了是什么征兆| 格调是什么意思| 老实人为什么总被欺负| 蚊子怕什么植物| o型血和什么血型最配| 什么是无机盐| 淋巴细胞低是什么原因| 吃什么补精子快| 长期喝酒有什么危害| 眼睛像什么| 90年出生属什么生肖| 高数是什么| 缺维生素d有什么症状| kai是什么意思| 乙肝e抗体阳性是什么意思| 小三阳是什么病| 妊娠线什么时候长| 湖面像什么| 犯六冲是什么意思| 百度

内蒙古团人大代表热议总书记重要讲话:关注民生“小事” 彰显领袖情怀

(Redirected from Dynamic memory)
百度 据凤凰网援引华尔街日报的报道称,美国公司称中国履行了承诺,但态度不够积极。

Memory management (also dynamic memory management, dynamic storage allocation, or dynamic memory allocation) is a form of resource management applied to computer memory. The essential requirement of memory management is to provide ways to dynamically allocate portions of memory to programs at their request, and free it for reuse when no longer needed. This is critical to any advanced computer system where more than a single process might be underway at any time.[1]

Several methods have been devised that increase the effectiveness of memory management. Virtual memory systems separate the memory addresses used by a process from actual physical addresses, allowing separation of processes and increasing the size of the virtual address space beyond the available amount of RAM using paging or swapping to secondary storage. The quality of the virtual memory manager can have an extensive effect on overall system performance. The system allows a computer to appear as if it may have more memory available than physically present, thereby allowing multiple processes to share it.

In some operating systems, e.g. Burroughs/Unisys MCP,[2] and OS/360 and successors,[3] memory is managed by the operating system.[note 1] In other operating systems, e.g. Unix-like operating systems, memory is managed at the application level.

Memory management within an address space is generally categorized as either manual memory management or automatic memory management.

Manual memory management

edit
?
An example of external fragmentation

The task of fulfilling an allocation request consists of locating a block of unused memory of sufficient size. Memory requests are satisfied by allocating portions from a large pool[note 2] of memory called the heap[note 3] or free store. At any given time, some parts of the heap are in use, while some are "free" (unused) and thus available for future allocations. In the C language, the function which allocates memory from the heap is called malloc and the function which takes previously allocated memory and marks it as "free" (to be used by future allocations) is called free. [note 4]

Several issues complicate the implementation, such as external fragmentation, which arises when there are many small gaps between allocated memory blocks, which invalidates their use for an allocation request. The allocator's metadata can also inflate the size of (individually) small allocations. This is often managed by chunking. The memory management system must track outstanding allocations to ensure that they do not overlap and that no memory is ever "lost" (i.e. that there are no "memory leaks").

Efficiency

edit

The specific dynamic memory allocation algorithm implemented can impact performance significantly. A study conducted in 1994 by Digital Equipment Corporation illustrates the overheads involved for a variety of allocators. The lowest average instruction path length required to allocate a single memory slot was 52 (as measured with an instruction level profiler on a variety of software).[1]

Implementations

edit

Since the precise location of the allocation is not known in advance, the memory is accessed indirectly, usually through a pointer reference. The specific algorithm used to organize the memory area and allocate and deallocate chunks is interlinked with the kernel, and may use any of the following methods:

Fixed-size blocks allocation

edit

Fixed-size blocks allocation, also called memory pool allocation, uses a free list of fixed-size blocks of memory (often all of the same size). This works well for simple embedded systems where no large objects need to be allocated but suffers from fragmentation especially with long memory addresses. However, due to the significantly reduced overhead, this method can substantially improve performance for objects that need frequent allocation and deallocation, and so it is often used in video games.

Buddy blocks

edit

In this system, memory is allocated into several pools of memory instead of just one, where each pool represents blocks of memory of a certain power of two in size, or blocks of some other convenient size progression. All blocks of a particular size are kept in a sorted linked list or tree and all new blocks that are formed during allocation are added to their respective memory pools for later use. If a smaller size is requested than is available, the smallest available size is selected and split. One of the resulting parts is selected, and the process repeats until the request is complete. When a block is allocated, the allocator will start with the smallest sufficiently large block to avoid needlessly breaking blocks. When a block is freed, it is compared to its buddy. If they are both free, they are combined and placed in the correspondingly larger-sized buddy-block list.

Slab allocation

edit

This memory allocation mechanism preallocates memory chunks suitable to fit objects of a certain type or size.[5] These chunks are called caches and the allocator only has to keep track of a list of free cache slots. Constructing an object will use any one of the free cache slots and destructing an object will add a slot back to the free cache slot list. This technique alleviates memory fragmentation and is efficient as there is no need to search for a suitable portion of memory, as any open slot will suffice.

Stack allocation

edit

Many Unix-like systems as well as Microsoft Windows implement a function called alloca for dynamically allocating stack memory in a way similar to the heap-based malloc. A compiler typically translates it to inlined instructions manipulating the stack pointer.[6] Although there is no need of manually freeing memory allocated this way as it is automatically freed when the function that called alloca returns, there exists a risk of overflow. And since alloca is an ad hoc expansion seen in many systems but never in POSIX or the C standard, its behavior in case of a stack overflow is undefined.

A safer version of alloca called _malloca, which reports errors, exists on Microsoft Windows. It requires the use of _freea.[7] gnulib provides an equivalent interface, albeit instead of throwing an SEH exception on overflow, it delegates to malloc when an overlarge size is detected.[8] A similar feature can be emulated using manual accounting and size-checking, such as in the uses of alloca_account in glibc.[9]

Automated memory management

edit

The proper management of memory in an application is a difficult problem, and several different strategies for handling memory management have been devised.

Automatic management of call stack variables

edit

In many programming language implementations, the runtime environment for the program automatically allocates memory in the call stack for non-static local variables of a subroutine, called automatic variables, when the subroutine is called, and automatically releases that memory when the subroutine is exited. Special declarations may allow local variables to retain values between invocations of the procedure, or may allow local variables to be accessed by other subroutines. The automatic allocation of local variables makes recursion possible, to a depth limited by available memory.

Garbage collection

edit

Garbage collection is a strategy for automatically detecting memory allocated to objects that are no longer usable in a program, and returning that allocated memory to a pool of free memory locations. This method is in contrast to "manual" memory management where a programmer explicitly codes memory requests and memory releases in the program. While automatic garbage collection has the advantages of reducing programmer workload and preventing certain kinds of memory allocation bugs, garbage collection does require memory resources of its own, and can compete with the application program for processor time.

Reference counting

edit

Reference counting is a strategy for detecting that memory is no longer usable by a program by maintaining a counter for how many independent pointers point to the memory. Whenever a new pointer points to a piece of memory, the programmer is supposed to increase the counter. When the pointer changes where it points, or when the pointer is no longer pointing to any area or has itself been freed, the counter should decrease. When the counter drops to zero, the memory should be considered unused and freed. Some reference counting systems require programmer involvement and some are implemented automatically by the compiler. A disadvantage of reference counting is that circular references can develop which cause a memory leak to occur. This can be mitigated by either adding the concept of a "weak reference" (a reference that does not participate in reference counting, but is notified when the area it is pointing to is no longer valid) or by combining reference counting and garbage collection together.

Memory pools

edit

A memory pool is a technique of automatically deallocating memory based on the state of the application, such as the lifecycle of a request or transaction. The idea is that many applications execute large chunks of code which may generate memory allocations, but that there is a point in execution where all of those chunks are known to be no longer valid. For example, in a web service, after each request the web service no longer needs any of the memory allocated during the execution of the request. Therefore, rather than keeping track of whether or not memory is currently being referenced, the memory is allocated according to the request or lifecycle stage with which it is associated. When that request or stage has passed, all associated memory is deallocated simultaneously.

Systems with virtual memory

edit

Virtual memory is a method of decoupling the memory organization from the physical hardware. The applications operate on memory via virtual addresses. Each attempt by the application to access a particular virtual memory address results in the virtual memory address being translated to an actual physical address.[10] In this way the addition of virtual memory enables granular control over memory systems and methods of access.

In virtual memory systems the operating system limits how a process can access the memory. This feature, called memory protection, can be used to disallow a process to read or write to memory that is not allocated to it, preventing malicious or malfunctioning code in one program from interfering with the operation of another.

Even though the memory allocated for specific processes is normally isolated, processes sometimes need to be able to share information. Shared memory is one of the fastest techniques for inter-process communication.

Memory is usually classified by access rate into primary storage and secondary storage. Memory management systems, among other operations, also handle the moving of information between these two levels of memory.

Memory management in Burroughs/Unisys MCP systems[2]

edit

An operating system manages various resources in the computing system. The memory subsystem is the system element for managing memory. The memory subsystem combines the hardware memory resource and the MCP OS software that manages the resource.

The memory subsystem manages the physical memory and the virtual memory of the system (both part of the hardware resource). The virtual memory extends physical memory by using extra space on a peripheral device, usually disk. The memory subsystem is responsible for moving code and data between main and virtual memory in a process known as overlaying. Burroughs was the first commercial implementation of virtual memory (although developed at Manchester University for the Ferranti Atlas computer) and integrated virtual memory with the system design of the B5000 from the start (in 1961) needing no external memory management unit (MMU).[11]:?48?

The memory subsystem is responsible for mapping logical requests for memory blocks to physical portions of memory (segments) which are found in the list of free segments. Each allocated block is managed by means of a segment descriptor,[12] a special control word containing relevant metadata about the segment including address, length, machine type, and the p-bit or ‘presence’ bit which indicates whether the block is in main memory or needs to be loaded from the address given in the descriptor.

Descriptors are essential in providing memory safety and security so that operations cannot overflow or underflow the referenced block (commonly known as buffer overflow). Descriptors themselves are protected control words that cannot be manipulated except for specific elements of the MCP OS (enabled by the UNSAFE block directive in NEWP).

Donald Knuth describes a similar system in Section 2.5 ‘Dynamic Storage Allocation’ of ‘Fundamental Algorithms’.[disputeddiscuss]

Memory management in OS/360 and successors

edit

IBM System/360 does not support virtual memory.[note 5] Memory isolation of jobs is optionally accomplished using protection keys, assigning storage for each job a different key, 0 for the supervisor or 1–15. Memory management in OS/360 is a supervisor function. Storage is requested using the GETMAIN macro and freed using the FREEMAIN macro, which result in a call to the supervisor (SVC) to perform the operation.

In OS/360 the details vary depending on how the system is generated, e.g., for PCP, MFT, MVT.

In OS/360 MVT, suballocation within a job's region or the shared System Queue Area (SQA) is based on subpools, areas a multiple of 2?KB in size—the size of an area protected by a protection key. Subpools are numbered 0–255.[13] Within a region subpools are assigned either the job's storage protection or the supervisor's key, key 0. Subpools 0–127 receive the job's key. Initially only subpool zero is created, and all user storage requests are satisfied from subpool 0, unless another is specified in the memory request. Subpools 250–255 are created by memory requests by the supervisor on behalf of the job. Most of these are assigned key 0, although a few get the key of the job. Subpool numbers are also relevant in MFT, although the details are much simpler.[14] MFT uses fixed partitions redefinable by the operator instead of dynamic regions and PCP has only a single partition.

Each subpool is mapped by a list of control blocks identifying allocated and free memory blocks within the subpool. Memory is allocated by finding a free area of sufficient size, or by allocating additional blocks in the subpool, up to the region size of the job. It is possible to free all or part of an allocated memory area.[15]

The details for OS/VS1 are similar[16] to those for MFT and for MVT; the details for OS/VS2 are similar to those for MVT, except that the page size is 4 KiB. For both OS/VS1 and OS/VS2 the shared System Queue Area (SQA) is nonpageable.

In MVS the address space[17] includes an additional pageable shared area, the Common Storage Area (CSA), and two additional private areas, the nonpageable local system queue area (LSQA) and the pageable System Work area (SWA). Also, the storage keys 0–7 are all reserved for use by privileged code.

See also

edit

Notes

edit
  1. ^ However, the run-time environment for a language processor may subdivide the memory dynamically acquired from the operating system, e.g., to implement a stack.
  2. ^ In some operating systems, e.g., OS/360, the free storage may be subdivided in various ways, e.g., subpools in OS/360, below the line, above the line and above the bar in z/OS.
  3. ^ Not to be confused with the unrelated heap data structure.
  4. ^ A simplistic implementation of these two functions can be found in the article "Inside Memory Management".[4]
  5. ^ Except on the Model 67

References

edit
  1. ^ a b Detlefs, D.; Dosser, A.; Zorn, B. (June 1994). "Memory allocation costs in large C and C++ programs" (PDF). Software: Practice and Experience. 24 (6): 527–542. CiteSeerX?10.1.1.30.3073. doi:10.1002/spe.4380240602. S2CID?14214110.
  2. ^ a b "Unisys MCP Managing Memory". System Operations Guid. Unisys.
  3. ^ "Main Storage Allocation" (PDF). IBM Operating System/360 Concepts and Facilities (PDF). IBM Systems Reference Library (First?ed.). IBM Corporation. 1965. p.?74. Retrieved Apr 3, 2019.
  4. ^ Jonathan Bartlett. "Inside Memory Management". IBM DeveloperWorks.
  5. ^ Silberschatz, Abraham; Galvin, Peter B. (2004). Operating system concepts. Wiley. ISBN?0-471-69466-5.
  6. ^ alloca(3)?–?Linux Programmer's Manual – Library Functions
  7. ^ "_malloca". Microsoft CRT Documentation. 26 October 2022.
  8. ^ "gnulib/malloca.h". GitHub. Retrieved 24 November 2019.
  9. ^ "glibc/include/alloca.h". Beren Minor's Mirrors. 23 November 2019.
  10. ^ Tanenbaum, Andrew S. (1992). Modern Operating Systems. Englewood Cliffs, N.J.: Prentice-Hall. p.?90. ISBN?0-13-588187-0.
  11. ^ Waychoff, Richard. "Stories About the B5000 and People Who Were There" (PDF). Computer History Museum.
  12. ^ The Descriptor (PDF). Burroughs Corporation. February 1961.
  13. ^ OS360Sup, pp.?82–85.
  14. ^ OS360Sup, pp.?82.
  15. ^ Program Logic: IBM System/360 Operating System MVT Supervisor (PDF). IBM Corporation. May 1973. pp.?107–137. Retrieved Apr 3, 2019.
  16. ^ OSVS1Dig, p. 2.37-2.39.
  17. ^ "Virtual Storage Layout" (PDF). Introduction to OS/VS2 Release 2 (PDF). Systems (first?ed.). IBM. March 1973. p.?37. GC28-0661-1. Retrieved July 15, 2024.

Bibliography

edit
OS360Sup
OS Release 21 IBM System/360 Operating System Supervisor Services and Macro Instructions (PDF). IBM Systems Reference Library (Eighth?ed.). IBM. September 1974. GC28-6646-7.
OSVS1Dig
OS/VS1 Programmer's Reference Digest Release 6 (PDF). Systems (Sixth?ed.). IBM. September 15, 1976. GC24-5091-5 with TNLs.
edit
草字头有什么字 ed患者是什么意思 冬瓜与什么食物相克 高什么亮什么 尿酸520属于什么水平
早孕挂什么科检查 狗狗喝什么水 6月份生日是什么星座 中国的特工组织叫什么 25度穿什么衣服合适
为什么不要看电焊火花 30如狼40如虎是什么意思 梦见火车脱轨什么预兆 晒太阳有什么好处 女人胃寒吃什么好得快
1月22日什么星座 维生素b补什么 穿什么颜色衣服显白 打摆子什么意思 锁骨是什么位置
儿童红眼病用什么眼药水weuuu.com 孩子发烧手脚冰凉是什么原因hcv8jop0ns8r.cn 最难写的字是什么hcv7jop7ns4r.cn 恶寒发热是什么意思kuyehao.com 金瓜是什么瓜hcv8jop9ns5r.cn
二月二是什么节hcv8jop9ns0r.cn 晰字五行属什么hcv8jop6ns8r.cn 背上长痘痘是什么原因hcv8jop8ns6r.cn 低血糖不能吃什么食物hcv9jop7ns4r.cn 勾心斗角什么意思hcv9jop4ns8r.cn
乾元是什么意思hcv8jop4ns8r.cn a和ab型生的孩子是什么血型onlinewuye.com 绿豆什么时候成熟hcv9jop3ns7r.cn 便秘吃什么药效果好hcv7jop6ns3r.cn 什么化妆品好jasonfriends.com
心率慢是什么原因hcv8jop8ns1r.cn 纨绔子弟是什么意思hanqikai.com 台湾是什么民族huizhijixie.com 面起子是什么hcv9jop5ns3r.cn 70年的狗是什么命hcv9jop4ns3r.cn
百度