《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》——2.4 内存管理结构mem_map初始化

简介: 本节书摘来自华章计算机《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》一书中的第2章,第2.4节,作者:新设计团队著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.4 内存管理结构mem_map初始化

对主内存区起始位置的重新确定,标志着主内存区和缓冲区的位置和大小已经全都确定了,于是系统开始调用mem_init()函数。先对主内存区的管理结构进行设置,该过程如图2-5所示。

image

具体执行代码如下:

//代码路径:init/main.c:
void main(void)
{
    …
    mem_init(main_memory_start,memory_end);
    …
}
//代码路径:mm/memory.c:
    …
    #define LOW_MEM 0x100000                //1 MB
    #define PAGING_MEMORY (15*1024*1024)
    #define PAGING_PAGES (PAGING_MEMORY>>12)        //15 MB的页数
    #define MAP_NR(addr) (((addr)-LOW_MEM)>>12)
    #define USED 100
    …
    static long HIGH_MEMORY= 0;
    …
    static unsigned char mem_map [PAGING_PAGES]= {0,};
    …
void mem_init(long start_mem, long end_mem)
{
    int i;

    HIGH_MEMORY= end_mem;
    for (i=0;i<PAGING_PAGES;i++)
         mem_map[i]= USED;
    i= MAP_NR(start_mem);                //start_mem为6 MB(虚拟盘之后)
    end_mem -= start_mem;
    end_mem >>= 12;                    //16 MB的页数
    while (end_mem-->0)
         mem_map[i++]=0; 
}

系统通过mem_map[]对1 MB以上的内存分页进行管理,记录一个页面的使用次数。
mem_init()函数先将所有的内存页面使用计数均设置成USED (100,即被使用),然后再将主内存中的所有页面使用计数全部清零,系统以后只把使用计数为0的页面视为空闲页面。
那么为什么系统对1 MB以内的内存空间不用这种分页方法管理呢?这是因为,操作系统的设计者对内核和用户进程采用了两套不同的分页管理方法。内核采用分页管理方法,线性地址和物理地址是完全一样的,是一一映射的,等价于内核可以直接获得物理地址。用户进程则不然,线性地址和物理地址差异很大,之间没有可递推的逻辑关系。操作系统设计者的目的就是让用户进程无法通过线性地址推算出具体的物理地址,让内核能够访问用户进程,用户进程不能访问其他的用户进程,更不能访问内核。1 MB以内是内核代码和只有由内核管控的大部分数据所在内存空间,是绝对不允许用户进程访问的。1 MB以上,特别是主内存区主要是用户进程的代码、数据所在内存空间,所以采用专门用来管理用户进程的分页管理方法,这套方法当然不能用在内核上。详细内容请看第6章中的内存管理,深层次原因的分析请看第9章。

相关文章
|
2月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
581 6
|
2月前
|
缓存 Java Linux
如何解决 Linux 系统中内存使用量耗尽的问题?
如何解决 Linux 系统中内存使用量耗尽的问题?
166 48
|
1月前
|
算法 Linux
深入探索Linux内核的内存管理机制
本文旨在为读者提供对Linux操作系统内核中内存管理机制的深入理解。通过探讨Linux内核如何高效地分配、回收和优化内存资源,我们揭示了这一复杂系统背后的原理及其对系统性能的影响。不同于常规的摘要,本文将直接进入主题,不包含背景信息或研究目的等标准部分,而是专注于技术细节和实际操作。
|
2月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
46 4
|
2月前
|
Linux
如何在 Linux 系统中查看进程占用的内存?
如何在 Linux 系统中查看进程占用的内存?
|
2月前
|
缓存 Linux
如何检查 Linux 内存使用量是否耗尽?
何检查 Linux 内存使用量是否耗尽?
|
2月前
|
Linux 调度
Linux系统结构
内核是操作系统的核心组件,负责管理系统资源和硬件设备。它提供了硬件抽象层,使得应用程序不必直接操作硬件。内核的主要功能包括: 进程管理:创建、调度和终止进程。 内存管理:分配和回收内存,提供虚拟内存功能。 设备管理:控制硬件设备的访问。 文件系统管理:管理文件和目录结构。 系统调用接口:提供系统调用,使应用程序能够与操作系统交互。
43 8
|
2月前
|
算法 Linux 开发者
深入探究Linux内核中的内存管理机制
本文旨在对Linux操作系统的内存管理机制进行深入分析,探讨其如何通过高效的内存分配和回收策略来优化系统性能。文章将详细介绍Linux内核中内存管理的关键技术点,包括物理内存与虚拟内存的映射、页面置换算法、以及内存碎片的处理方法等。通过对这些技术点的解析,本文旨在为读者提供一个清晰的Linux内存管理框架,帮助理解其在现代计算环境中的重要性和应用。
|
2月前
|
存储 算法 安全
深入理解Linux内核的内存管理机制
本文旨在深入探讨Linux操作系统内核的内存管理机制,包括其设计理念、实现方式以及优化策略。通过详细分析Linux内核如何处理物理内存和虚拟内存,揭示了其在高效利用系统资源方面的卓越性能。文章还讨论了内存管理中的关键概念如分页、交换空间和内存映射等,并解释了这些机制如何协同工作以提供稳定可靠的内存服务。此外,本文也探讨了最新的Linux版本中引入的一些内存管理改进,以及它们对系统性能的影响。
|
2月前
|
缓存 运维 Linux
深入探索Linux内核:CPU拓扑结构探测
【10月更文挑战第18天】在现代计算机系统中,CPU的拓扑结构对性能优化和资源管理至关重要。了解CPU的核心、线程、NUMA节点等信息,可以帮助开发者和系统管理员更好地调优应用程序和系统配置。本文将深入探讨如何在Linux内核中探测CPU拓扑结构,介绍相关工具和方法。
37 0