1*ccb00ddcSYanteng Si.. SPDX-License-Identifier: GPL-2.0 2*ccb00ddcSYanteng Si.. include:: ../disclaimer-zh_CN.rst 3*ccb00ddcSYanteng Si 4*ccb00ddcSYanteng Si:Original: Documentation/virt/paravirt_ops.rst 5*ccb00ddcSYanteng Si 6*ccb00ddcSYanteng Si:翻译: 7*ccb00ddcSYanteng Si 8*ccb00ddcSYanteng Si 司延腾 Yanteng Si <siyanteng@loongson.cn> 9*ccb00ddcSYanteng Si 10*ccb00ddcSYanteng Si:校译: 11*ccb00ddcSYanteng Si 12*ccb00ddcSYanteng Si 陈飞杨 Feiyang Chen <chenfeiyang@loongson.cn> 13*ccb00ddcSYanteng Si 时奎亮 Alex Shi <alexs@kernel.org> 14*ccb00ddcSYanteng Si 15*ccb00ddcSYanteng Si.. _cn_virt_paravirt_ops: 16*ccb00ddcSYanteng Si 17*ccb00ddcSYanteng Si============ 18*ccb00ddcSYanteng Si半虚拟化操作 19*ccb00ddcSYanteng Si============ 20*ccb00ddcSYanteng Si 21*ccb00ddcSYanteng SiLinux提供了对不同管理程序虚拟化技术的支持。历史上,为了支持不同的虚拟机超级管理器 22*ccb00ddcSYanteng Si(hypervisor,下文简称超级管理器),需要不同的二进制内核,这个限制已经被pv_ops移 23*ccb00ddcSYanteng Si除了。Linux pv_ops是一个虚拟化API,它能够支持不同的管理程序。它允许每个管理程序 24*ccb00ddcSYanteng Si优先于关键操作,并允许单一的内核二进制文件在所有支持的执行环境中运行,包括本机——没 25*ccb00ddcSYanteng Si有任何管理程序。 26*ccb00ddcSYanteng Si 27*ccb00ddcSYanteng Sipv_ops提供了一组函数指针,代表了与低级关键指令和各领域高级功能相对应的操作。 28*ccb00ddcSYanteng Sipv-ops允许在运行时进行优化,在启动时对低级关键操作进行二进制修补。 29*ccb00ddcSYanteng Si 30*ccb00ddcSYanteng Sipv_ops操作被分为三类: 31*ccb00ddcSYanteng Si 32*ccb00ddcSYanteng Si- 简单的间接调用 33*ccb00ddcSYanteng Si 这些操作对应于高水平的函数,众所周知,间接调用的开销并不十分重要。 34*ccb00ddcSYanteng Si 35*ccb00ddcSYanteng Si- 间接调用,允许用二进制补丁进行优化 36*ccb00ddcSYanteng Si 通常情况下,这些操作对应于低级别的关键指令。它们被频繁地调用,并且是对性能关 37*ccb00ddcSYanteng Si 键。开销是非常重要的。 38*ccb00ddcSYanteng Si 39*ccb00ddcSYanteng Si- 一套用于手写汇编代码的宏程序 40*ccb00ddcSYanteng Si 手写的汇编代码(.S文件)也需要半虚拟化,因为它们包括敏感指令或其中的一些代 41*ccb00ddcSYanteng Si 码路径对性能非常关键。 42