首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在内核中实现内存管理?

在内核中实现内存管理的主要目标是有效地管理系统的物理内存资源,以便为进程提供足够的内存空间,并确保内存的安全性和可靠性。下面是一个完善且全面的答案:

内核中的内存管理是通过以下几个关键步骤来实现的:

  1. 内存分配:内核需要为每个进程分配足够的内存空间。内存分配可以通过两种方式进行:连续内存分配和非连续内存分配。
  • 连续内存分配:将物理内存划分为连续的块,并将这些块分配给进程。常见的连续内存分配算法有首次适应算法、最佳适应算法和最坏适应算法。
  • 非连续内存分配:将物理内存划分为多个不连续的块,并将这些块分配给进程。常见的非连续内存分配算法有页式存储管理和段式存储管理。
  1. 内存映射:内核需要将进程的虚拟地址映射到物理地址,以便进程可以访问到所分配的内存空间。内存映射可以通过页表来实现,页表将虚拟地址映射到物理地址,并提供访问权限控制。
  2. 内存回收:当进程不再需要某块内存空间时,内核需要将该内存空间回收,以便其他进程可以重新使用。内存回收可以通过释放页表项或将内存块标记为可用来实现。
  3. 内存保护:内核需要确保每个进程只能访问到其分配的内存空间,以保证内存的安全性。内存保护可以通过页表中的访问权限位来实现,例如只读、读写、执行等权限。
  4. 内存交换:当系统的物理内存不足时,内核可以将部分进程的内存数据交换到磁盘上,以释放物理内存空间。内存交换可以通过页面置换算法来实现,例如最近最少使用算法(LRU)。
  5. 内存碎片整理:内存分配和回收过程中会产生内存碎片,影响内存的利用率。内核可以通过内存碎片整理算法来合并和重组内存块,以减少内存碎片。

内核中实现内存管理的优势包括:

  • 提高系统的性能和效率:通过合理管理内存资源,可以减少内存碎片,提高内存的利用率,从而提高系统的性能和效率。
  • 提供良好的内存保护机制:通过访问权限控制和内存保护机制,可以确保每个进程只能访问到其分配的内存空间,保证内存的安全性。
  • 支持多任务和多进程:内存管理可以为每个进程分配独立的内存空间,从而支持多任务和多进程的并发执行。
  • 提供灵活的内存分配策略:内核可以根据系统的需求和特点,选择合适的内存分配策略,以满足不同进程的内存需求。

内核中实现内存管理的应用场景包括:

  • 操作系统:内核中的内存管理是操作系统的核心功能之一,用于管理系统的物理内存资源,为进程提供内存空间。
  • 虚拟化技术:内核中的内存管理对于虚拟化技术尤为重要,可以为虚拟机分配独立的内存空间,并提供内存保护和隔离机制。
  • 大数据处理:内核中的内存管理可以优化大数据处理过程中的内存分配和回收,提高数据处理的效率和速度。
  • 高性能计算:内核中的内存管理对于高性能计算应用尤为重要,可以提供高效的内存分配和访问机制,提高计算的速度和效率。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云内存数据库TencentDB for Redis:https://cloud.tencent.com/product/trdb
  • 腾讯云弹性MapReduce(EMR):https://cloud.tencent.com/product/emr
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云云存储(COS):https://cloud.tencent.com/product/cos

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Windows内核内存管理

内存管理的要点 内核内存虚拟地址空间的高2GB位置,且由所有进程所共享,进程进行切换时改变的只是进程的用户分区的内存 驱动程序就像一个特殊的DLL,这个DLL被加载到内核的地址空间中,DriverEntry...,即出现大量小块的不连续的内存片段,这个时候即使内存仍有剩余,但是我们也申请不了内存,一般操作系统空闲的时候会进行内存整理,将空洞内存进行合并,如果驱动需要频繁的从内存申请释放相同大小的内存块,DDK...提供了Lookaside内存容器,初始时它先向系统申请了一块比较大的内存,以后程序每次申请内存的时候不是直接在Windows堆中进行分配,而是在这个容器,Lookaside结构会智能的避免产生内存空洞...,可以将返回值与Length相比较,如果相等则说明两块内存相同,否则不相同,另外为了实现这个功能DDK提供了一个与该函数同名的宏来判断,具体在编写代码时可以根据情况判断调用的是函数还是宏。...在内核,对于内存的读写要相当的谨慎,稍不注意就可能产生一个新漏洞或者造成系统的蓝屏崩溃,有时在读写内存前需要判断该内存是否合法可供读写,DDK提供了两个函数来判断内存是否可读可写 VOID ProbeForRead

