Xen的記憶體空間

來源:互聯網
上載者:User

32位PAE模式X86架構下,Xen佔用了最頂部的64MB的線性地址空間。分布如下:

IOREMAP_VIRT_END :0
IOREMAP_VIRT_START :FFC00000

 

 

DIRECTMAP_VIRT_END :FFC00000
DIRECTMAP_VIRT_START :FF000000

 

MAPCACHE_VIRT_END :FF000000
MAPCACHE_VIRT_START :FEC00000

 

 

PERDOMAIN_VIRT_END :FF000000
PERDOMAIN_VIRT_START :FE800000

 

SH_LINEAR_PT_VIRT_END :FE800000
SH_LINEAR_PT_VIRT_START :FE000000

 

LINEAR_PT_VIRT_END :FE000000
LINEAR_PT_VIRT_START :FD800000

 

RDWR_MPT_VIRT_END :FD800000
RDWR_MPT_VIRT_START :FC800000

 

FRAMETABLE_VIRT_END :FC800000
FRAMETABLE_VIRT_START :F6800000

 

RO_MPT_VIRT_END :F6800000
RO_MPT_VIRT_START :F5800000

 

 

非PAE模式,分布如下:

I/O Remapping Area:I/O重新對應

IOREMAP_VIRT_END :0
IOREMAP_VIRT_START :FFC00000

 

Direct-map:
 直接映射地區

DIRECTMAP_VIRT_END :FFC00000
DIRECTMAP_VIRT_START :FF000000

 

Map Cache:映射緩衝,用於緩衝Domain地址映射
 

MAPCACHE_VIRT_END :FF000000
MAPCACHE_VIRT_START :FEC00000

 

Per-Domain Mappings:

 用於每個Domain地址映射

PERDOMAIN_VIRT_END :FF000000
PERDOMAIN_VIRT_START :FE800000

 

Shadow Linear Pagetable: 映射影子頁目錄和頁表

SH_LINEAR_PT_VIRT_END :FE800000
SH_LINEAR_PT_VIRT_START :FE400000

 

Guest Linear Pagetable: 映射當前Guest OS的頁表結構,包括頁目錄和頁表

LINEAR_PT_VIRT_END :FE400000
LINEAR_PT_VIRT_START :FE000000

 

Machine-to-physical Translation Table(RW): 可寫M2P表,能被Xen讀寫,Guest OS不能訪問

RDWR_MPT_VIRT_END :FE000000
RDWR_MPT_VIRT_START :FDC00000

 

Frame-info Table: 系統物理頁資訊表,對應frame_table數組

FRAMETABLE_VIRT_END :FDC00000
FRAMETABLE_VIRT_START :FC400000

 

Machine-to-physical Translation Table(RO): 唯讀M2P表,能夠被Guest OS訪問。

RO_MPT_VIRT_END :FC400000
RO_MPT_VIRT_START :FC000000

 

 

 

 

附:

1、Xen堆(Xenheap)地區即直接映射地區(Direct-map),大小為12 MB。Xen堆和傳統作業系統的核心相當,在系統初始化時佔用了機器物理地址空間的前面12MB。

2、

 

