英特尔处理器芯片爆出了一个根本性的设计缺陷,已迫使业界大刀阔斧地重新设计 Linux 内核和 Windows 内核,旨在消除这个芯片层面的安全缺陷。
广大程序员正竞相全面改动开源 Linux 内核的虚拟内存系统。与此同时,预计微软会在即将到来的周二补丁日( Patch Tuesday )公开宣布对其 Windows 操作系统所作的必要改动:这些更新已发给在去年 11 月和 12 月运行快速更新通道( fast-ring )的 Windows Insider 版本的 beta 测试人员。
至关重要的是,针对 Linux 和 Windows 的这些更新将会给英特尔产品的性能带来影响。实际影响仍在测试当中,不过我们估计性能大概会因此降低 5%到 30%,这取决于具体的任务和处理器型号。最近面市的英特尔芯片拥有 PCID 等功能特性,可以缓解性能受影响这个问题。
https://f11.baidu.com/it/u=3351647494,3190822991&fm=173&s=0D82FD1205585DC80CE525DE0000C0B3&w=627&h=320&img.JPEG&access=215967316据悉,该缺陷存在于过去十年生产的现代英特尔处理器中。它让普通的用户程序(从数据库应用软件到互联网浏览器中的 JavaScript )在一定程度上得以发现受保护内核内存里面的数据。
解决方法就是,使用所谓的内核页表隔离( KPTI )功能,将内核的内存与用户进程完全分离开来。Linux 内核开发团队一度考虑过 Forcefully Unmap Complete Kernel With Interrupt Trampolines (又名 FUCKWIT ),让你了解这个问题对开发人员来说有多烦人。
只要运行中的程序需要执行任何有用的操作,比如写入到文件或建立网络连接,它就要暂时将处理器的控制权交给内核以便执行任务。为了尽可能快速而高效地从用户模式切换到内核模式,再切换回到用户模式,内核存在于所有进程的虚拟内存地址空间中,不过这些程序看不见内核。需要内核时,程序进行系统调用,处理器切换到内核模式,进入内核。完成后,CPU 被告知切换回到用户模式,重新进入进程。在用户模式下,内核的代码和数据依然看不见,但存在于进程的页表中。
不妨把内核想象成坐在云上的上帝,俯视地球。上帝就在那里,芸芸众生都看不到它,但他们可以向上帝祈祷。
这些 KPTI 补丁将内核移到一个完全分离开来的地址空间,那样不仅运行中的进程看不见它,它甚至根本就不在那里。实际上,不应该需要这个,但英特尔芯片中存在的缺陷显然让内核访问保护机制可以被人以某种方式绕过。
这种分离的缺点在于,针对每次系统调用和来自硬件的每次中断,不断地在两个独立的地址空间之间来回切换,这从时间方面来看开销相当大。这种上下文切换不会瞬间发生,并迫使处理器倒出缓存数据,并从内存重新装入信息。这就增加了内核的开销,减慢了计算机的运行速度。
因此,你那搭载英特尔芯片的机器运行起来会变慢。
微信全文
http://ffff.im/BjVU
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/419831
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.