1.4K20
  • 【Linux 内核 内存管理内存管理架构 ⑤ ( sbrk 内存分配系统调用代码示例 | procpidmaps 查看进程堆内存详情 )

    文章目录 一、sbrk 内存分配系统调用代码示例 二、 /proc/pid/maps 查看进程堆内存详情 本篇博客调用 sbrk 系统调用函数 , 申请并修改 堆内存 , 并在 /proc/pid/...maps 查看该进程的 堆内存 ; 一、sbrk 内存分配系统调用代码示例 ---- sbrk 系统调用函数 , 作用是 修改程序 BSS 段大小 ; 函数原型如下 : #include <unistd.h..., 指针始终没有改变 , 一直都是 0x203e000 地址 ; 如果使用新的指针 p_new 接收 sbrk 系统调用返回的堆内存指针 , 则分配的是新的地址 ; 二、 /proc/pid/maps...查看进程堆内存详情 ---- 在上一节 , 已经打印出进程的 PID 为 4829 , 根据该 PID , 可以直接获取该进程的内存情况 , 执行 cat /proc/4829/maps 命令...0x2060000 ; /proc/4829/maps 文件 , 堆内存的区域是 0203e000-02060000 , 与打印出的值相对应 ; 0203e000-02060000 rw-p 00000000

    4K20

    详解Linux内核内存管理架构

    linux的内存映射管理是通过页表来实现的,但是页表是放在内存的,如果每次地址转换过程都需要访问一次内存,其效率是十分低下的。这里CPU通过TLB硬件单元来加速地址转换。...3)获得PA后,L2 cache再查找缓存数据。L2 cache一般比L1 cache大一个数量级,其查找命中率也更高。如果命中获得数据,则可避免去访问内存,提高访问效率。...DMA zone和highmem zone中间的区域即normal zone,主要用于内核的动态内存分配。其分配通过kmalloc接口来申请。...kmap主要用于fs、net等对高端内存访问有较高性能要求的模块。 固定映射地址空间:持久映射的问题是可能会休眠,中断上下文、自旋锁临界区等不能阻塞的场景不可用。...内存管理软件架构 内核内存管理的核心工作就是内存的分配回收管理,其内部分为2个体系:页管理和对象管理

    3.1K42

    【Linux 内核 内存管理内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )

    硬件 ) ---- 内存管理架构 由 3 部分组成 : ① 用户空间 : " 用户空间 " , 使用 malloc 函数 申请 " 堆内存 " , 使用 free 函数 释放 " 堆内存..." ; ② 内核空间 : Linux 内核启动后 , 一直 驻留在内存 , 应用程序 不能 读写 内核空间数据 , 不能直接调用 内核源码 的函数 ; 只能通过 " 系统调用 " 间接调用 内核函数...; ③ 硬件 : 硬件主要是指 处理器 的 " 内存管理单元 “ , 该 内存管理单元 主要作用是 将 ” 虚拟内存地址 " 转为 " 物理内存地址 " ; " 内存管理单元 " , 英文名称是 "...的如下功能 : ① 进程调度 : 内核 调用 CPU 处理器 实现 进程调度 ; ② 内存管理 : 内核 调用 物理内存 实现 内存管理 ; ③ IPC 跨进程通信 ④ VFS 虚拟文件系统...⑤ 网络管理 : 内核 调用 网络接口 , 实现 网络管理 ; " 设备管理 " 对用户是透明的 , 用户不直到 Linux 内核如何管理设备的 , 系统调用接口没有关于 " 设备管理 " 的调用接口

    9.6K40

    LiteOS内核教程06 | 内存管理

    LiteOS内核内存管理 1.1....内存管理 系统运行的过程,一些内存空间大小是不确定的,比如一些数据缓冲区,所以系统需要提供内存空间的管理能力,用户可以使用的时候申请需要的内存空间,使用完毕释放该空间,以便再次利用。...,这些接口底层已经使用 LiteOS 提供的API实现,对用户而言更为简洁,API列表如下: osal的api接口声明,使用相关的接口需要包含该头文件,关于函数的详细参数请参考该头文件的声明...相关的接口定义osal.c,基于LiteOS的接口实现在 liteos_imp.c文件: 接口名 功能描述 osal_malloc 按字节申请分配动态内存空间 osal_free 释放已经分配的动态内存空间...那么,如何配置 CONFIG_USER_DEMO 宏定义呢?工程根目录下的.sdkconfig文件的末尾即可配置: ?

    1.2K20

    【Linux 内核 内存管理内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)

    文章目录 一、用户空间内存管理 ( malloc / free / ptmalloc / jemalloc / tcmalloc ) 二、内核空间内存管理 1、内核内存管理系统调用 ( sys_brk..." 二、内核空间内存管理 ---- 1、内核内存管理系统调用 ( sys_brk | sys_mmap | sys_munmap ) " 内核空间 " , 调用 Linux 内核的 sys_brk.../ sys_mmap / sys_munmap 函数 , 管理 " 堆内存 " ; sys_brk 通过修改 堆内存 的 终止地址 , 扩张 / 收缩 堆内存 ; sys_mmap " 内存映射区..." ; 2、sys_brk、sys_mmap 系统调用 可参考 【Linux 内核 内存管理】Linux 内核内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 |...brk 系统调用源码介绍 ) 博客 ; ① brk 系统调用 : 该方式本质是 设置 " 进程数据段 “ 的 结束地址 , 将该 ” 结束地址 " 向 高或低 移动 , 实现内存的 扩张或收缩 ; ②

    97410

    DPDK巨页地址管理Linux内核内存管理内存映射pagemaprdma内存注册

    DPDK巨页地址管理/Linux内核内存管理/内存映射/pagemap/rdma内存/注册术语PFN: 物理地址对应的页帧号:pfn = pte_pfn(*pte)INFINIBAND_USER_MEM...主机内存缓存 (HMC) 是负责管理存储主机内存的 iWARP 上下文对象的组件。...HMC 每个 PCI 功能的基础上管理主机内存,并进一步将每个 PCI 功能的 HMC 内存空间分解为用于管理用于给定 PCI 功能的每个上下文对象的内存。...的大小为4M,其内核实现如下:mmapLinux的Mmap(Memory Map)是一种内存映射机制,它允许将文件或设备的一部分映射到进程的虚拟内存空间。...这使得错误处理变得非常复杂,并且使得 Paul Khuong Twitter 上提出的解决方案几乎毫无用处。 不用担心交换—— Linux ,大页面无论如何都不能被换出。

    67710

    【Linux 内核 内存管理】Linux 内核内存布局 ③ ( Linux 内核 动态分配内存 系统接口函数 | 统计输出 vmalloc 分配的内存 )

    文章目录 一、Linux 内核 动态分配内存 系统接口函数 二、统计输出 vmalloc 分配的内存 一、Linux 内核 动态分配内存 系统接口函数 ---- Linux 内核 " 动态分配内存 "...是通过 " 系统接口 " 实现的 , 下面介绍几个重要的 接口函数 ; ① 以 " 页 " 为单位分配内存 : alloc_pages , __get_free_page ; ② 以 " 字节 " 为单位分配..." 虚拟地址连续的内存块 " : vmalloc ; ③ 以 " 字节 " 为单位分配 " 物理地址连续的内存块 " : kmalloc ; 注意 该 " 物理地址连续的内存块 " 是以 Slab 为中心的...; 二、统计输出 vmalloc 分配的内存 ---- 执行 grep vmalloc /proc/vmallocinfo 命令 , 可以统计输出 通过 vmalloc 函数分配的 " 虚拟地址连续的内存

    5.2K30

    Linux内核内存管理与漏洞利用

    前言 网上已经有很多关于Linux内核内存管理的分析和介绍了,但是不影响我再写一篇:一方面是作为其他文章的补充,另一方面则是自己学习的记录、总结和沉淀。...使用Buddy算法的的应用有很多,其中Linux内核就是一个,此外jemalloc也是使用Buddy技术的一个现代内存分配器。 Linux内核的伙伴系统块大小为一页,通常是4096字节。...【文章福利】【Linux内核内存管理专题训练营】火热开营!!...最新Linux内核技术详解 独家Linux内核内存管理干货分享 入营地址:inux内核内存管理专题训练营 两天持续技术输出: -------------------- 第一天: 1.物理内存映射及空间划分...缺页中断处理/反向映射 7.回收页面/匿名页面生命周期 8.KSM实现/Dirty COW内存漏洞 kmem_cache kmem_cache是Slab的主要管理结构,申请和释放对象都需要经过该结构操作

    2.4K00

    【Linux 内核 内存管理】Linux 内核内存管理 ① ( 堆内存管理 | 内存描述符 mm_struct 结构体 | mm_struct 结构体的 start_brk、brk 成员 )

    文章目录 一、堆内存管理 二、内存描述符 mm_struct 结构体 三、mm_struct 结构体的 start_brk、brk 成员 一、堆内存管理 ---- Linux 操作系统的 " 堆内存...Linux 内核实现 , 开发者 不知道 堆的管理细节 , 只通过 " 系统调用 " 调用相关函数 ; " brk 系统调用 " 负责 扩展 和 收缩 堆内存 ; " 内存描述符结构体 " mm_struct...结构体 , start_brk 是 " 堆内存 ” 虚拟地址空间 " 的 起始地址 , brk 是 " 堆内存 " " 虚拟地址空间 " 的 结束地址 , 二、内存描述符 mm_struct...结构体 ---- mm_struct 结构体 定义 Linux 内核源码 include\linux\mm_types.h#375 源码 ; mm_struct 结构体 源码 : struct mm_struct...start_brk、brk 成员 ---- mm_struct 结构体的 start_brk、brk 成员 , 分别是 " 堆内存 " " 虚拟地址空间 " 的 开始 和 结束 地址 , 其定义

    91231

    如何管理内存

    程序员成长充电站 01 垃圾回收 内存是一种你不可以耗尽的珍贵资源。一段时期里,你可以无视它,但最终你必须决定如何管理内存。 堆内存单一子程序范围外,需要持续(保留)的空间。...你应该尽早发现并且修复内存泄露。如果你有一个长时间运行的系统,内存可能在测试不会被耗尽,但可能在用户那里被耗尽。 02 对象内存 创建新对象在任何系统里都是有点昂贵的。...然而,子程序里直接为局部变量分配内存通常很便宜,因为释放它的策略很简单。你应该避免不必要的对象创建。...然后你必须谨慎机智地分配每一块内存,并且为它设计一种合适的时候重新分配的方式。这种销毁的方式可能随着你创建的对象的不同而不同。你必须保证每个内存分配操作都与一个内存释放操作相匹配。...这通常是很困难的,所以程序员通常会实现一种简单的方式或者垃圾回收机制,比如引用计数,来为它们做这件事情。 下一节:如何处理偶现的 Bug

    66320

    【Linux 内核 内存管理内存管理架构 ③ ( Linux 内核内存管理模块 | 页分配器 | 不连续页分配器 | 内存控制组 | 硬件设备内存管理 | MMU | 页表缓存 | 高速缓存 )

    文章目录 一、Linux 内核内存管理模块 二、硬件设备内存管理 一、Linux 内核内存管理模块 ---- Linux 内核还需要处理如下内容 : ① 页错误异常处理 ② 页表管理 ③ 引导内存分配器...vmalloc 函数 用于分配内存 , vfree 函数 用于 释放内存 ; 申请的 " 不连续物理页 “ 可以 映射到 ” 连续的虚拟页 " ; ④ 内存碎片整理 ⑤ 内存耗尽处理 ⑥ 内存控制组...: 控制管理 被 进程 占用的 内存 ; 碎片整理 : 如果 " 内存碎片化 " 严重 , 没有连续物理页 , 需要通过 整理内存碎片 并迁移数据 得到 连续的 物理页 ; 内存回收 : 内存不足时 ,...回收内存 ; ⑦ 页回收处理 二、硬件设备内存管理 ---- 硬件设备内存管理 : ① CPU 处理器 的 " 内存管理单元 " ( MMU ) 和 高速缓存 ; ② 物理内存 " 内存管理单元..." ( MMU ) , 还有一个 " 页表缓存 " ; 页表缓存 缓存了 最近使用的 " 页表映射 “ , 该映射的作用是 将 ” 物理地址 " 映射为 " 虚拟地址 " ; CPU 处理器

    1.5K40

    【Linux 内核 内存管理】分区伙伴分配器 ⑥ ( zone 结构体水线控制相关成员 | Ubuntu 查看内存区域水位线 )

    文章目录 一、zone 结构体水线控制相关成员 ( managed_pages | spanned_pages | present_pages ) 二、 Ubuntu 查看内存区域水位线 上一篇博客...【Linux 内核 内存管理】分区伙伴分配器 ⑤ ( 区域水线 | 区域水线数据结构 zone_watermarks 枚举 | 内存区域 zone 的区域水线 watermark 成员 ) 中讲解了...( managed_pages | spanned_pages | present_pages ) ---- linux 内核源码 描述 " 内存区域 " 的结构体 struct zone ...有空洞 ) > present_pages ( 当前区域物理页数 无空洞 ) > managed_pages ( 伙伴分配器管理的物理页数 ) 参考 【Linux 内核 内存管理】物理内存组织结构...Ubuntu 查看内存区域水位线 ---- Ubuntu 的 命令行 , 执行 cat /proc/zoneinfo 命令 , 查看 " 内存区域 " 信息 ; 输出内容 , 其中 Normal

    2.5K30

    【Linux 内核 内存管理内存管理系统调用 ④ ( 代码示例 | mmap 创建内存映射 | munmap 删除内存映射 )

    文章目录 一、mmap 创建内存映射代码示例 1、fopen 打开或创建文件 2、lseek 设置文件大小 3、mmap 函数使用 4、munmap 删除内存映射 二、完整代码示例 一、mmap 创建内存映射代码示例...include #include #include /* 定义一个结构体 代表 " 学生 " 结构体成员设置一个...// 该操作的作用是将文件大小设置为 10 个 student 结构体大小 lseek(fd, sizeof(student) * 10 - 1, SEEK_SET); // 向文件写入数据...个字节就是字符串的实际内容 , 该字符串只有 1 个字符 (*(p_student + i)).name[1] = '\0'; // 拷贝 字符串 到 p_student 指向的内存...\n"); return 0; } 编译并执行代码 : 上述源码保存在 mmap_demo_01.c 文件 , 执行 gcc mmap_demo_01.c -o mmap_demo_01 命令

    1.4K10

    从进入内核态看内存管理

    大家好,我是坤哥 知乎上搜到一个比较有意思的话题:如何理解「进入内核态」,要回答好这个问题需要对内存管理及程序的运行机制有比较深刻的了解,比如你需要了解内存的分段,分页,中断,特权级等机制,信息量比较大...:段内偏移量组成的,也叫逻辑地址,只有分段内存管理的情况下它也被称为虚拟内存 GDT 及段描述符的分配都是由操作系统管理的,进程也无法更新 CS 等寄存器中值,这样就避免了直接操作其他进程以及自身的物理地址...,达到了保护内存的效果,从而为多进程运行提供了可能,我们把这种寻址方式称为保护模式 那么保护模式是如何实现的呢,细心的你可能发现了上图中段选择子和段描述符里出现了 RPL 和 DPL 这两个新名词,...通过系统调用,应用程序实现了陷入(trap)内核态的目的,这样就从用户态切换到了内核,如下 应用程序通过系统调用陷入内核态 那么系统调用又是怎么实现的呢,主要是靠中断实现的,接下来我们就来了解一下什么是中断...,逻辑地址要先经过段式管理单元转成线性地址(也称虚拟地址),然后再经过页式管理单元转成物理内存,如下 分页是可选项 Linux ,虽然也是段页式内存管理,但它统一把 CS,DS,SS,ES 的段基址设置为了

    95250

    【Linux 内核 内存管理内存管理架构 ④ ( 内存分配系统调用过程 | 用户层 malloc free | 系统调用层 brk mmap | 内核层 kmalloc | 内存管理流程 )

    系统调用 过程 : ① 用户应用程序调用 : 开发者 " 用户空间 “ 的 应用程序 调用 malloc 等函数 , 申请 动态分配 ” 堆内存 " , ② 系统调用 : 用户空间 的 内存管理函数...函数之间的 桥梁 ; ③ 内核层调用 : 内核与用户层接口 的 内存管理函数 调用 " Linux 内核 " 的 kmalloc vmalloc 函数 ; C 语言中使用 malloc free 等函数分配堆内存..., C++ 中使用的 new delete 关键字管理内存 , 其本质还是调用 malloc free 函数实现内存管理 ; 二、内存管理流程 ---- 内存管理流程 : ① 用户层 ( 用户空间...) 内存管理 : C 语言 : C , 使用 malloc 动态分配 " 堆内存 " , 使用 free 回收 " 堆内存 " ; C++ 语言 : C++ , 使用 new 关键字 动态分配...则该空间就是 ” 匿名空间 " , 可作为 " 堆内存 " 使用 ; ③ 内核层 ( 内核空间 ) 内存管理 : Linux 内核 , 通过 kmalloc vmalloc __get_free_pages

    71210

    【Linux 内核 内存管理内存管理系统调用 ⑤ ( 代码示例 | 多进程共享 mmap 内存映射示例 )

    文章目录 一、进程一描述 二、进程二描述 三、mmap 进程共享内存展示 一、进程一描述 ---- 在上一篇博客 【Linux 内核 内存管理内存管理系统调用 ④ ( 代码示例 | mmap 创建内存映射...| munmap 删除内存映射 ) , 完成了 进程一 的程序 , 该进程 , 创建并打开文件 , 为该文件设置大小 , 使用 mmap 创建 " 文件映射 " , 并通过直接访问内存的方式..., 为该文件设置数据 ; 数据设置完毕后 , 休眠 8 秒 , 在这段休眠的时间段 , 运行 进程二 , 进程二 , 创建相同文件的 mmap " 文件映射 " , 读取 进程一 写入的文件内容...; 二、进程二描述 ---- 进程二 的源码 , 与上一篇博客 【Linux 内核 内存管理内存管理系统调用 ④ ( 代码示例 | mmap 创建内存映射 | munmap 删除内存映射 ) 进程一..., 编译出的可执行文件为 mmap_demo_02 ; 三、mmap 进程共享内存展示 ---- 先执行 进程一 mmap_demo_01 可执行程序 , 进程一 通过 mmap 文件映射向文件写出数据后

    3.5K30

    iOS内存管理

    内存管理重要性 移动设备的内存极其有限,每个APP所占的内存都是有限的 下列行为就会增加一个APP的内存占用 创建一个OC对象 定义一个变量 调用一个函数或者方法 当APP所占用内存较多时,系统会发出内存警告...,这时得回收一些不需要再次使用的内存空间,比如收一些不需要使用的对象、变量等 若果APP占用内存过大,系统会强制关闭APP,造成闪退,影响用户体验 内存管理 内存管理:就是管理内存的分配和清除 内存管理涉及的操作有...-1 给对象发送retainCount消息,可以获得当有对象的引用计数 注: release并不代表销毁或回收对象,仅仅是计数器-1 属性存取方法内存管理(retain、copy、assign)...,给空指针发送消息是不会报错的 ARC ARC是新的LLVM3.0编译器的一项特性,工程中使用非常简单,不用再写release、retain、autorelease三个关键字。...(ARC) 把循环内的代码包裹在autoreleasepool,那么循环中自动释放对象就会放在这个池中,这样内存峰值就会降低(内存峰值:app某个特定的时段内最大内存用量) for(int i=

    26910

    Linux内核设备驱动之内存管理笔记整理

    我们简单介绍一下内存管理,并通过实例说明如何内核态获得内存。 (1)各种地址 对于x86处理器,需要区分以下三种地址: *逻辑地址(logical address) 只有x86支持。...(1)内核内存管理 内核把物理页作为内存管理的基本单位。这主要是因为内存管理单元(MMU)是以页为单位进行虚拟地址和物理地址转换的,从虚拟内存的角度来看,页就是最小单位。...系统只有3个这样的区结构。 (2)页分配 内核是使用页进行内存管理的,因此,我们在内核也可以要求系统以页为单位给我们分配内存。...kmalloc不会对分配的内存区域清0,分配的区域物理内存是连续的。...高端内存的页不能永久地映射到内核地址空间,因此,通过alloc_pages()函数以__GFP_HIGHMEM标志获得的页不可能有虚拟地址。

    1.7K20
    领券