当前位置: 首页 > news >正文

景安做网站教程短期培训班学什么好

景安做网站教程,短期培训班学什么好,网站建设衡水,温州专业网站建设ARM32页表和Linux页表那些奇葩的地方 ARM32硬件页表中PGD页目录项PGD是从20位开始的,但是为何头文件定义是从21位开始? 历史原因:Linux最初是基于x86的体系结构设计的,因此Linux内核很多的头文件的定义都是基于x86的&#xff0c…

ARM32页表和Linux页表那些奇葩的地方

ARM32硬件页表中PGD页目录项PGD是从20位开始的,但是为何头文件定义是从21位开始?

历史原因:Linux最初是基于x86的体系结构设计的,因此Linux内核很多的头文件的定义都是基于x86的,特别是关于PTE页表项里面的很多比特位的定义。因此ARM在移植到Linux时只能参考x86版本的Linux内核的实现。

X86的PGD是从bit22 ~ bit31,总共10bit位,1024页表项。PT页表从bit12 ~ bit 21 ,总共 10 bit位,1024页表项。

ARM的PGD是从bit20 ~ bit31,总共12bit, 4096页表项。PT域从bit12 ~ bit 19,总共8bit,2556页表项。

X86和ARM页表最大的差异在于PTE页表内容的不同。

Linux内核版本的PTE比特位的定义

/** "Linux" PTE definitions for LPAE.** These bits overlap with the hardware bits but the naming is preserved for* consistency with the classic page table format.*/
#define L_PTE_VALID  (_AT(pteval_t, 1) << 0)  /* Valid */
#define L_PTE_PRESENT  (_AT(pteval_t, 3) << 0)  /* Present */
#define L_PTE_USER  (_AT(pteval_t, 1) << 6)  /* AP[1] */
#define L_PTE_SHARED  (_AT(pteval_t, 3) << 8)  /* SH[1:0], inner shareable */
#define L_PTE_YOUNG  (_AT(pteval_t, 1) << 10) /* AF */
#define L_PTE_XN  (_AT(pteval_t, 1) << 54) /* XN */
#define L_PTE_DIRTY  (_AT(pteval_t, 1) << 55)
#define L_PTE_SPECIAL  (_AT(pteval_t, 1) << 56)
#define L_PTE_NONE  (_AT(pteval_t, 1) << 57) /* PROT_NONE */
#define L_PTE_RDONLY  (_AT(pteval_t, 1) << 58) /* READ ONLY */#define L_PMD_SECT_VALID (_AT(pmdval_t, 1) << 0)
#define L_PMD_SECT_DIRTY (_AT(pmdval_t, 1) << 55)
#define L_PMD_SECT_NONE  (_AT(pmdval_t, 1) << 57)
#define L_PMD_SECT_RDONLY (_AT(pteval_t, 1) << 58)

ARM32的PTE比特位的定义

/**   - extended small page/tiny page*/
#define PTE_EXT_XN  (_AT(pteval_t, 1) << 0)  /* v6 */
#define PTE_EXT_AP_MASK  (_AT(pteval_t, 3) << 4)
#define PTE_EXT_AP0  (_AT(pteval_t, 1) << 4)
#define PTE_EXT_AP1  (_AT(pteval_t, 2) << 4)
#define PTE_EXT_AP_UNO_SRO (_AT(pteval_t, 0) << 4)
#define PTE_EXT_AP_UNO_SRW (PTE_EXT_AP0)
#define PTE_EXT_AP_URO_SRW (PTE_EXT_AP1)
#define PTE_EXT_AP_URW_SRW (PTE_EXT_AP1|PTE_EXT_AP0)
#define PTE_EXT_TEX(x)  (_AT(pteval_t, (x)) << 6) /* v5 */
#define PTE_EXT_APX  (_AT(pteval_t, 1) << 9)  /* v6 */
#define PTE_EXT_COHERENT (_AT(pteval_t, 1) << 9)  /* XScale3 */
#define PTE_EXT_SHARED  (_AT(pteval_t, 1) << 10) /* v6 */
#define PTE_EXT_NG  (_AT(pteval_t, 1) << 11) /* v6 */

那X86和ARM的页表差距这么大,软件怎么设计呢?Linux内核的内存管理已经适配了X86的页表项,我们可以通过软件适配的办法来解决这个问题。因此,ARM公司在移植该方案时提出了两套页表的方案。一套页表是为了迎合ARM硬件的真实页表,另一套页表是为了迎合Linux真实的页表。

对于PTE页表来说,一下子就多出了一套页表,一套页表256表项,每个表项占用4字节。为了软件实现的方便,软件会把两个页表合并成一个页表。4套页表正好占用256 * 4 * 4 = 4K的空间。因此,Linux实现的时候,就分配了一个page 来存放这些页表。

这一套方案的话,相当于每个PGD页表项有8字节,包含指向两套PTE页表项的entry。每4个字节指向一个物理的二级页表。

http://www.wangmingla.cn/news/12468.html

相关文章:

  • 免费域名排行榜简述seo和sem的区别与联系
  • 哈尔滨模板建站哪个品牌好域名停靠
  • 信诚网络公司网站网站查询seo
  • 北京网站的建立电商网站策划
  • 深圳市官网网站建设平台抖音推广方案
  • 网站开发课程学习列举网络推广的方式
  • 网易163企业邮箱格式seo去哪里学
  • 电子商务网站建设影响因素seo推广骗局
  • 郑州网站建设服务商我是seo关键词
  • 蚌埠市做网站百度网盘搜索引擎入口在哪
  • 惠州做棋牌网站建设成人电脑培训班附近有吗
  • 下载手机最新版app百度快照优化培训班
  • 专门做网站开发的公司搜索引擎营销的方式
  • 海口做网站费用宁波seo网络推广定制多少钱
  • 网页翻译成中文怎么设置上海外包seo
  • 和拓者设计吧类似的网站百度站长工具查询
  • wordpress重定向传递权重seo是什么平台
  • 帮别人做网站服务器今天热点新闻事件
  • 高密市住房和城乡建设局网站seo模拟点击有用吗
  • 海宁网站建设app推广平台接单渠道
  • 什么渠道做网站建设软件推广平台有哪些
  • 中国做外贸网站有哪些问题黄冈网站推广软件免费下载
  • 藏族网站建设跨境电商平台注册开店流程
  • 怎样做汽车网站建设网络推广员的工作内容
  • app开发与网站开发有何不同sem搜索引擎营销
  • 做网页网站 的公司河南seo关键词排名优化
  • 网站建设 腾网络服务合同
  • 凡科免费建设企业网站靠谱吗sem账户托管外包
  • 西安哪家网络公司做网站微信群免费推广平台
  • 广西柳州网站制作公司怎么建网站详细步骤