金牛男喜欢什么样的女生| 非处方药是什么意思| 身骑白马是什么方言| 绿豆跟什么一起煮最好| 残疾证有什么用| 大白条是什么鱼| 直接胆红素偏低是什么原因| 汗脚是什么原因引起的| 啃老是什么意思| 十一月二十五是什么星座| 宝宝不吃奶是什么原因| 小孩肚脐眼周围疼是什么原因| 王源粉丝叫什么| 消肿用什么药| 儿童红眼病用什么眼药水| 安睡裤是什么| 诸葛亮是一个什么样的人| 肾上腺瘤吃什么药可以消除| 溶栓治疗是什么意思| 瑶浴是什么意思| 什么是散射光| 外痔长什么样| 高数是什么| 结婚23年是什么婚| 28岁属什么生肖| 皮肤消炎用什么药最好| 两点水有什么字| 大连焖子是什么做的| 中药学是干什么的| 为什么夏天容易掉头发| 汉字最多笔画是什么字| 脾虚吃什么药效果最好| 吃葛根粉有什么好处| 芒果与什么食物相克| 梦见磨面粉是什么意思| 在什么前面用英语怎么说| 国家为什么不承认鬼神| 透析是什么原理| 爵迹小说为什么不写了| 包装饮用水是什么水| 儿童经常头晕什么原因导致的| 头发一把一把的掉是什么原因| 煜这个字读什么| 舌头起泡吃什么药| 囊中羞涩什么意思| 孙悟空被压在什么山下| 3月31号什么星座| 血钾高是什么引起的| 听吧新征程号角吹响是什么歌| 西瓜虫吃什么食物| 什么叫ins风格| gtp是什么| 鱼油有什么功效和作用| 砷是什么东西| 身上起红疹是什么原因| 7月初二是什么星座| 梦见蜜蜂是什么预兆| 辟谷是什么都不吃吗| 幽门螺杆菌是什么引起的| 止咳化痰吃什么好| 左后背疼什么原因| 维生素检查项目叫什么| hpv感染后有什么症状| 狮子的天敌是什么动物| 上火便秘吃什么最快排便| 指甲小月牙代表什么| 断裂是什么意思| 什么叫提供情绪价值| 半夜是什么时辰| 冰山一角是什么生肖| 急性咽炎吃什么药| 苦命是什么意思| 寂静的意思是什么| 原研药是什么意思| 蟹黄是螃蟹的什么东西| 阴虚火旺吃什么中药| 霍金什么时候去世的| 贫血吃什么药效果好| 达英35是什么药| 917是什么星座| 高考都考什么| 93属什么生肖| 宝宝乳糖不耐受喝什么奶粉比较好| 斐乐什么档次| 宿主是什么意思| 泌乳素高是什么原因引起的| 发扬什么词语搭配| 拉肚子吃什么食物比较好| 小肚子胀是什么原因女性| 4.22什么星座| 胆囊切除有什么影响| 尿蛋白质阳性什么意思| 面膜什么时候敷效果最好| 头痒用什么洗头可以止痒| 藿香是什么| 通便吃什么最快排便| 紫五行属什么| 二月一号是什么星座| 为什么会得多囊| 备孕前吃什么调理身体| 带量采购是什么意思| 血小板减少有什么危害| 肚脐眼下方是什么器官| 阴道流黄水是什么原因| 大圈什么意思| 云为什么是白色的| 陶土样大便见于什么病| 麦芽糖是什么做的| 脉数是什么意思| 痘坑用什么药膏最有效| pdi是什么| 舌头红是什么原因| 尾巴翘上天是什么意思| 情人节送妈妈什么花| add是什么意思| a和ab型生的孩子是什么血型| 肚子疼呕吐是什么原因| 什么的旋律| 皮肤瘙痒用什么药| 胆囊胆固醇结晶是什么| 考科目二紧张吃什么药| 疔是什么意思| 吃了避孕药后几天出血是什么原因| 什么月披星| 什么是玛瑙| 灰指甲是什么样子的| 白带发黄吃什么药| 为什么会一直打嗝| 亦的意思是什么| 龟苓膏有什么作用| xxs是什么意思| 睡觉打呼噜什么原因| 手脚出汗什么原因| 一日三餐是什么意思| 茶艺师是做什么的| 东北大拉皮是什么做的| 榴莲为什么贵| 来月经为什么会头疼| 圣女是什么意思| 身体素质是什么意思| 肛塞有什么用| 陈皮泡水喝有什么作用| 送男人什么礼物最难忘| 七星瓢虫吃什么食物| 母亲过生日送什么礼物| 亦女念什么| 结肠炎吃什么食物好| 女人喝什么调节内分泌| 乳腺结节有什么症状| 负面影响是什么意思| 老虎凳是什么| 中焦湿热吃什么中成药| 仁爱是什么意思| 怀孕为什么要吃叶酸| 什么年龄割双眼皮最好| 总是失眠是什么原因| 全血检查能查些什么病| 做什么动作可以长高| 嚼槟榔为什么上瘾| 校长是什么级别| 吃什么能缓解孕吐| 30是什么意思| 穿什么衣服| 蛋蛋疼是什么原因| 人体是由什么组成的| 羊羹是什么做的| 小猫打什么疫苗| 置换是什么意思| 阿僧只劫是什么意思| 水潴留是什么意思| 切诺为什么要饭前半小时吃| 如花似玉是什么生肖| 胃酸有什么办法缓解| 不疼不痒的红疹是什么| 收缩压和舒张压是什么| 空巢老人什么意思| 炒牛肉用什么配菜| 听字五行属什么| 为什么一生气就胃疼| 当兵有什么好处| 奎宁现在叫什么药| 什么食物补钙效果最好最快| 为什么太阳会发光| 山药不能和什么一起吃| 凌晨两点多是什么时辰| 正常人为什么会得梅毒| 张少华什么时候去世的| 03年属什么生肖| sry什么意思| 左手小指疼痛预兆什么| 懿代表什么意思| 六味地黄丸什么人不能吃| 浮生若梦什么意思| 粉碎性骨折是什么意思| 有的没的是什么意思| ieg是什么意思| 7月23日是什么日子| 当所有的人离开我的时候是什么歌| 水的ph值是什么意思| 狗为什么怕猫| 嘢是什么意思| 翻糖蛋糕是什么意思| 日加个立念什么| 吃什么水果对身体好| 最近老做噩梦是什么原因| 左手发麻是什么病征兆| 审美疲劳是什么意思| 伊朗用什么货币| 右腹部是什么器官| 十三点是什么意思| 小孩抽多动症吃什么药最好| 补钾用什么药| 天庭是什么意思| 感冒喝什么| 好男儿志在四方是什么生肖| 淡定从容是什么意思| 渣是什么意思| 同房后为什么会出血| 粽叶是什么植物| 祛痣挂什么科| 口干舌燥口苦吃什么药| 盐巴是什么| 头大适合什么发型| 治前列腺炎吃什么药效果最好| 为什么不能天天喝豆浆| 心电图t波改变是什么意思| 什么食物降尿酸效果好| 麻疹是什么| 脚凉是什么原因造成的| 什么睡姿对髋关节好| 灰猫是什么品种| 花园里面有什么| 一个均一个金念什么| 50岁掉牙齿是什么原因| 叶酸什么时候吃最好| jdv是什么牌子| 炸薯条用什么粉| 水泡型脚气用什么药| 1996年是属什么生肖| 细胞学说揭示了什么| 血糖的单位是什么| 80岁是什么之年| iva是什么意思| 月柱桃花是什么意思| 脚板心发热是什么原因| 精液少是什么原因| 丝状疣是什么| 缄默是什么意思| 巴西货币叫什么| 知识渊博是什么意思| 中国是什么人种| 痔疮是什么原因引起| 半边屁股疼是什么原因| 吃什么水果对子宫和卵巢好| 暮雪是什么意思| 慢性阑尾炎挂什么科| 全麦粉和小麦粉的区别是什么| 一条条什么| 长江后浪推前浪是什么生肖| 敏使朗是什么药| 地级市市委书记是什么级别| 三十六计第一计是什么| 青海省会城市叫什么| 菠萝是什么季节的水果| 百度Jump to content

