小编Ben*_*oit的帖子

我应该命名"makefile"还是"Makefile"?

虽然两个名字都可以完成这项工作,但是makefile的正确名称是什么?

GNU`make'主页使用Makefile,我想这是命名它的好方法.在大写字母中键入前M的任何原因?

coding-style makefile gnu-make

30
推荐指数
1
解决办法
6268
查看次数

Python和函数式编程:是否有apply()函数?

Scala有这个 apply()功能.

我是Python的新手,我想知道如何编写以下单行代码:

(part_a, part_b) = (lambda x: re.search(r"(\w+)_(\d+)", x).groups())(input_string)
Run Code Online (Sandbox Code Playgroud)

我会感觉更好:

(part_a, part_b) = input_string.apply(lambda x: re.search(r"(\w+)_(\d+)", x).groups())
Run Code Online (Sandbox Code Playgroud)

从FF的角度来看,我错了吗?Python中有这样的结构吗?

编辑:我知道糟糕挑选的片段.

python functional-programming

7
推荐指数
1
解决办法
192
查看次数

hypervisor guest os中的内存地址转换

假设有这样的代码.

MOV [0x1234], EAX (intel assembly)
Run Code Online (Sandbox Code Playgroud)

假设CPU想要处理此指令.我们假设没有管理程序.我们只是在linux环境中使用普通的x86 CPU(保护模式).

现在,我理解的是,因为0x1234是一个虚拟地址,所以需要将其转换为物理地址.(让我们跳过分段部分)

CPU只是将此地址(0x1234)传递给MMU硬件.MMU遍历页表并使用物理地址访问内存内容.

我对么?

现在让我们假设有一个虚拟机管理程序,这个代码是从客户操作系统运行的.

究竟发生了什么?

我知道虚拟机管理程序提供了另一层页表.但我不明白这究竟是如何运作的.

如果客户代码"MOV [0x1234],EAX"在真实CPU中执行.虚拟地址0x1234将由真实硬件MMU转换.所以我认为必须重写这条指令(0x1234应该在执行代码之前替换为另一个地址),或者被困在管理程序中......

我错了吗?如果我错了,请修正我的理解......

先感谢您.

linux memory virtualization virtual-machine virtual-memory

4
推荐指数
1
解决办法
1911
查看次数