CLR 全面透彻解析: 使用 CoreCLR 编写 Silverlight
2008-10-26 11:49:13 来源:WEB开发网虽然进程范围的状态是最明显的问题,但在一个进程中并行运行两个 CLR 还会导致其他问题。例如,如果您同时运行了两个 GC,如何防止其中一个 GC 挂起另一个 GC 的线程?此外,空间占用也存在问题:如果在一个进程中加载多个 CLR,每个 CLR 都必须加载代码(这些代码可能都相同),并为其静态变量和托管堆留出相应的空间。
在某些重要的情况下,托管 CoreCLR 需要与桌面运行时并行运行。如果 CoreCLR 和桌面 CLR 不能同时运行,我们将无法编写托管 Web 浏览器控件(该控件可以导航到使用 Silverlight 的网页)的桌面 Windows 窗体或 WPF 应用程序。若要解决这个潜在问题,只需在您的 Windows 计算机上安装依赖于 CLR 的 Silverlight:每次安装 Windows XP SP2 和 Windows Vista® 时,都会随操作系统安装相当新的 CLR。但是,无论您的计算机上安装了哪种版本的 CLR(对于 Mac OS X 来说,即使您的计算机上未安装任何 CLR),只要使所有 Silverlight 代码在 CoreCLR 上运行都必须确保绝对兼容。因此,我们努力使 CoreCLR 可以与桌面 CLR 进程并行运行,我们相信经过我们的努力用户会获得更好的 Silverlight 体验。
CoreCLR 安全模型
核心引擎中的另一个重大更改与新的安全模型有关。注意,一直以来,.NET 开发人员使用代码访问安全性 (CAS) 来阻止不受信任的代码执行特权操作。CAS 功能非常强大,但使用起来相当复杂。它允许用户或管理员使用权限集定义各种代码沙箱,然后将各个程序集映射到这些沙箱中。对于 Silverlight 应用程序,我们只需一个沙箱,该沙箱等效于 Internet Explorer® 用来在网页中运行脚本的沙箱。使用此简化方案,我们可以删除所有的 CAS 策略。
我们也简化了安全执行模型。新的模型基于在 CLR 2.0 版本中引入的一个概念 — 安全透明。透明模型的本质是将代码分为以下三类:透明代码、SafeCritical 代码或关键代码。透明代码的信任级别最低,它无法提升权限或访问计算机上的敏感资源或信息。在 Silverlight 2 中,所有的应用程序代码都是透明代码。关键代码的信任级别最高,它可以通过 P/Invoke 与系统进行交互,甚至可以包含无法验证的代码。对于 Silverlight 2,所有关键代码必须是 Silverlight 平台的一部分。SafeCritical 代码则相当于二者之间的桥梁,借助它,透明代码可以通过调用关键代码来访问系统资源。我们可以将关键代码想象成 Windows 的内核 API;将透明代码想象成用户应用程序代码;而将 SafeCritical 代码想象成用户代码和内核代码之间的 API。
更多精彩
赞助商链接