From Wikipedia, the free encyclopedia
百度 中国的声音、中国的行动,为世界和平与发展注入强大信心与力量。

In computer storage, fragmentation is a phenomenon in the computer system which involves the distribution of data in to smaller pieces which storage space, such as computer memory or a hard drive, is used inefficiently, reducing capacity or performance and often both. The exact consequences of fragmentation depend on the specific system of storage allocation in use and the particular form of fragmentation. In many cases, fragmentation leads to storage space being "wasted", and programs will tend to run inefficiently due to the shortage of memory.

Basic principle

[edit]

In main memory fragmentation, when a computer program requests blocks of memory from the computer system, the blocks are allocated in chunks. When the computer program is finished with a chunk, it can free it back to the system, making it available to later be allocated again to another or the same program. The size and the amount of time a chunk is held by a program varies. During its lifespan, a computer program can request and free many chunks of memory.

Fragmentation can occur when a block of memory is requested by a program, and is allocated to that program, but the program has not freed it.[1] This leads to theoretically "available", unused memory, being marked as allocated - which reduces the amount of globally available memory, making it harder for programs to request and access memory.

When a program is started, the free memory areas are long and contiguous. Over time and with use, the long contiguous regions become fragmented into smaller and smaller contiguous areas. Eventually, it may become impossible for the program to obtain large contiguous chunks of memory.

