首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

IA-64 Linux存储管理(1)

IA-64 Linux存储管理(1)

一 引言Intel公司的IA-64架构是一种经济高效、伸缩自如、性能卓越的64位计算平台。从技术角度看,与一般处理器采用的超标量技术不同,IA-64架构的主要特色是采用EPIC结构。EPIC结构利用编译器挖掘应用程序的指令级并行性,并通过生成的机器语言以显式方式指导硬件执行程序,降低处理器硬件的复杂度,并通过编译软件挖掘出更多、更大范围内的指令级并行,EPIC架构代表了当前处理器设计的新思想。
Intel公司已成功推出安腾和安腾2处理器,安腾2处理器在SPECfp2000测试中的性能表现非常突出,仅在SPECfp2000 Peak测试中略微落后于Alpha21364,在SPECfp2000 Base的测试中则名列榜首。与此同时Intel公司非常注重IA-64架构操作系统的开发,早在1999年,Intel公司就联合HP、SGI、RedHat、VA Linux和IBM启动了Intel IA-64的Trillian项目,该项目旨在完成Linux在IA-64平台的移植和优化,许多成员为该项目做出了贡献,如HP完成内核,IBM完成性能分析工具和评测,Intel完成内核和EFI(Extensible Firmware Interface),RedHat完成GNUPRO开发工具,SGI完成编译器和kdb等。目前,Red Hat、TurboLinux、Caldera和SuSe都已发布了支持IA-64架构的Linux版本,Linux已成为支持IA-64架构的重要操作系统,HP公司的David Mosberger维护和管理IA-64 Linux项目,并已融入到Linux内核版本中。
二 IA-64 Linux地址空间划分从用户角度看,Linux进程的虚地址是线性的,它分为两部分:内核空间和用户空间。用户空间占据地址的低部分,从0到TASK_SIZE(TASK_SIZE的值是与具体的硬件平台相关的,在include/asm/processor.h中定义),剩余部分为内核空间。用户空间对进程是私有的,该地址由进程的页表维护管理,内核空间是所有进程共享的。在用户态下运行时,只可以访问用户空间,对内核空间的读/写/执行都将导致保护冲突故障,这可以防止出错或恶意的用户代码破坏内核;在内核态运行,则可以访问用户和内核空间。
IA-64架构支持64位虚地址空间,它将64位虚地址空间分成8个相等的区,每个区2048P字节大小,用虚地址的高3位(61-63位)表示区号。如图1所示
图1  IA-64 虚地址空间目前应用对虚地址的需求还没有达到全64位,因此实现时并不需要支持全64位虚地址,IMPL_VA_MSB常量用于决定未实现的虚地址空间范围,它的值可以在50-60,IMPL_VA_MSB+1至60是未实现的虚地址位,未实现的地址位通过虚地址的低地址位符合扩展而成,如果IMPL_VA_MSB值小于60,则符合扩展将某个区的虚地址空间分成两部分,未实现部分在中间,如图2所示(IMPL_VA_MSB=50)。对未实现部分的访问是不允许的,如果是用户态的访问,则产生非法指令错;如果是核心态的访问,则操作系统内核崩溃。
Linux/IA-64用户空间大小仍旧由TASK_SIZE常量所定义,在IA-64中使用0-4区作为用户空间,5-7区作为核心空间,PAGE_OFFSET常量指向第7区,如图3所示。内核空间可以进一步划分为页表映射段和对等映射段。页表映射段是由内核页表映射的,主要用于实现内核的vmalloc区域,内核用vmalloc区域实现虚地址连续的大内存块分配,该区域的地址范围由VMALLOC_START和VMALLOC_END决定的。对等映射段包含Linux的内核,如内核的正文段、数据段和栈段。对等映射是非常特殊的,该段的虚地址可以直接与物理地址映射,映射公式非常简单,通常是虚地址直接减一个基地址(如,PAGE_OFFSET)就得到物理地址。
图3 IA-64 Linux地址空间划分在核心空间中,7区实现Cache的对等映射,6区实现非Cache的对等映射,5区实现内核页表映射段。5区中的第一页称为guard页,该页不被映射,对该页的任何访问都将产生一次页故障,该页用于在用户空间和核心空间数据拷贝时的快速权限检查。第二页称为gate页,用于支持核心和用户级的转换。第三页称为per-CPU页,它提供每个CPU的本地信息,用于多处理器系统。5区中剩余部分用于vmalloc区,从VMALLOC_START到VMALLOC_END。Linux/IA-64中各区的特性如下表所示,
区号使用页大小范围映射方式7Cache256MB全局对等6非Cache256MB全局对等5vmalloc, guard, gate8K全局页表4栈段8K进程页表3数据段8K进程页表2正文段8K进程页表1共享内存8K进程页表0IA-32模拟8K进程页表
Linux/IA-64基于区的地址空间划分与传统的X86体系结构不同,具有以下优势:(1)可以充分利用IA-64提供的支持多种物理页大小特性,通过区号实现不同页大小的区,如,操作系统内核代码和数据在7区,采用256MB大小的页,用户进程的正文段在2区,采用8KB大小的页,从而有效节约系统的硬件资源,提高系统性能。(2)便于应用程序的扩展。用户进程的正文段、数据段、栈段在不同的区,而每个区之间相差2048P字节,因此正文段或数据段的扩展不会引起各段之间的地址重叠。(3)便于实现基于区的共享和保护。
返回列表