Linux内核中启用了CPU新功能

时间:2015-06-18 16:15:46

标签: linux-kernel cpu

如果CPU有一些新功能,Linux内核如何处理这个问题? 根据我的记忆,PAE不需要重建整个系统,Linux似乎只是安装驱动程序和工作。

假设,如果CPU提供更多执行模式,我们是否需要重建整个系统?

如果是这样,为什么PAE在需要重建时不需要重建?

1 个答案:

答案 0 :(得分:1)

Linux内核在不重建内核的情况下可以支持的新功能类型取决于指令集和功能的性质。由于x86提供了一种保存处理器状态的直接方法(以及指示存在多少状态),因此即使添加应用程序级状态的功能也可以与新内核一起使用。

一些ISA提供的软件层可以在某种程度上独立于操作系统;例如,Alpha有PAL(特权架构库)。这样的层可以从操作系统中抽象硬件(有点像BIOS的使用方式),允许操作系统使用该软件执行特定于实现的操作。

显然,即使没有ISA指定的接口,Linux也可以扩展为支持使用模块来提供类似的抽象。因为Linux是开源的,所以提供这样的接口的动力较小,尽管可能对于具有多个系统特化的单个系统映像具有一些优势。原则上dynamic kernel patching可以提供更广泛的扩展,但它主要用于关键(安全/可靠性)更新。通常,如果正在更改硬件,则会重新启动并更新软件。

为了使用这样的接口,在内核编译时需要知道可能受影响的子系统。如果从现有内核中抽象出一个新特性需要大型抽象层软件,那么仅使用新内核通常会更有意义。如果支持新功能需要在抽象层软件和现有内核之间频繁地来回调用,那么性能往往会受到影响。 (Linux在设计哲学中是单片导向的 - 优于性能而不是抽象 - 所以要求最终成为虚拟机管理程序层的东西不太可能具有吸引力,即使增加的复杂性微乎其微。)

如果没有这样的抽象层,在不更改内核的情况下,无法添加添加状态或以其他方式需要新特权操作的更改。原则上,新模式只需要特权启用模式但不添加新状态(例如,模式指示器使用内核写入的保留位作为读取)对其他应用程序是安全的已启用(因为不会修改上下文切换代码)可以使用相对简单的内核模块来支持。

例如,内核模块可用于支持使用新编码在代码页的页表条目中用先前保留的位指示的全新指令编码。由于更改仅限于特定页面,因此内核的核心

不需要特殊支持

由于PAE使用不同的页表条目格式,因此添加支持需要新内核。但是,只要核心内核支持PAE,就可以升级非PAE感知子系统以通过内核模块支持PAE。

新的非特权指令不添加状态或生成新类型的中断/异常(进入特权模式),不需要应用程序软件使用内核支持。

(我甚至不是程序员,更不是操作系统开发人员,因此我不知道Linux是否以内核模块可以添加新的异常处理代码的方式抽象异常处理。理论上,ISA可以定义一个更大的异常处理程序表,保留未使用的条目以支持将来的异常,在这种情况下,允许模块添加新异常类型的处理可能是实用的。当然,如果核心内核允许模块更改任意中断处理程序,任何这样的中断 - 可能包括系统调用 - 都可以指向模块的代码,然后调用核心内核函数来处理未改变的方面。允许模块以这种方式劫持内核似乎是不可取的。)