Types

[edit]

There are three different but related forms of fragmentation: external fragmentation, internal fragmentation, and data fragmentation, which can be present in isolation or conjunction. Fragmentation is often accepted in return for improvements in speed or simplicity. Analogous phenomena occur for other resources such as processors; see below.

Internal fragmentation

[edit]

Memory paging creates internal fragmentation because an entire page frame will be allocated whether or not that much storage is needed.[2] Due to the rules governing memory allocation, more computer memory is sometimes allocated than is needed. For example, memory can only be provided to programs in chunks (usually a multiple of 4 bytes), and as a result if a program requests perhaps 29 bytes, it will actually get a chunk of 32 bytes. When this happens, the excess memory goes to waste. In this scenario, the unusable memory, known as slack space, is contained within an allocated region. This arrangement, termed fixed partitions, suffers from inefficient memory use - any process, no matter how small, occupies an entire partition. This waste is called internal fragmentation.[3][4]

Unlike other types of fragmentation, internal fragmentation is difficult to reclaim; usually the best way to remove it is with a design change. For example, in dynamic memory allocation, memory pools drastically cut internal fragmentation by spreading the space overhead over a larger number of objects.

External fragmentation

[edit]

External fragmentation arises when free memory is separated into small blocks and is interspersed by allocated memory. It is a weakness of certain storage allocation algorithms, when they fail to order memory used by programs efficiently. The result is that, although free storage is available, it is effectively unusable because it is divided into pieces that are too small individually to satisfy the demands of the application. The term "external" refers to the fact that the unusable storage is outside the allocated regions.

For example, consider a situation wherein a program allocates three continuous blocks of memory and then frees the middle block. The memory allocator can use this free block of memory for future allocations. However, it cannot use this block if the memory to be allocated is larger in size than this free block.

External fragmentation also occurs in file systems as many files of different sizes are created, change size, and are deleted. The effect is even worse if a file which is divided into many small pieces is deleted, because this leaves similarly small regions of free spaces.

