1. Each process has its own independent 4G memory space, and the memory space of each process has a similar structure.
Linux memory management adopts page management, using multi-level page tables. The dynamic address translation mechanism, main memory and auxiliary memory jointly realize virtual memory. When a new process is established,
It will establish its own memory space, and the data and code of this process will be copied from the disk to its own process space. Which data is where?
They are all recorded by the task_struct in the process control table. There is a linked list recorded in the task_struct, and the memory space allocation in the record is
Which addresses have data, which addresses have no data, which ones are readable, and which ones are writable, can be recorded through this linked list. The memory space that each process has allocated can be mapped with the corresponding disk space.
2. Each program can see a complete and continuous address space. These spaces are not directly related to physical memory, but the operating system provides an abstract concept of memory,
This allows each process to have a continuous and complete address space. During the running process of the program, the conversion from virtual address to physical address is completed.
We also know that the address space of a process is segmented, and there are so-called data segments, code segments, bbs segments, heaps, stacks, etc. Each segment has a specific role.
At the same time, the computer does not have that much memory (n processes need to correspond to n*4G memory). To create a process, you need to copy the program files on the disk to the memory corresponding to the process,
For the case where one program corresponds to multiple processes, memory is wasted.
3. The 4G memory space of each process is only a virtual memory space. Every time an address in the memory space is accessed, the address needs to be translated into an actual physical address. All processes share the same physical memory,
Each process only maps and stores the virtual memory space it currently needs into physical memory. The process needs to know which memory addresses the data is in physical memory, which ones are not, and where they are in physical memory,
The page table needs to be recorded. Each entry in the page table is divided into two parts. The first part records whether the page is in physical memory. The second part records the address of the physical memory. When the process accesses a virtual address,
Check the page table. If the corresponding data is not in the physical memory, the page missing exception processing process is to copy the data required by the process from the disk to the physical memory.
If the memory is full , if there is no free space, then find a page to overwrite. Of course, if the overwritten page has been modified, this page needs to be written back to the disk.
4. Surprisingly, the memory space of each process is consistent and fixed, so the linker can set the memory address when linking the execution file, without having to worry about the final actual memory address of the data,
This has independent memory Benefits of space: When different processes use the same code, such as code in a library file, only one copy of such code can be stored in physical memory,
Different processes only need to map their own virtual memory to save memory when the program needs to allocate continuous memory space.
Only contiguous space needs to be allocated in the virtual memory space without the need for contiguous space in actual physical memory, and fragmentation can be used.
The above is the detailed content of What is the virtual memory mechanism of linux. For more information, please follow other related articles on the PHP Chinese website!