我正在学习SICP。而且我发现的定义封在SICP是(也许)从其他语言的闭包定义不同。
这是SICP所说的:
创建元素为对的对的能力是列表结构作为表示工具的重要性的本质。我们将此功能称为cons的闭包属性。通常,如果可以使用相同的操作将事物与该对象合并的结果本身进行合并,则用于合并数据对象的操作将满足闭包属性。
我认为这里的闭包更接近于数学中的闭包,而不是我在JavaScript中看到的闭包,这意味着函数可以访问封闭的环境变量。
我错了吗?
例如,我有一个启用了 KVM 的主机操作系统(例如 Ubuntu)。我使用 QEMU 启动虚拟机来运行来宾操作系统(例如 CentOS)。可以说,对于主机操作系统来说,这个VM只是一个进程。因此,从主机的角度来看,它像往常一样处理页面错误(例如,根据需要分配页面框架,根据需要根据活动/非活动列表交换页面)。
这是问题和我的理解。在来宾操作系统中,由于它仍然是一个成熟的操作系统,我认为它仍然具有处理虚拟内存的所有机制。它看到QEMU 提供的一些虚拟化物理内存。我所说的虚拟化物理内存是指客户操作系统不知道它在虚拟机中,并且仍然像在真实物理机上一样工作,但它所拥有的确实是 QEMU 给出的抽象。因此,即使分配了一个页框,如果该页框不在客户页表中,客户操作系统仍然会触发页面错误,然后将某些页面映射到该框架。更糟糕的是,可能会出现双页错误,即客户机在发生页错误时首先分配一些页框,这会触发主机操作系统的页错误。
然而,我也听说过类似浅(或影子)页表的东西,它似乎可以优化这种不必要的双页错误和双页表问题。我还查看了一些其他内核实现,特别是 unikernels,例如OSv、IncludeOS等。我没有找到任何与页面错误和页表机制相关的内容。我确实看到了一些类似的符号page_fault_handler,但没有我在 Linux 内核代码中看到的那么大。在这些 unikernel 实现中,内存管理似乎并不是什么大问题。所以我认为 QEMU/KVM 和一些 Intel 的虚拟化技术已经处理了这个问题。
对这个主题有什么想法吗?或者,如果您对这个问题有一些好的参考文献/论文/资源,或者一些提示将会非常有帮助。
我现在正在学习 C++。这是一种非常复杂的语言,我不确定应该使用哪个功能以及何时使用。
C++ Primer 引入了 RAII 作为确保异常安全的方法。这是否意味着,作为一种良好的行为,当我想使用数组时,我应该将数组放入一个类中以分配和销毁资源。我知道我的想法很简单,或者说很幼稚。
我只是好奇什么是好的 C++ 编码行为。
我知道最后三个字符表示每个人都有 R/W/X 权限。大家都是谁?每个人都包含用户和组成员吗?如果不是,为什么我们需要这样的模式?谁能给我一个我需要的例子吗?