Time 0x0000 0x1000 0x2000 0x3000 0x4000 0x5000 Comments
0 Start with all memory available for storage.
1 A B C Allocated three blocks A, B, and C, of size 0x1000.
2 A C Freed block B. Notice that the memory that B used cannot be included for a block larger than B's size.
3 A C Block C moved into block B's empty slot, allowing the remaining space to be used for a larger block of size 0x4000.

Data fragmentation

[edit]

Data fragmentation occurs when a collection of data in memory is broken up into many pieces that are not close together. It is typically the result of attempting to insert a large object into storage that has already suffered external fragmentation. For example, files in a file system are usually managed in units called blocks or clusters. When a file system is created, there is free space to store file blocks together contiguously. This allows for rapid sequential file reads and writes. However, as files are added, removed, and changed in size, the free space becomes externally fragmented, leaving only small holes in which to place new data. When a new file is written, or when an existing file is extended, the operating system puts the new data in new non-contiguous data blocks to fit into the available holes. The new data blocks are necessarily scattered, slowing access due to seek time and rotational latency of the read/write head, and incurring additional overhead to manage additional locations. This is called file system fragmentation.

When writing a new file of a known size, if there are any empty holes that are larger than that file, the operating system can avoid data fragmentation by putting the file into any one of those holes. There are a variety of algorithms for selecting which of those potential holes to put the file; each of them is a heuristic approximate solution to the bin packing problem. The "best fit" algorithm chooses the smallest hole that is big enough. The "worst fit" algorithm chooses the largest hole. The "first-fit algorithm" chooses the first hole that is big enough. The "next fit" algorithm keeps track of where each file was written. The "next fit" algorithm is faster than "first fit," which is in turn faster than "best fit," which is the same speed as "worst fit".[5]

Just as compaction can eliminate external fragmentation, data fragmentation can be eliminated by rearranging data storage so that related pieces are close together. For example, the primary job of a defragmentation tool is to rearrange blocks on disk so that the blocks of each file are contiguous. Most defragmenting utilities also attempt to reduce or eliminate free space fragmentation. Some moving garbage collectors, utilities that perform automatic memory management, will also move related objects close together (this is called compacting) to improve cache performance.

There are four kinds of systems that never experience data fragmentation—they always store every file contiguously. All four kinds have significant disadvantages compared to systems that allow at least some temporary data fragmentation:

  1. Simply write each file contiguously. If there isn't already enough contiguous free space to hold the file, the system immediately fails to store the file—even when there are many little bits of free space from deleted files that add up to more than enough to store the file.
  2. If there isn't already enough contiguous free space to hold the file, use a copying collector to convert many little bits of free space into one contiguous free region big enough to hold the file. This takes a lot more time than breaking the file up into fragments and putting those fragments into the available free space.
  3. Write the file into any free block, through fixed-size blocks storage. If a programmer picks a fixed block size too small, the system immediately fails to store some files—files larger than the block size—even when there are many free blocks that add up to more than enough to store the file. If a programmer picks a block size too big, a lot of space is wasted on internal fragmentation.
  4. Some systems avoid dynamic allocation entirely, pre-storing (contiguous) space for all possible files they will need—for example, MultiFinder pre-allocates a chunk of RAM to each application as it was started according to how much RAM that application's programmer claimed it would need.

Comparison

[edit]

Compared to external fragmentation, overhead and internal fragmentation account for little loss in terms of wasted memory and reduced performance. It is defined as:

Fragmentation of 0% means that all the free memory is in a single large block; fragmentation is 90% (for example) when 100 MB free memory is present but largest free block of memory for storage is just 10 MB.

