Home Operation and Maintenance Linux Operation and Maintenance The system obviously has a lot of memory, but it cannot allocate a large piece of memory?

The system obviously has a lot of memory, but it cannot allocate a large piece of memory?

Aug 01, 2023 pm 03:37 PM
linux

Today’s question: The system obviously has a lot of memory, but it cannot allocate a large piece of memory?

Why is this?

This question involves an aspect of memory management - memory fragmentation

What is memory fragmentation?

Memory fragmentation has appeared very early in Linux. Understanding the history of early memory fragmentation will help us understand it.

Assume that there is a piece of 32MB memory. At first, the operating system uses the smallest piece of memory - 4MB, and the remaining memory is reserved for 4 processes, as shown in Figure (a).

The system obviously has a lot of memory, but it cannot allocate a large piece of memory?

Process A uses 10MB of memory above the operating system, process B uses 6MB of memory above process A, and process C uses 8MB of memory above process B. , as shown in Figure (b),:

The system obviously has a lot of memory, but it cannot allocate a large piece of memory?

Process D requires 5MB of memory, so the remaining memory is not enough to load process D, and the last bit of this memory forms The first hole (memory fragment). Assume that at a certain moment, the operating system needs to run process D because there is not enough memory in the system, so it needs to select a process to swap out to make enough space for process D. Assume that the operating system selects process B to swap out, so that process D is loaded into the address space of the original process B, thus creating a second hole, as shown in Figure (c):

The system obviously has a lot of memory, but it cannot allocate a large piece of memory?

Assume that the operating system needs to run process B at a certain moment, and also needs to select a process to swap out. Assuming that process A is swapped out, then a third process will occur in the operating system holes , as shown in Figure (d):

The system obviously has a lot of memory, but it cannot allocate a large piece of memory?

As time goes by, there will be more and more memory holes, and the memory utilization will also increase. Decreasing, these memory holes are what we often call Memory fragmentation.

The system obviously has a lot of memory, but it cannot allocate a large piece of memory?

After seeing this, you already know what memory fragmentation is, and you also understand a memory management mechanism-dynamic partitioning method. The above example is actually dynamic partitioning method. In the early days of the operating system, dynamic partitioning method was used to manage memory.

How to solve the memory fragmentation problem?

The idea is actually very simple: Put multiple small blocks of memory into one large block of memory.

In early operating systems that used dynamic partitioning, in order to solve the problem of fragmentation, they dynamically moved the process so that the space occupied by the process was continuous, and all free space was also continuous, In this way, multiple small memory blocks are put together. But the shortcomings are also very obvious. Process migration takes a lot of time.

Inner fragmentation and outer fragmentation

There are two types of memory fragmentation: Inner fragmentation and External fragmentation

Inner fragmentation: The part of the memory allocated to the program but not used

External fragmentation: System Small memory blocks that cannot be used (such as the fragments generated by the above-mentioned dynamic partitioning method)

Nowadays, operating systems use paging or segmentation mechanisms to manage memory, but some memory fragments will inevitably be generated.

In order to solve the problem of internal fragmentation and external fragmentation, Linux introduced two things: Partner system and slab.

The partner system is used to solve the problem of external fragmentation, and the slab is used to solve the problem of internal fragmentation.

The partner system and slab are also core contents in memory management. If you are interested, you can study it.

Summary

So, when the system has a lot of memory but cannot allocate a large block of memory, that is Because a lot of memory fragmentation is generated, there are many discontinuous small pieces of memory in the system. On the surface, it seems that the system has a lot of free memory, but in fact it is just scattered memory.

The above is the detailed content of The system obviously has a lot of memory, but it cannot allocate a large piece of memory?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to solve the permissions problem encountered when viewing Python version in Linux terminal? How to solve the permissions problem encountered when viewing Python version in Linux terminal? Apr 01, 2025 pm 05:09 PM

Solution to permission issues when viewing Python version in Linux terminal When you try to view Python version in Linux terminal, enter python...

Why does an error occur when installing an extension using PECL in a Docker environment? How to solve it? Why does an error occur when installing an extension using PECL in a Docker environment? How to solve it? Apr 01, 2025 pm 03:06 PM

Causes and solutions for errors when using PECL to install extensions in Docker environment When using Docker environment, we often encounter some headaches...

How to efficiently integrate Node.js or Python services under LAMP architecture? How to efficiently integrate Node.js or Python services under LAMP architecture? Apr 01, 2025 pm 02:48 PM

Many website developers face the problem of integrating Node.js or Python services under the LAMP architecture: the existing LAMP (Linux Apache MySQL PHP) architecture website needs...

How to solve permission issues when using python --version command in Linux terminal? How to solve permission issues when using python --version command in Linux terminal? Apr 02, 2025 am 06:36 AM

Using python in Linux terminal...

How to configure apscheduler timing task as a service on macOS? How to configure apscheduler timing task as a service on macOS? Apr 01, 2025 pm 06:09 PM

Configure the apscheduler timing task as a service on macOS platform, if you want to configure the apscheduler timing task as a service, similar to ngin...

Can the Python interpreter be deleted in Linux system? Can the Python interpreter be deleted in Linux system? Apr 02, 2025 am 07:00 AM

Regarding the problem of removing the Python interpreter that comes with Linux systems, many Linux distributions will preinstall the Python interpreter when installed, and it does not use the package manager...

Four ways to implement multithreading in C language Four ways to implement multithreading in C language Apr 03, 2025 pm 03:00 PM

Multithreading in the language can greatly improve program efficiency. There are four main ways to implement multithreading in C language: Create independent processes: Create multiple independently running processes, each process has its own memory space. Pseudo-multithreading: Create multiple execution streams in a process that share the same memory space and execute alternately. Multi-threaded library: Use multi-threaded libraries such as pthreads to create and manage threads, providing rich thread operation functions. Coroutine: A lightweight multi-threaded implementation that divides tasks into small subtasks and executes them in turn.

How to open web.xml How to open web.xml Apr 03, 2025 am 06:51 AM

To open a web.xml file, you can use the following methods: Use a text editor (such as Notepad or TextEdit) to edit commands using an integrated development environment (such as Eclipse or NetBeans) (Windows: notepad web.xml; Mac/Linux: open -a TextEdit web.xml)

See all articles