当前位置: 首页 > news >正文 皮具网站建设服装网站微信小程序服务器费用 news 2025/11/1 22:33:01 皮具网站建设服装网站,微信小程序服务器费用,现在建网站可以拖拉式的吗,wordpress 主题 小工具学习体系结构 - AArch64内存管理 Learn the architecture - AArch64 memory management Version 1.2 个人的英语很一般#xff0c;对拿不准的翻译校准在后面添加了英文原文。 1、 概述 本指南介绍了AArch64中的内存转换#xff0c;这是内存管理的关键。它解释了如何将虚拟地…学习体系结构 - AArch64内存管理 Learn the architecture - AArch64 memory management Version 1.2 个人的英语很一般对拿不准的翻译校准在后面添加了英文原文。 1、 概述 本指南介绍了AArch64中的内存转换这是内存管理的关键。它解释了如何将虚拟地址转换为物理地址、转换表格式以及软件如何管理转 换转译后备缓冲器TLB。 这些信息对于任何正在开发底层代码的人都很有用比如启动代码或驱动程序。它与任何正在编写设置或管理内存管理单元MMU代码的人特别相关。 在本指南的最后您可以检查您的知识。您将了解如何将虚拟地址转换为物理地址。您将能够命名不同的地址空间并描述地址空间如何映射到翻译的各个阶段。您还将了解软件何时必须执行TLB维护以及TLB维护命令的语法。 2、 什么是内存管理 内存管理描述了如何控制对系统中内存的访问。每次操作系统或应用程序访问内存时硬件都会执行内存管理。内存管理是一种为应用程序动态分配内存区域的方法。 为什么需要内存管理 应用程序处理器被设计为运行一个丰富的操作系统如Linux并支持虚拟内存系统。在处理器上执行的软件只能看到虚拟地址而处理器会将其转换为物理地址。这些物理地址被呈现给内存系统并指向内存中的实际物理位置。 3、虚拟地址和物理地址 使用虚拟地址的好处是它允许管理软件如操作系统OS来控制呈现给软件的内存的视图。操作系统可以控制什么内存是可见的该内存是可见的虚拟地址以及允许对该内存的访问。这允许操作系统能够对应用程序沙盒化从另一个应用程序中隐藏一个应用程序的资源并提供来自底层硬件的抽象。 使用虚拟地址的一个好处是操作系统可以将内存的多个碎片物理区域作为单个连续的虚拟地址空间呈现给应用程序。 虚拟地址也有利于软件开发人员他们在编写应用程序时将不知道系统的确切内存地址。有了虚拟地址软件开发人员就不需要关心物理内存了。应用程序知道应该由操作系统和硬件一起工作执行地址转换。 事实上每个应用程序都可以使用自己的一组虚拟地址这些地址将映射到物理系统中的不同位置。随着操作系统在不同的应用程序之间切换时它会重新编程映射关系。这意味着当前应用程序的虚拟地址将映射到内存中正确的物理位置。虚拟地址通过映射被转换为物理地址。虚拟地址和物理地址之间的映射存储在转换表有时也称为页表中如下图所示 转换表在内存中由软件管理通常是操作系统或管理程序。翻译表不是静态的这些表可以根据软件更改的需要进行更新。这将更改虚拟地址和物理地址之间的映射。 4、内存管理单元MMU 内存管理单元MMU负责将软件使用的虚拟地址转换为内存系统中使用的物理地址。 MMU包含以下内容 表行走单元The table walk unit它包含从内存中读取转换表的逻辑翻译后备缓冲区TLBs它缓存最近使用的翻译 由软件发布的所有内存地址都是虚拟的。这些内存地址被传递给MMUMMU检查TLB是否有最近使用的缓存转换。如果MMU没有找到最近缓存的转换表行走单元将从内存中读取适当的表项或条目如下所示 在进行内存访问之前一个虚拟地址必须被转换为一个物理地址因为我们必须知道我们正在访问的是哪个物理内存位置。这种转换的需求也适用于缓存的数据因为在Armv6和更高版本的处理器上数据缓存使用物理地址经过物理标记的地址来存储数据。因此在完成缓存查找之前必须转换地址。 架构是一种行为规范。缓存的行为必须好像它们具有物理标记。实现可能采用不同的方法只要这不是软件可见的。 表项Table Entry 转换表的工作原理是将虚拟地址空间划分为相同大小的Block并为每个块在表中提供一个 Entry。 表中的 Entry 0 提供 Block 0 的映射Entry 1提供 Block1 的映射以此类推。每个条目包含相应的物理内存块的地址以及访问物理地址时使用的属性。 表查找Table look up 当发生转换时会发生表查找。当发生转换时软件发出的虚拟地址将被一分为二如图所示 此图显示了一个单级查找。 图中标记为 “Which entry” 的高位告诉您要查看哪个块条目并且它们被用作表中的索引。此输入块包含该虚拟地址的物理地址。 多级转换Multilevel translation 在单层查找中虚拟地址空间被分割成相同大小的块。事实上使用表的层次结构。 第一个表Level 1 table将虚拟地址空间分成大块。这个表中的每个条目都可以指向一个大小相同的物理内存块也可以指向另一个表该表将该块细分为更小的块。我们将这种类型的表称为“多层表”。在这里我们可以看到一个有三个层次的多级表的例子 在Armv8-A中级别的最大数量是4个级别编号为0到3。 这种多级方法允许描述更大的块和更小的块。大块和小块的特征如下 大块比小块需要更少的读取级别来翻译。此外大块在TLB中缓存更有效小块给出了软件对内存分配的细粒度控制。然而小块在TLB中缓存的效率较低。缓存效率低是因为小块需要通过级别进行多次读取才能进行翻译。 为了管理这种权衡操作系统必须平衡使用较大映射的效率和使用较小映射的灵活性以获得最佳性能。 处理器在启动表查找时并不知道转换的大小。处理器通过执行表行走来计算正在转换的块的大小。 5、 地址空间 在AArch64中有几个独立的虚拟地址空间。此图显示了这些虚拟地址空间 该图显示了三个虚拟地址空间 Non-secure EL0 and EL1Non-secure EL2EL3 每个虚拟地址空间都是独立的并且都有自己的设置和表。我们经常称这些设置和表为“翻译机制”。 Secure EL0、Secure EL1和Secure EL2也有虚拟地址空间但它们没有显示在图中。 在Armv8.4-A中添加了对Secure EL2的支持。 因为存在多个虚拟地址空间所以指定地址所在的地址空间很重要。例如NS.EL2:0x8000是指在 Non-secure EL2虚拟地址空间中的地址0x8000。 该图还显示了来自 Non-secure EL0和Non-secure EL1的虚拟地址都经过了两组表。这些表支持虚拟化并允许虚拟机管理程序hypervisor虚拟化虚拟机VM所看到的物理内存的视图。 Armv9-A支持上述针对Armv8-A的所有虚拟地址空间。Armv9-A引入了可选的领域管理扩展RME。当实现RME时还存在额外的翻译机制 Realm EL1 and EL0Realm EL2 and EL0Realm EL2 在虚拟化中我们称由操作系统控制的翻译称为Stage 1。Stage 1的表将虚拟地址转换为中间物理地址IPAs。在阶段1中操作系统认为IPA是物理地址空间。然而管理程序监控程序hypervisor控制着第二组翻译我们称之为Stage 2。这第二组翻译将IPA转换为物理地址。此图显示了这两组翻译的工作原理 虽然在表格格式上有一些细微的差异但Stage 1和Stage 2的翻译过程通常是相同的。 在Arm中我们在许多示例中都使用了地址0x8000。0x8000也是使用Arm链接器armlink进行链接的默认地址。这个地址来自一台早期的微型计算机BBC Micro Model B它在地址0x8000处有ROM和侧面的RAM。BBC Micro Model B是由一家名为Acorn的公司建造的该公司开发了Acorn RISC MachineARM后来成为Arm。 物理地址Physical Addresses 除了多个虚拟地址空间外AArch64还具有多个物理地址空间PAS Non-secure PAS0Secure PASRealm PASRealm PASArmv9-A onlyRoot PASArmv9-A only 虚拟地址可以映射到哪个物理地址空间取决于处理器的当前安全状态。下面的列表显示了安全状态及其对应的虚拟地址映射目标 Non-secure state虚拟地址只能映射到 Non-scure 的物理地址Secure state虚拟地址可以映射到 Secure 或 Non-secure 的物理地址Realm state虚拟地址可以映射到 Realm 或 Non-secure 的物理地址Root state虚拟地址可以映射到任何物理地址空间。 当处于具有多个物理地址空间可见性的安全状态时转换表条目控制使用哪个输出的物理地址空间。下图显示了多个物理地址空间的映射 地址大小Address sizes AArch64是一个64位的架构但这并不意味着所有的地址都是64位的。 虚拟地址的大小 虚拟地址以64位的格式存储。因此加载指令LDR和存储指令STR中的地址总是在 X寄存器 中指定。然而并非X寄存器中的所有地址都有效。 此图显示了AArch64中的虚拟地址空间的布局 EL0/EL1虚拟地址空间有两个区域内核空间和应用程序空间。这两个区域显示在图的左侧内核空间在顶部应用程序空间被标记为“User Space”在地址空间的底部。内核空间和用户空间有单独的转换表这意味着它们的映射可以保持独立。 在所有其他异常级别的地址空间的底部有一个单个区域。这个区域显示在图表的右侧是一个没有文本的方框。 如果将HCR_EL2.E2H设置为1则将启用主机操作系统在EL2中运行的配置以及主机操作系统的应用程序在EL0中运行的配置。在这种情况下EL2也有一个上区域和一个下区域。 地址空间的每个区域具有可达52位的大小。然而每个区域都可以独立地缩小到一个更小的尺寸。TCR_ELx寄存器中的TnSZ字段控制着虚拟地址空间的大小。例如此图显示了TCR_EL1控制EL0/EL1虚拟地址空间 虚拟地址大小编码为 virtual address size in bytes 264-TCR_ELx.TnSZ 虚拟地址的大小也可以表示为地址位的数量 Number of address bits 64 - TnSZ 因此如果TCR_EL1.SZ1被设置为32EL0/EL1虚拟地址空间中的内核区域的大小为232字节0xFFFF_FFFF_0000_0000到0xFFFF_FFFF_FFFF_FFFF。任何超出配置范围的地址在访问时将产生异常。这种配置的优点是我们只需要描述尽可能多的地址空间这就节省了时间和空间。例如假设OS内核需要1GB的地址空间30位的地址大小来实现其内核空间。如果操作系统将T1SZ设置为34则只创建描述1GB的翻译表条目如64 - 34 30。 所有的Armv8-A实现都支持48位的虚拟地址。支持52位虚拟地址是可选的并由ID_AA64MMFR2_EL1报告。在编写时还没有一个Arm Cortex-A处理器支持52位虚拟地址。 物理地址的大小 物理地址的大小是实现定义IMPLEMENTATION DEFINED的最多52位。ID_AA64MMFR0_EL1寄存器报告由处理器实现的大小。对于Arm Cortex-A处理器这通常是40位或44位。 在Armv8.0-A中一个物理地址的最大大小是48位。这在Armv8.2-A中被扩展到52位。 中间物理地址的大小 如果您在转换表条目中指定的输出地址大于已实现的最大值则内存管理单元MMU将产生一个异常作为地址大小错误。 IPA空间的大小可以进行与虚拟地址空间相同的配置。VTCR_EL2.T0SZ控制大小。可以配置的最大大小与处理器支持的物理地址大小相同。这意味着您不能配置比所支持的物理地址空间更大的IPA空间。 地址空间标识符 - 使用已拥有的进程来标记翻译 许多现代操作系统的应用程序似乎都运行在同一个地址区域这就是我们所描述的用户空间。事实上不同的应用程序需要不同的映射。这意味着例如VA 0x8000的翻译取决于当前正在运行的哪个应用程序。 理想情况下我们希望不同应用程序的翻译在翻译后备缓冲区TLBs中共存以防止在上下文切换上需要TLB失效。但是处理器如何知道要使用哪个版本的VA 0x8000翻译呢在Armv8-A中答案是地址空间标识符ASID。 对于EL0/EL1虚拟地址空间可以使用转换表项的属性字段中的nG位将转换标记为全局(G)或非全局nG。例如内核映射是全局翻译而应用程序映射是非全局翻译。全局翻译应用于当前正在运行的任何应用程序。非全局翻译仅适用于特定的应用程序。 非全局映射在TLB中用ASID进行标记。在TLB查找中将TLB条目中的ASID与当前选择的ASID进行比较。如果它们不匹配则不使用该TLB条目。此图显示了内核空间中没有ASID标记的全局映射和用户空间中带有ASID标记的非全局映射 该图显示多个应用程序的TLB条目允许在缓存中共存并且ASID决定使用哪个条目。 ASID存储在两个TTBRn_EL1寄存器中的一个。TTBR0_EL1通常用于用户空间。因此单个寄存器更新可以同时更改ASID和它所指向的转换表。 ASID标记也可以在EL2中使用当HCR_EL2.E2H1。 虚拟机标识符 - 使用所拥有的虚拟机来标记翻译 EL0/EL1翻译也可以用虚拟机标识符VMID进行标记。VMIDs 允许来自不同VM的翻译在缓存中共存。这类似于ASIDs 对翻译来自不同应用程序的工作方式。事实上这意味着一些翻译将同时被标记为VMID和ASID并且两者都必须匹配才能使用TLB条目。 当安全状态支持虚拟化时EL0/EL1翻译总是用VMID标记即使没有启用Stage 2翻译。这意味着如果您正在编写初始化代码而没有使用系统管理程序hypervisor那么在设置Stage 1 MMU之前设置一个已知的VMID值是很重要的。 通用非私有 Common not Private 如果一个系统包含多个处理器那么在一个处理器上使用的ASID和VMID在其他处理器上是否具有相同的含义 对于Armv8.0-A答案是它们不必意味着相同的东西。不要求软件在多个处理器上以相同的方式使用给定的ASID。例如ASID 5 可能被一个处理器上的计算器使用可能被另一个处理器上的web浏览器使用。这意味着由一个处理器创建的 TLB 条目不能被另一个处理器使用。 事实上软件不太可能在不同的处理器之间使用不同的 ASIDs。软件在给定系统中的所有处理器上以相同的方式使用 ASIDs 和 VMIDs 更为常见。因此Armv8.2-A在转换表基寄存器TTBR中引入了通用非私有CnP位。当设置了CnP位时该软件承诺在所有处理器上以相同的方式使用 ASIDs 和 VMIDs 这允许由一个处理器创建的 TLB 条目被另一个处理器使用。 我们一直在谈论处理器但是从技术上讲我们应该使用 Process ElementPE这个术语。PE是对实现Arm架构的任何机器的通用术语。这很重要因为在处理器之间共享 TLB 是困难的。但是在一个多线程处理器中每个硬件线程都是一个 PE它更希望共享 TLB 条目。 6、 控制地址转换和转换表的格式 在这里我们可以看到翻译表条目所允许的不同格式 为了清晰起见此图没有指定位字段的宽度。您可以在 Arm Architecture Reference Manual Armv8, for Armv8-A architecture profile: The VMSAv8-64 translation table format descriptors 中找到这个信息。 每个条目是64位底部的两个位决定了条目的类型。 请注意某些表条目仅在特定的级别上有效。表的最大级别数为4个这就是为什么没有针对 Level 3或第四级表的表描述符的原因。类似地Level 0中也没有块描述符或页面描述符。因为Level 0条目覆盖了很大的虚拟地址空间区域所以允许块没有意义。 Levels 0 - 2 的表描述符的编码与 Level 3 的页面描述符相同。这种编码允许“递归表”它们指向它们自己。这很有用因为它便于计算特定页表条目的虚拟地址以便可以更新它。 7、 翻译颗粒 翻译颗粒是可以描述的最小的内存块。没有更小的可以描述只有更大的块这是颗粒的倍数。 AArch64支持三种不同的颗粒尺寸 4KB、16KB和64KB。 处理器所支持的颗粒大小是由 ID_AA64MMFR0_EL1 定义并报告的实现。所有的 Arm Cortex-A 处理器都支持4KB和64KB。所选的颗粒是在最新级别表中可以描述的最小块。也可以描述更大的块。此表显示了基于所选颗粒的每个级别表的不同块大小 在引入 Armv9.2-A 和 Armv8.7-A 之前对使用52位地址有限制。当所选颗粒为4KB或16KB时最大虚拟地址区域大小为48位。同样地输出物理地址被限制为48位。只有当使用64KB的颗粒时才能使用完整的52位。 TCR_EL1 有两个独立的字段来控制内核空间的颗粒大小和用户空间的虚拟地址范围。这些字段对于内核空间称为TG1对于用户空间称为TG0。程序员面临的一个潜在问题是这两个字段有不同的编码。 地址转换的起始级别 颗粒和虚拟地址空间的大小一起控制着地址转换的起始级别。 上一个表总结了每级表中每个颗粒的块大小由单个条目所覆盖的虚拟地址范围的大小。从块的大小中您可以计算出虚拟地址的哪些位被用来索引表的每个级别。 让我们以4KB的颗粒为例。此图显示了用于索引一个4KB颗粒的不同级别表的位 假设对于一个配置您将虚拟地址空间的大小 TCR_ELx.T0SZ 设置为32。然后虚拟地址空间的大小以地址位计算计算为 64-T0SZ 32 位地址空间地址位31:0 如果我们再看前面的4KB颗粒图Level 0被位 47:39 索引。对于一个32位的地址空间你就没有这些位了。因此您的配置的初始转换级别是 Level 1。 接下来假设您将 T0SZ 设置为 34 64-T0SZ 30 位地址空间地址位29:0 这次您没有任何用于索引 Level 0 表或 Level 1 表的其他位因此配置的初始转换级别为Level 2 。 如上图所示当虚拟地址空间的大小减小时您需要更少级别的表来描述它。 这些例子是基于使用 4KB 的颗粒。同样的原理也适用于使用16KB和64KB的颗粒但地址位发生了变化。 控制地址转换的寄存器 地址转换由以下系统寄存器的组合控制 SCTLR_ELx M - 启用内存管理单元MMU C - 启用数据和统一缓存 EE - 翻译表行走的字节顺序 TTBR0_ELx 和 TTBR1_ELx BADDR - 翻译表开始位置的物理地址PA或中间物理地址EL0/EL1) ASID - 用于非全局转换的地址空间标识符 TCR_ELx PS/IPS - PA或IPA空间的大小最大输出地址大小 TnSZ - 表中所覆盖的地址空间的大小 TGn - 颗粒大小 SH/IRGN/ORGN - MMU表行走所使用的可访问性和可共享性 TBln - 禁用表行走到特定的表 MAIR_ELx Attr - 控制 Stage1 表中的类型和可缓存性。 MMU 禁用 当在翻译阶段禁用MMU时所有地址都是平面映射的。平面映射表示输入地址和输出地址相同。 8、 翻译后备缓冲区TLBs的维护 翻译后备缓冲区TLBs缓存最近使用的翻译。这种缓存允许在后续查找中翻译被再次使用而不需要重读表。 TLBs 是翻译的缓存而不是翻译表的缓存。区别是微妙的。有几个寄存器字段控制如何解释翻译表条目。TLB 条目中包含的是根据表被遍历时的配置所给出的翻译表条目的解释。在Arm架构参考手册Arm ARM中这样的寄存器字段被描述为 “允许在TLB中缓存”。 如果更改了转换表条目或影响条目解释方式的控件则需要使TLB中受影响的条目无效。如果您不使这些条目无效那么处理器可能会继续使用旧的翻译。 处理器不允许缓存到导致以下任何故障的TLB的转换 转换故障未映射的地址地址大小错误地址超出范围访问标志故障 因此在第一次映射地址时不需要发出TLB无效。但是如果您想执行以下任何操作则需要发出一个TLB无效 取消映射地址 获取一个以前有效的地址或已映射的地址并将其标记为错误地址。 更改一个地址的映射 更改输出地址或任何属性。例如将地址从只读权限更改为读写权限。 更改解释表的方式 这种情况并不常见。但是例如如果颗粒大小改变了那么对表的解释也会改变。因此一个TLB无效将是必要的。 TLB操作的格式 TLBI 指令用于使 TLBs 中的条目无效。此指令的语法为 TLBI type level {IS|OS} {, xt } 其中 type 哪些条目无效 All - 所有条目 VA - 匹配在 Xt 的 VA 和 ASID 的条目 [ Entry matching VA and ASID in Xt ] VAA - 匹配在 Xt 中的 VA 任何 ASID 的条目 ASID - 匹配在 Xt 中的 ASID 的任何条目 更多 level 要操作的地址空间 E1 EL0/1虚拟地址空间 E2 EL2虚拟地址空间 E3 EL3虚拟地址空间 IS|OS 无论一个操作是内部可共享IS还是外部可共享OS 当 IS 添加到操作时它将广播到内部共享域中的其他核心 当 OS 添加到操作时它将广播到外部共享域的其他核心在Armv8.4-A中添加 Xt 操作哪个地址或ASID 仅用于按地址或ASID进行的操作 例如考虑一个正在更新其内核转换表中的条目的操作系统OS。一个典型的 TLB 无效序列应该是这样的 STR X1, [X5] // Write to translation table entry DSB ISH // Barrier instructions - not covered in this guide TLBI VAAE1IS , X0 // Invalidate VA specified by X0, in EL0/1// virtual address space for all ASIDs DSB ISH // Barrier instructions - not covered in this guide ISB // Synchronize context on this processor9、 地址翻译指令 地址转换AT指令允许软件查询特定地址的翻译。将翻译结果以及其属性写入到物理地址寄存器 PAR_EL1 中 AT指令的语法允许您指定要使用的翻译机制。例如EL2可以查询EL0/EL1的翻译机制。但是EL1不能使用AT指令来查询EL2的转换机制因为这是对违反特权的。 如果所请求的翻译会导致错误则不会生成异常。相反将生成的故障类型将记录在 PAR_EL1 中。 10、 检查你的知识 Q地址翻译的 stage 和 level 有什么区别 AStage 是将输入地址转换为输出地址的过程。对于 Stage 1这是从 VA 到 IPA 的过程对于Stage 2从 IPA 到 PA 的过程。Level 指的是给定翻译阶段的表。这也是如何将更大的块细分为更小的块。 Q一个物理地址的最大大小是多少 A物理地址空间的最大大小是 IMPLEMENTATION DEFINED最多52位自Armv8.2-A。 Q哪个寄存器字段控制虚拟地址空间的大小 ATCR_ELx.TnSZ或 VTCR_EL2.T0SZ 为 Stage 2。 Q什么是翻译颗粒支持的尺寸是多少 A它是可以描述的最小的内存块。支持的尺寸分别为4KB、16KB和64KB。 QTLBI 的 ALLE3 是做什么的 A它会使EL3虚拟地址空间中的所有TLB条目无效。 Q导致翻译故障的翻译表项能否缓存在TLB中 A不它不能存储在TLBs中。 Q当禁用MMU时地址将如何映射 A地址是平面映射的因此输入地址和输出地址是相同的。 Q什么是 ASID 什么时候 TLB 条目包含一个 ASID AASID 是一个地址空间标识符它标识与翻译关联的应用程序。非全局映射nG1在 TLBs 中用 ASID 进行标记。 文章转载自: http://www.morning.npmx.cn.gov.cn.npmx.cn http://www.morning.skkmz.cn.gov.cn.skkmz.cn http://www.morning.mehrim.com.gov.cn.mehrim.com http://www.morning.fwnyz.cn.gov.cn.fwnyz.cn http://www.morning.tnzwm.cn.gov.cn.tnzwm.cn http://www.morning.pttrs.cn.gov.cn.pttrs.cn http://www.morning.shxrn.cn.gov.cn.shxrn.cn http://www.morning.mtcnl.cn.gov.cn.mtcnl.cn http://www.morning.zqxhn.cn.gov.cn.zqxhn.cn http://www.morning.jrlgz.cn.gov.cn.jrlgz.cn http://www.morning.zcnwg.cn.gov.cn.zcnwg.cn http://www.morning.pmnn.cn.gov.cn.pmnn.cn http://www.morning.gfqjf.cn.gov.cn.gfqjf.cn http://www.morning.nqmkr.cn.gov.cn.nqmkr.cn http://www.morning.wdskl.cn.gov.cn.wdskl.cn http://www.morning.nqyfm.cn.gov.cn.nqyfm.cn http://www.morning.cpfbg.cn.gov.cn.cpfbg.cn http://www.morning.zlxkp.cn.gov.cn.zlxkp.cn http://www.morning.lnwdh.cn.gov.cn.lnwdh.cn http://www.morning.mfnjk.cn.gov.cn.mfnjk.cn http://www.morning.zknxh.cn.gov.cn.zknxh.cn http://www.morning.qkrzn.cn.gov.cn.qkrzn.cn http://www.morning.qpljg.cn.gov.cn.qpljg.cn http://www.morning.msmtf.cn.gov.cn.msmtf.cn http://www.morning.jcpq.cn.gov.cn.jcpq.cn http://www.morning.sbjbs.cn.gov.cn.sbjbs.cn http://www.morning.jcffp.cn.gov.cn.jcffp.cn http://www.morning.fbqr.cn.gov.cn.fbqr.cn http://www.morning.rlnm.cn.gov.cn.rlnm.cn http://www.morning.pswqx.cn.gov.cn.pswqx.cn http://www.morning.wtlyr.cn.gov.cn.wtlyr.cn http://www.morning.tpqzs.cn.gov.cn.tpqzs.cn http://www.morning.qfcnp.cn.gov.cn.qfcnp.cn http://www.morning.lffgs.cn.gov.cn.lffgs.cn http://www.morning.rjmd.cn.gov.cn.rjmd.cn http://www.morning.hjlsll.com.gov.cn.hjlsll.com http://www.morning.bhgnj.cn.gov.cn.bhgnj.cn http://www.morning.rccpl.cn.gov.cn.rccpl.cn http://www.morning.dlurfdo.cn.gov.cn.dlurfdo.cn http://www.morning.zdhnm.cn.gov.cn.zdhnm.cn http://www.morning.rqzyz.cn.gov.cn.rqzyz.cn http://www.morning.nrddx.com.gov.cn.nrddx.com http://www.morning.zjqwr.cn.gov.cn.zjqwr.cn http://www.morning.ryywf.cn.gov.cn.ryywf.cn http://www.morning.wfjyn.cn.gov.cn.wfjyn.cn http://www.morning.jzklb.cn.gov.cn.jzklb.cn http://www.morning.sqhtg.cn.gov.cn.sqhtg.cn http://www.morning.kpbgvaf.cn.gov.cn.kpbgvaf.cn http://www.morning.ckbmz.cn.gov.cn.ckbmz.cn http://www.morning.ggtkk.cn.gov.cn.ggtkk.cn http://www.morning.xhfky.cn.gov.cn.xhfky.cn http://www.morning.tnthd.cn.gov.cn.tnthd.cn http://www.morning.zqzzn.cn.gov.cn.zqzzn.cn http://www.morning.spkw.cn.gov.cn.spkw.cn http://www.morning.hcszr.cn.gov.cn.hcszr.cn http://www.morning.bktly.cn.gov.cn.bktly.cn http://www.morning.kldtf.cn.gov.cn.kldtf.cn http://www.morning.lnyds.cn.gov.cn.lnyds.cn http://www.morning.syhwc.cn.gov.cn.syhwc.cn http://www.morning.jbysr.cn.gov.cn.jbysr.cn http://www.morning.yongkangyiyuan-pfk.com.gov.cn.yongkangyiyuan-pfk.com http://www.morning.wqrk.cn.gov.cn.wqrk.cn http://www.morning.wklmj.cn.gov.cn.wklmj.cn http://www.morning.mygbt.cn.gov.cn.mygbt.cn http://www.morning.qpqb.cn.gov.cn.qpqb.cn http://www.morning.nmngg.cn.gov.cn.nmngg.cn http://www.morning.tjsxx.cn.gov.cn.tjsxx.cn http://www.morning.qyqdz.cn.gov.cn.qyqdz.cn http://www.morning.fbrshjf.com.gov.cn.fbrshjf.com http://www.morning.zcwwb.cn.gov.cn.zcwwb.cn http://www.morning.nkqrq.cn.gov.cn.nkqrq.cn http://www.morning.xlclj.cn.gov.cn.xlclj.cn http://www.morning.jcbmm.cn.gov.cn.jcbmm.cn http://www.morning.tqdlk.cn.gov.cn.tqdlk.cn http://www.morning.nrcbx.cn.gov.cn.nrcbx.cn http://www.morning.jqbmj.cn.gov.cn.jqbmj.cn http://www.morning.ruyuaixuexi.com.gov.cn.ruyuaixuexi.com http://www.morning.ngcsh.cn.gov.cn.ngcsh.cn http://www.morning.rbxsk.cn.gov.cn.rbxsk.cn http://www.morning.vaqmq.cn.gov.cn.vaqmq.cn 查看全文 http://www.tj-hxxt.cn/news/269218.html 相关文章: 有哪些网站可以免费的实时在线街景地图 织梦做的网站前面有不安全文登建设局官方网站 哪个公司做的网站好个人网页设计作品论文 怎么做一个网站出来如何制作公司网页百度发布 请人做网站安全潍坊住房公积金官网 购物网站设计流程图公司简介优秀文案 酷炫网站柳州论坛网站建设 河南省建设安全监督站的网站三亚招聘网 网站建设数据表设计 性别在阿里巴巴国际网站上需要怎么做 前端做项目的网站资源宝安中心做网站 免费门户网站源码网站建设管理相关规定 个人营销型网站厦门网站建设哪家便宜 中国建设银行网站能解密码在线做漫画网站 网站运营技巧黄骅港港务集团 大理市住房和城乡建设局网站计算机专业学校全国排名 合肥网站设计服小程序ui设计 服务器网站搬家余姚做轴承网站 功能多的网站模板 中文内容重庆十大装饰公司 网站的后台怎么做的门户网站建设需求文档 横向网站个人网站seo 做外贸soho网站的公司吗有网站开发经验怎么写简历 个人做广播网站需要注意什么网站开发管理 wordpress右浮动图永康信誉好关键词优化 wordpress怎么建设网站湖南营销型网站建设推广 icp网站备案核验单下载可以免费推广的平台 有了服务器怎么做网站上海网站制作顾 怎么才能有自己的网站做免费网站推广开头语 帝国建设网站下花园区住房和城乡建设局网站 建设市场监督管理网站网站内部的信息安全建设 网站开发需要哪些能力陕西网站建设哪家专业