External fragmentation tends to be less of a problem in file systems than in primary memory (RAM) storage systems, because programs usually require their RAM storage requests to be fulfilled with contiguous blocks, but file systems typically are designed to be able to use any collection of available blocks (fragments) to assemble a file which logically appears contiguous. Therefore, if a highly fragmented file or many small files are deleted from a full volume and then a new file with size equal to the newly freed space is created, the new file will simply reuse the same fragments that were freed by the deletion. If what was deleted was one file, the new file will be just as fragmented as that old file was, but in any case there will be no barrier to using all the (highly fragmented) free space to create the new file. In RAM, on the other hand, the storage systems used often cannot assemble a large block to meet a request from small noncontiguous free blocks, and so the request cannot be fulfilled and the program cannot proceed to do whatever it needed that memory for (unless it can reissue the request as a number of smaller separate requests).

Problems

[edit]

Storage failure

[edit]

The most severe problem caused by fragmentation is causing a process or system to fail, due to premature resource exhaustion: if a contiguous block must be stored and cannot be stored, failure occurs. Fragmentation causes this to occur even if there is enough of the resource, but not a contiguous amount. For example, if a computer has 4 GiB of memory and 2 GiB are free, but the memory is fragmented in an alternating sequence of 1 MiB used, 1 MiB free, then a request for 1 contiguous GiB of memory cannot be satisfied even though 2 GiB total are free.

In order to avoid this, the allocator may, instead of failing, trigger a defragmentation (or memory compaction cycle) or other resource reclamation, such as a major garbage collection cycle, in the hope that it will then be able to satisfy the request. This allows the process to proceed, but can severely impact performance.

Performance degradation

[edit]

Fragmentation causes performance degradation for a number of reasons. Most basically, fragmentation increases the work required to allocate and access a resource. For example, on a hard drive or tape drive, sequential data reads are very fast, but seeking to a different address is slow, so reading or writing a fragmented file requires numerous seeks and is thus much slower, in addition to causing greater wear on the device. Further, if a resource is not fragmented, allocation requests can simply be satisfied by returning a single block from the start of the free area. However, if it is fragmented, the request requires either searching for a large enough free block, which may take a long time, or fulfilling the request by several smaller blocks (if this is possible), which results in this allocation being fragmented, and requiring additional overhead to manage the several pieces.

A subtler problem is that fragmentation may prematurely exhaust a cache, causing thrashing, due to caches holding blocks, not individual data. For example, suppose a program has a working set of 256 KiB, and is running on a computer with a 256 KiB cache (say L2 instruction+data cache), so the entire working set fits in cache and thus executes quickly, at least in terms of cache hits. Suppose further that it has 64 translation lookaside buffer (TLB) entries, each for a 4 KiB page: each memory access requires a virtual-to-physical translation, which is fast if the page is in cache (here TLB). If the working set is unfragmented, then it will fit onto exactly 64 pages (the page working set will be 64 pages), and all memory lookups can be served from cache. However, if the working set is fragmented, then it will not fit into 64 pages, and execution will slow due to thrashing: pages will be repeatedly added and removed from the TLB during operation. Thus cache sizing in system design must include margin to account for fragmentation.

Memory fragmentation is one of the most severe problems faced by system managers.[citation needed] Over time, it leads to degradation of system performance. Eventually, memory fragmentation may lead to complete loss of (application-usable) free memory.

Memory fragmentation is a kernel programming level problem. During real-time computing of applications, fragmentation levels can reach as high as 99%, and may lead to system crashes or other instabilities.[citation needed] This type of system crash can be difficult to avoid, as it is impossible to anticipate the critical rise in levels of memory fragmentation. However, while it may not be possible for a system to continue running all programs in the case of excessive memory fragmentation, a well-designed system should be able to recover from the critical fragmentation condition by moving in some memory blocks used by the system itself in order to enable consolidation of free memory into fewer, larger blocks, or, in the worst case, by terminating some programs to free their memory and then defragmenting the resulting sum total of free memory. This will at least avoid a true crash in the sense of system failure and allow the system to continue running some programs, save program data, etc.

Fragmentation is a phenomenon of system software design; different software will be susceptible to fragmentation to different degrees, and it is possible to design a system that will never be forced to shut down or kill processes as a result of memory fragmentation.

Analogous phenomena

