mmu

    -1热度

    1回答

    在Linux中,有一些函数用于索引pgd,pmd和pte,如pgd_offset,pmd_offset和pte_offset。谁称这些功能? MMU是否使用这些函数来遍历页表? 我的理解是,linux内核为每个进程创建一个页表,并将页表的基地址传递给页表基址寄存器,以便MMU可以访问它。之后MMU如何读取页表?如果MMU是阅读页表的人,谁使用这些pgd_offset等功能?

    0热度

    2回答

    将视觉和物理内存分成页面。要检查页面是否有效,页表项中有一个有效位。但是在一个页面中,MMU如何知道地址是否有效?例如,属于堆的一部分的页面。并非该页面的所有地址都是有效的,那么MMU如何检查addr以查看它是否有效?

    0热度

    1回答

    假设两级页表,假设该方案被分配2页(8KB) GPD PD1 PD2 PD3 +-----+ +------+ +------+ +------+ + 1 + + 22 + +------+ +------+ + 0 + + 62 + +------+ +------+ + 0 + + 0 + +------+ +------+ +-----+ +------+ +------+

    0热度

    1回答

    我试图为arm平台(仅针对内核页表)模拟函数lookup_address(http://lxr.free-electrons.com/source/arch/x86/mm/pageattr.c#L373)。 重点是我从TTBR1获取swapper_pg_dir的地址,到目前为止这工作。 我用gdb检查了它: (gdb) file vmlinux Reading symbols from vmli

    0热度

    1回答

    我想在xen-4.5.0上做一些内存管理,并且对MTRR(内存类型范围注册表)有些困惑。当我试图获得IA32_MTRRCAP寄存器的值时,我得到了值1d0a。 但是,在2016年12月发布的英特尔手册中,IA32_MTRRCAP寄存器的位12-63全部标记为保留,而我在位12上得到1。为什么?与此同时,当我试图从MTRR读取内存信息时,我找不到它们中的大部分内存地址。 我试过这些与英特尔Skyla

    -2热度

    2回答

    CPU生成逻辑地址。这些逻辑地址然后由特殊单元MMU转换为物理地址。这是写在如此多的书籍,包括Galvin(幻灯片6-7)。 但我想知道CPU如何生成逻辑地址,这是什么意思?

    0热度

    1回答

    使用arm核心adsp-sc572(内核4.0),我想通过__pa工作不正常。 使用kmalloc为DMA分配一个大缓冲区(例如500kB)给了我一个虚拟地址。当使用__pa() - >它有时会返回物理地址范围外的地址。例如0x88AB0000 0x87FFFFFF [..] -> 128MB RAM 0x80000000 __pa电话__virt_to_phys - >__pv_stub

    1热度

    1回答

    我在armv8(aarch64)中编写了一个简单的内核。 MMU配置: 48 VA位(T1SZ = 64-48 = 16) 4K页大小 映射到内核虚拟存储器(上TTBR1_EL1)所有物理RAM平坦 (MMU与TTBR0_EL1 = 0活性,所以我只使用在地址为0xFFFF <地址>,所有平面映射到物理存储器) 我映射新的地址空间(从1开始的< < 40)到一些自由的物理区域。当我尝试访问的地址1

    0热度

    1回答

    我们假设我们有4 GiB的RAM,并且我们使用4 kiB的页表大小和32位地址。 我的计算后,我得到了: 我们只能解决2^32个地址的最大; 每页表共有2^20个条目; 总共有4 GiB/4 kiB = 1048576页。 但我不明白的是,如果一个页表有2^20个条目,我们已经用这个页表覆盖了所有可能的地址。 如果每个进程都有自己的页面表,可能性如何?那么应该可以在多个页面表上使用相同的物理地址,

    0热度

    2回答

    据我所知,CPU的内存访问涉及CPU缓存和MMU。 CPU将尝试在高速缓存中找到其目标,如果发生高速缓存未命中,CPU将转为MMU。在MMU访问期间,对应页表项的被访问/脏位将由硬件置位。但是据我所知,大多数CPU设计不会触发MMU,除非有一个缓存未命中,这里我的问题是,页表项的被访问/脏位仍然会被设置在缓存命中下?或者它与建筑相关?