#include <stdio.h><br />#include <stdlib.h></p><p>#define IOREMAP_MBYTES 4<br />#define DIRECTMAP_MBYTES 12<br />#define MAPCACHE_MBYTES 4<br />#define PERDOMAIN_MBYTES 8<br />#ifdef CONFIG_X86_PAE<br /># define LINEARPT_MBYTES 8<br /># define MACHPHYS_MBYTES 16 /* 1 MB needed per 1 GB memory */<br /># define FRAMETABLE_MBYTES (MACHPHYS_MBYTES * 6)<br />#else<br /># define LINEARPT_MBYTES 4<br /># define MACHPHYS_MBYTES 4<br /># define FRAMETABLE_MBYTES 24<br />#endif<br />#define IOREMAP_VIRT_END 0UL<br />#define IOREMAP_VIRT_START (IOREMAP_VIRT_END - (IOREMAP_MBYTES<<20))<br />#define DIRECTMAP_VIRT_END IOREMAP_VIRT_START<br />#define DIRECTMAP_VIRT_START (DIRECTMAP_VIRT_END - (DIRECTMAP_MBYTES<<20))<br />#define MAPCACHE_VIRT_END DIRECTMAP_VIRT_START<br />#define MAPCACHE_VIRT_START (MAPCACHE_VIRT_END - (MAPCACHE_MBYTES<<20))<br />#define PERDOMAIN_VIRT_END DIRECTMAP_VIRT_START<br />#define PERDOMAIN_VIRT_START (PERDOMAIN_VIRT_END - (PERDOMAIN_MBYTES<<20))<br />#define SH_LINEAR_PT_VIRT_END PERDOMAIN_VIRT_START<br />#define SH_LINEAR_PT_VIRT_START (SH_LINEAR_PT_VIRT_END - (LINEARPT_MBYTES<<20))<br />#define LINEAR_PT_VIRT_END SH_LINEAR_PT_VIRT_START<br />#define LINEAR_PT_VIRT_START (LINEAR_PT_VIRT_END - (LINEARPT_MBYTES<<20))<br />#define RDWR_MPT_VIRT_END LINEAR_PT_VIRT_START<br />#define RDWR_MPT_VIRT_START (RDWR_MPT_VIRT_END - (MACHPHYS_MBYTES<<20))<br />#define FRAMETABLE_VIRT_END RDWR_MPT_VIRT_START<br />#define FRAMETABLE_VIRT_START (FRAMETABLE_VIRT_END - (FRAMETABLE_MBYTES<<20))<br />#define RO_MPT_VIRT_END FRAMETABLE_VIRT_START<br />#define RO_MPT_VIRT_START (RO_MPT_VIRT_END - (MACHPHYS_MBYTES<<20))<br />#define XENHEAP_DEFAULT_MB (DIRECTMAP_MBYTES)<br />#define DIRECTMAP_PHYS_END (DIRECTMAP_MBYTES<<20)<br />int main( )<br />{<br /> FILE *fp;<br /> int a = 1;<br /> char c ='a';<br /> fp=fopen("output.txt","w");<br /> if(fp==NULL)<br /> {<br /> printf("Can not create the file!");<br /> exit(0);<br /> }<br /> fprintf(fp,"IOREMAP_VIRT_END :%X/n",IOREMAP_VIRT_END);<br /> fprintf(fp,"IOREMAP_VIRT_START :%X/n/n",IOREMAP_VIRT_START);<br /> fprintf(fp,"DIRECTMAP_VIRT_END :%X/n",DIRECTMAP_VIRT_END);<br /> fprintf(fp,"DIRECTMAP_VIRT_START :%X/n/n",DIRECTMAP_VIRT_START);<br /> fprintf(fp,"MAPCACHE_VIRT_END :%X/n",MAPCACHE_VIRT_END);<br /> fprintf(fp,"MAPCACHE_VIRT_START :%X/n/n",MAPCACHE_VIRT_START);<br /> fprintf(fp,"PERDOMAIN_VIRT_END :%X/n",PERDOMAIN_VIRT_END);<br /> fprintf(fp,"PERDOMAIN_VIRT_START :%X/n/n",PERDOMAIN_VIRT_START);<br /> fprintf(fp,"SH_LINEAR_PT_VIRT_END :%X/n",SH_LINEAR_PT_VIRT_END);<br /> fprintf(fp,"SH_LINEAR_PT_VIRT_START :%X/n/n",SH_LINEAR_PT_VIRT_START);<br /> fprintf(fp,"LINEAR_PT_VIRT_END :%X/n",LINEAR_PT_VIRT_END);<br /> fprintf(fp,"LINEAR_PT_VIRT_START :%X/n/n",LINEAR_PT_VIRT_START);<br /> fprintf(fp,"RDWR_MPT_VIRT_END :%X/n",RDWR_MPT_VIRT_END);<br /> fprintf(fp,"RDWR_MPT_VIRT_START :%X/n/n",RDWR_MPT_VIRT_START);<br /> fprintf(fp,"FRAMETABLE_VIRT_END :%X/n",FRAMETABLE_VIRT_END);<br /> fprintf(fp,"FRAMETABLE_VIRT_START :%X/n/n",FRAMETABLE_VIRT_START);<br /> fprintf(fp,"RO_MPT_VIRT_END :%X/n",RO_MPT_VIRT_END);<br /> fprintf(fp,"RO_MPT_VIRT_START :%X/n/n",RO_MPT_VIRT_START);<br /> fclose(fp);<br /> return 0;<br />}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.