39得票10回答
逻辑地址和物理地址有什么区别?

我正在阅读《操作系统概念》,现在看到了第八章!然而,我需要一些澄清或确认我的理解是否正确。 逻辑地址:根据书中所述,逻辑地址是由CPU生成的。这到底是什么意思?(在一个执行生成地址系统中..)我猜想,在为程序编译代码时,程序根本不知道代码将被加载到哪个内存位置。编译器只是设置了程序布局和图像...

32得票1回答
内核如何知道虚拟地址空间中的哪些页面对应于被换出的物理页框?

考虑以下情况:内核已经耗尽了物理内存并需要交换页面。它选择最近最少使用的页面帧,并希望将其内容交换到磁盘并将该帧分配给另一个进程。 让我困惑的是,这个页面帧已经映射到了几个进程的几个(相同的)页面。内核必须找到所有这些进程,并将页面标记为已交换出。它是如何实现的? 谢谢。 编辑:问题说明...

26得票2回答
为什么在x86-64架构中,虚拟地址比物理地址短4位(48位 vs. 52位)?

在书籍《底层编程:C语言、汇编和Intel® 64架构下的程序执行》中,我读到: 每个虚拟64位地址(例如我们在程序中使用的地址)由若干字段组成。实际上,地址本身只有48位宽;它被扩展为64位规范地址。其特点是左侧的17位相等。如果不满足这个条件,则在使用时立即被拒绝。然后,通过特殊的表将48...

25得票2回答
理解pmap输出

我想使用pmap -x命令在Linux x86-64上查看进程的内存映射。但是,查看pmap的输出让我感到困惑,特别是针对动态库映射的条目。它们有多个条目(实际上大多数都有4个条目,有些只有3个条目)。以下是一个示例: Address Kbytes RSS Dir...

23得票7回答
多核CPU是否共享MMU和页表?

在单核计算机中,一次只有一个线程在执行。在每个上下文切换时,调度程序会检查要调度的新线程是否与以前的线程在同一个进程中。如果是,则关于MMU(页表)无需进行任何操作。否则,需要使用新进程的页表更新页表。 我想知道多核计算机上的情况。我猜每个核心都有一个专用的MMU,如果同一进程的两个线程同时...

20得票2回答
Linux内核空间中的页面表在引导过程中

我在Linux内核中的页面表管理方面感到困惑? 在Linux内核空间中,在打开页表之前,内核将在虚拟内存中以1-1映射机制运行。打开页表后,内核必须查询页表将虚拟地址转换为物理内存地址。 问题如下: 此时,在打开页表后,内核空间仍然是1GB(从0xC0000000-0xFFFFFFFF)...

17得票3回答
Linux /proc/pid/smaps 比例交换(类似于Pss但用于交换)

通过查看Linux内核源代码,似乎/proc/pid/smaps中的Swap:指标是给定pid可访问的总交换空间。 在涉及共享内存的情况下,这似乎是实际交换使用量的一个过度近似。例如,当总结父进程与其派生子进程的交换使用情况时,如果它们在交换中有共同的共享内存,则此部分(交换的共享内存)会被...

15得票1回答
使用MMU实现可调整大小的数组

通常,列表实现为链表或数组列表。链表遍历速度较慢,而数组列表在插入元素时速度也很慢。 我在想,是否可以利用处理器的MMU更有效地实现列表,通过重新映射而不是复制内存来进行元素插入或删除。这意味着对于数组中的任何位置,索引和插入/删除都具有O(1)的速度,比任何其他列表实现更好。 我的问题是...

12得票1回答
Linux(x86-64)中支持多个巨页面大小吗?

Linux系统在x86-64架构下是否支持多个大页大小(例如除4KB基本页大小外的2MB和1GB大小)? 如果是,是否有一种方法可以指定给定分配使用哪个大页大小? 换句话说,我的问题是,在执行mmap()时是否使用了"MAP_HUGETLB"标志,它将映射默认大小的巨大页面分配。是否有任何方式...

12得票1回答
在x86-64架构中测量TLB未命中处理成本

我希望评估在运行Linux的x86-64(Intel Nehalem)机器上,由于TLB缺失而导致的性能开销。我希望通过使用一些性能计数器来获得这个估计值。请问有哪些指针可以指导我如何最好地进行这个估计呢? 谢谢 Arka