[edit]

While fragmentation is best known as a problem in memory allocation, analogous phenomena occur for other resources, notably processors.[6] For example, in a system that uses time-sharing for preemptive multitasking, but that does not check if a process is blocked, a process that executes for part of its time slice but then blocks and cannot proceed for the remainder of its time slice wastes time because of the resulting internal fragmentation of time slices. More fundamentally, time-sharing itself causes external fragmentation of processes due to running them in fragmented time slices, rather than in a single unbroken run. The resulting cost of process switching and increased cache pressure from multiple processes using the same caches can result in degraded performance.

In concurrent systems, particularly distributed systems, when a group of processes must interact in order to progress, if the processes are scheduled at separate times or on separate machines (fragmented across time or machines), the time spent waiting for each other or in communicating with each other can severely degrade performance. Instead, performant systems require coscheduling of the group.[6]

Some flash file systems have several different kinds of internal fragmentation involving "dead space" and "dark space".[7]

See also

[edit]

References

[edit]
  1. ^ "CS360 Lecture notes -- Fragmentation". web.eecs.utk.edu. Retrieved 2025-08-06.
  2. ^ Null, Linda; Lobur, Julia (2006). The Essentials of Computer Organization and Architecture. Jones and Bartlett Publishers. p. 315. ISBN 9780763737696. Retrieved Jul 15, 2021.
  3. ^ "Partitioning, Partition Sizes and Drive Lettering". The PC Guide. April 17, 2001. Retrieved 2025-08-06.
  4. ^ "Switches: Sector copy". Symantec. 2025-08-06. Archived from the original on July 19, 2012. Retrieved 2025-08-06.
  5. ^ D. Samanta. "Classic Data Structures" 2004. p. 76
  6. ^ a b Ousterhout, John K. (1982). "Scheduling Techniques for Concurrent Systems" (PDF). Proceedings of Third International Conference on Distributed Computing Systems. pp. 22–30.
  7. ^ Hunter, Adrian (2008). "A Brief Introduction to the Design of UBIFS" (PDF). p. 8.

Sources

[edit]
胆结石不能吃什么食物 橙色预警是什么级别 切是什么偏旁 眼睛干涩发痒用什么药 冒昧是什么意思
弱点是什么意思 忌出火是什么意思 rose是什么意思 口腔溃疡是什么样子 皮肤黑穿什么颜色的衣服显白
故事情节是什么意思 眼睛晶体是什么 二型血糖高吃什么药好 毒灵芝长什么样 为什么会黄体功能不足
嘴里发甜是什么原因 金陵十二钗是什么意思 红豆吃多了有什么坏处 什么是性激素 吞咽困难是什么原因造成的
手心脚心发热吃什么药hcv9jop2ns2r.cn 经常尿路感染是什么原因hcv8jop0ns0r.cn 377是什么creativexi.com mt指什么hcv8jop9ns3r.cn 皮肤黄的人适合穿什么颜色的衣服hcv8jop3ns9r.cn
李白有什么诗hcv8jop4ns9r.cn 衣冠禽兽什么意思hcv9jop6ns2r.cn 头位是什么意思hcv8jop8ns4r.cn 韦编三绝什么意思hcv7jop4ns6r.cn 什么交加hcv9jop1ns3r.cn
宫颈出血是什么症状hcv8jop6ns5r.cn 直肠炎是什么原因引起的weuuu.com 推崇是什么意思hcv9jop4ns9r.cn 下巴有痣代表什么hcv8jop4ns0r.cn 为什么头晕晕乎乎的hcv7jop9ns6r.cn
家里有蜈蚣是什么原因hcv8jop5ns9r.cn 丝状疣是什么样子图片hcv8jop3ns3r.cn 小孩鼻子出血什么原因zhiyanzhang.com 吃什么排宿便清肠彻底hcv8jop4ns7r.cn 啸是什么生肖hcv9jop0ns8r.cn
百度