用於系統存儲管理的ARM 協處理器CP15<轉載於網路>

来源:http://www.cnblogs.com/ldhbetter/archive/2016/05/25/5528686.html
-Advertisement-
Play Games

聲明:本文所有的內容轉載於網路上,對原作者表示感謝 用於系統存儲管理的協處理器CP15 MCR{cond} coproc,opcode1,Rd,CRn,CRm,opcode2 MRC {cond} coproc,opcode1,Rd,CRn,CRm,opcode2 coproc 指令操作的協處理器名 ...


聲明:本文所有的內容轉載於網路上,對原作者表示感謝

 

用於系統存儲管理的協處理器CP15

 

MCR{cond}     coproc,opcode1,Rd,CRn,CRm,opcode2

MRC {cond}    coproc,opcode1,Rd,CRn,CRm,opcode2

coproc         指令操作的協處理器名.標準名為pn,n,0~15 

opcode1      協處理器的特定操作碼. 對於CP15寄存器來說,opcode1永遠為0,不為0時,操作結果不可預知

CRd             作為目標寄存器的協處理器寄存器

CRn             存放第1個操作數的協處理器寄存器

CRm            存放第2個操作數的協處理器寄存器. (用來區分同一個編號的不同物理寄存器,當不需要提供附加信息時,指定為C0

opcode2     可選的協處理器特定操作碼.                用來區分同一個編號的不同物理寄存器,當不需要提供附加信息時,指定為0)

 

  • 在基於ARM的嵌入式系統中,存儲系統通常是通過系統控制協處理器CP15完成的。
  • CP15可以包含1632位的寄存器,其編號為0-15。實際上對於某些編號的寄存器可能對應有多個物理寄存器。在指令中指定特定的標誌位來區分這些物理寄存器。有些類似於ARM寄存器中,處於不同的處理器模式時,ARM某些寄存器可能不同。

 

CP15 的寄存器列表如表所示:

寄存器編號

基本作用

 MMU 中的作用

 PU 中的作用

0

ID 編碼(只讀)

ID 編碼和 cache 類型

 

1

控制位(可讀寫)

各種控制位

 

2

存儲保護和控制

地址轉換表基地址

Cachability 的控制位

3

存儲保護和控制

域訪問控制位

Bufferablity 控制位

4

存儲保護和控制

保留

保 留

5

存儲保護和控制

記憶體失效狀態

訪問許可權控制位

6

存儲保護和控制

記憶體失效地址

保護區域控制

7

高速緩存和寫緩存

高速緩存和寫緩存控制

 

8

存儲保護和控制

TLB 控制

保 留

9

高速緩存和寫緩存

高速緩存鎖定

 

10

存儲保護和控制

TLB 鎖定

保 留

11

保留

 

 

12

保留

 

 

13

進程標識符

進程標識符

 

14

保留

 

 

15

因不同設計而異

因不同設計而異

因不同設計而異

 

註:以下寄存器中相應位的含義在不同的處理器中可能不同,但總體功能不變

 

(一)CP15 的寄存器 C0

CP15 中寄存器 C0 對應兩個標識符寄存器,由訪問 CP15 中的寄存器指令中的 <opcode2> 指定要訪問哪個具體物理寄存器, <opcode2> 與兩個標識符寄存器的對應關係如下所示:

opcode2 編碼

對應的標識符號寄存器

0b000

主標識符寄存器

0b001

cache類型標識符寄存器

其 他

保留

 

(1)主標識符寄存器

指令如下:

MRC    P15,0,R0,C0,C0,0       #將主標示符寄存器的內容讀到AMR寄存器R0中

主標示符的編碼格式對於不同的ARM處理器版本有所不同。

對於AMR7之後的處理器,其主標示符編碼格式如下 : 

30                24

23                20

19                          16

15                 4

3                       0

由生產商確定

產品子編號

ARM 體系版本號

產品主編號

處理器版本號

各部分的編碼詳細含義如下表所示:

                        

 [3: 0]

生產商定義的處理器版本號

 [15: 4]

生產商定義的產品主編號

其中最高 4 位即位 [15:12] 可能的取值為0x0~0x7 但不能是 0x0  0x7

因為:

0x0表示 ARM7之前的處理器

0x7 表示ARM7處理器

 [19: 16]

ARM 體系的版本號,可能的取值如 下:

0x1   ARM 體系版本 4

0x2   ARM 體系版本 4T

0x3   ARM 體系版本 5

0x4   ARM 體系版本 5T

0x5   ARM 體系版本 5TE

其他    ARM 公司保留將來使用

 [23: 20]

生產商定義的產品子編號。當產品主編號相同時,使用子編號來區分不同的產品子類,如產品中不 同的高速緩存的大小等

 [31: 24]

生產廠商的編號,現在已經定義的有以下值:

0x41  =A  ARM 公司

0x44  =D  Digital Equipment 公司

0x69  =I   intel 公司

 

(2)cache類型標識符寄存器

指令如下:

MRC    P15,0,R0,C0,C0,1       #將cache類型標識符寄存器的內容讀到AMR寄存器R0中

 

ARM 處理器中 cache 類型標識符寄存器的編碼格式如下所示:

31      29

28           25

24

23                                12

11                                0

  000

  屬性欄位

 S

   數據 cache 相關屬性

   指令cache 相關屬性

 

各部分的編碼詳細含義如下表所示:

含義

 [28: 25]

主要用於定義對於寫回類型的cache的一些屬性

 [24]

定義系統中的數據 cache 和指令 cache 是分開的還是統一的:

0   系統的數據 cache 和指令 cache 是統一的;

1    系統的數據 cache 和指令 cache 是分開的

 [23: 12]

定義數據 cache 的相關屬性

如果位 [24]  0 ,本欄位定義整個cache 的屬性

 [31: 24]

定義指令 cache 的相關屬性

如果位 [24]  0 ,本欄位定義整個cache 的屬性

 

  •  控制欄位位 [28  25] 的含義

主要用於定義對於寫回類型的cache的一些屬性

cache 類型標識符寄存器的控制欄位位 [28  25]

     

cache 類型

cache 內容清除方法

cache 內容鎖定方法

0b0000

寫通類型

不需要內容清除

不支持內容鎖定

0b0001

寫回類型

數據塊讀取

不支持內容鎖定

0b0010

寫回類型

由寄存器 C7 定義

不支持內容鎖定

0b0110

寫回類型

由寄存器 C7 定義

支持格式 A

0b0111

寫回類型

由寄存器 C7 定義

支持格式 B

  • 控制欄位位 [23  12] 及控制欄位位 [11  0] 含義

[2312]用於定義數據cache的屬性,[11: 0]用於定義指令cache的屬性

編碼格式如下:

11      9

8                6

5                        3

2

1          0

000

cache 容量

cache 相聯特性

M

塊大小

其中bits[1:0]含義如下:

     

cache 塊大小

0b00

個 字( 8 位元組)

0b01

個 字( 16 位元組)

0b10

個 字( 32 位元組)

0b11

16 個 字( 64 位元組)

其中bits[5:3]含義如下:

     

M=0 時含義

M=1 時含義

0b000

路 相聯(直接映射)

沒有 cache

0b001

路 相聯

路 相聯

0b010

路 相聯

路 相聯

0b011

路 相聯

12 路 相聯

0b100

16 路 相聯

24 路 相聯

0b101

32 路 相聯

48 路 相聯

0b110

64 路 相聯

96 路 相聯

0b111

128 路相聯

192 路相聯

其中bits[8:6]含義如下:

     

M=0 時含義

M=1時含義

0b000

0.5KB

0.75 KB

0b001

1 KB

1.5 KB

0b010

2 KB

3 KB

0b011

4 KB

6 KB

0b100

8 KB

12 KB

0b101

16 KB

24 KB

0b110

32 KB

48 KB

0b111

64 KB

96 KB

 

(二)CP15 的寄存器 C1

CP15中的寄存器C1是一個控制寄存器,它包括以下控制功能:

  • 禁止或使能MMU以及其他與存儲系統相關的功能
  • 配置存儲系統以及ARM處理器中的相關部分的工作

指令如下:

mrc p15, 0, r0, c1, c0{, 0}     ;將 CP15 的寄存器 C1 的值讀到 r0 

mcr p15, 0, r0, c1, c0{, 0}     ;將 r0 的值寫到 CP15 的寄存器 C1 

 

CP15 中的寄存器 C1 的編碼格式及含義說明如下:

C1中的控制位

含義

Mbit[0]

:禁止 MMU 或者 PU 

:使能 MMU 或者 PU

如果系統中沒有MMUPU,讀取時該位返回0,寫入時忽略該位

Abit[1]

:禁止地址對齊檢查

:使能地址對齊檢查

Cbit[2]

當數據cache和指令cache分開時,本控制位禁止/使能數據cache。當數據cache和指令cache統一時,該控制位禁止/使能整個cache

:禁止數據 / 整個 cache 

:使能數據 / 整個 cache

如果系統中不含cache,讀取時該位返回0.寫入時忽略

當系統中不能禁止cache 時,讀取時返回1.寫入時忽略

Wbit[3]

:禁止寫緩衝

:使能寫緩衝

如果系統中不含寫緩衝時,讀取時該位返回0.寫入時忽略

當系統中不能禁止寫緩衝時,讀取時返回1.寫入時忽略

Pbit[4]

對於向前相容26位地址的ARM處理器,本控制位控制PROG32控制信號

:異常中斷處理程式進入 32 位地址模式

:異常中斷處理程式進入26 位地址模式

如果本系統中不支持向前相容26位地址,讀取該位時返回1,寫入時忽略

Dbit[5]

對於向前相容26位地址的ARM處理器,本控制位控制DATA32控制信號

:禁止 26 位地址異常檢查

:使能 26 位地址異常檢查

如果本系統中不支持向前相容26位地址,讀取該位時返回1,寫入時忽略

Lbit[6]

對於ARMv3及以前的版本,本控制位可以控制處理器的中止模型

:選擇早期中止模型

:選擇後期中止模型

Bbit[7]

對於存儲系統同時支持big-endianlittle-endianARM系統,本控制位配置系統的存儲模式

 little endian  

 big endian

對於只支持little-endian的系統,讀取時該位返回0,寫入時忽略

對於只支持big-endian的系統,讀取時該位返回1,寫入時忽略

Sbit[8]

在基於 MMU 的存儲系統中,本位用作系統保護

Rbit[9]

在基於 MMU 的存儲系統中,本位用作 ROM 保護

Fbit[10]

由生產商定義

Zbit[11]

對於支持跳轉預測的ARM系統,本控制位禁止/使能跳轉預測功能

:禁止跳轉預測功能 

:使能跳轉預測功能

對於不支持跳轉預測的ARM系統,讀取該位時返回0,寫入時忽略

Ibit[12]

當數據cache和指令cache是分開的,本控制位禁止/使能指令cache

:禁止指令 cache  

:使能指令 cache

如果系統中使用統一的指令cache和數據cache或者系統中不含cache,讀取該位時返回0,寫入時忽略。當系統中的指令cache不能禁止時,讀取時該位返回1,寫入時忽略

Vbit[13]

對於支持高端異常向量表的系統,本控制位控制向量表的位置

:選擇低端異常中斷向量 0x0~0x1c 

:選擇高端異常中斷向量0xffff0000~ 0xffff001c

對於不支持高端異常向量表的系統,讀取時該位返回0,寫入時忽略

PRbit[14]

如果系統中的cache的淘汰演算法可以選擇的話,本控制位選擇淘汰演算法

:常規的 cache 淘汰演算法,如隨機淘汰 

:預測性淘汰演算法,如round-robin 淘汰演算法

如果系統中cache的淘汰演算法不可選擇,寫入該位時忽略。讀取該位時,根據其淘汰演算法是否可以比較簡單地預測最壞情況返回0或者1

L4bit[15]

對於ARM版本5及以上的版本,本控制位可以提供相容以前的ARM版本的功能

:保持 ARMv5 以上版本的正常功能

:將 ARMv5 以上版本與以前版本處理器 相容,不根據跳轉地址的 bit[0] 進行 ARM 指令和 Thumb 狀態切換: bit[0] 等於 0 表示 ARM 指令,等於 1 表示 Thumb 指令

Bits[31:16]

這些位保留將來使用,應為UNP/SBZP

  

(三)CP15 的寄存器 C2

C2寄存器的別名:Translation table base (TTB) register

 C2寄存器用來保存頁表的基地址,即一級映射描述符表的基地址。其編碼格如下所示:

31                                                                                                     0

                                    一級映射描述符表的基地址(物理地址)

 

(四)CP15 的寄存器 C3

CP15 中的寄存器 C3 定義了 ARM 處理器的 16 個域的訪問許可權。

31                                                                                                     0

D15

D14

D13

D12

D11

D10

D9

D8

D7

D6

D5

D4

D3

D2

D1

D0

 

 CP15C3寄存器中,劃分了 16個域,每個區域由兩位構成,這兩位說明瞭當前記憶體的檢查許可權:

00:當前級別下,該記憶體區域不允許被訪問,任何的訪問都會引起一個domain fault,這時 AP位無效

01:當前級別下,該記憶體區域的訪問必須配合該記憶體區域的段描述符中AP位進行權檢查
10:保留狀態(我們最好不要填寫該值,以免引起不能確定的問題)
11:當前級別下,對該記憶體區域的訪問都不進行許可權檢查。 這時 AP位無效 

 

所以只有當相應域的編碼為 01 時,才會根據  AP 和協處理器CP15中的C1寄存器的R,S位進行許可權檢查

 

(五)CP15 的寄存器 C5

CP15 中的寄存器 C5 是失效狀態寄存器,分為指令狀態失效和數據狀態失效。

MRC p15, 0, <Rd>, c5, c0, 0   訪問數據失效狀態寄存器

MRC p15, 0, <Rd>, c5, c0, 1   訪問指令狀態失效寄存器

編碼格式如下所示:

31            9

8

7    4

3      0

UNP/SBZP

0

域標識

狀態標識

其中,域標識bit[7:4]表示存放引起存儲訪問失效的存儲訪問所屬的域。

狀態標識 bit[3:0] 表示放引起存儲訪問失效的存儲訪問類型,該欄位含義如下表所示(優先順序由上到下遞減)。

引起訪問失效的原因

狀態標識

域標識

C6

終 端異常( Terminal Exception 

0b0010

無 效

生 產商定義

中 斷向量訪問異常( Vector Exception

0b0000

無 效

有 效

地 址對齊

0b00x1

無 效

有 效

一 級頁表訪問失效

0b1100

無 效

有 效

二 級頁表訪問失效

0b1110

有 效

有 效

基 於段的地址變換失效

0b0101

無 效

有 效

基 於頁的地址變換失效

0b0111

有 效

有 效

基 於段的存儲訪問中域控制失效

0b1001

有 效

有 效

基 於頁的存儲訪問中域控制失效

0b1101

有 效

有 效

基 於段的存儲訪問中訪問許可權控制失效

0b1111

有 效

有 效

基 於頁的存儲訪問中訪問許可權控制失效

0b0100

有 效

有 效

基 於段的 cache 預 取時外部存儲系統失效

0b0110

有 效

有 效


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • nvarchar(max)長度測試:在使用convert強制類型轉化之後 文本長度可以突破8000的上限。並且nvarchar(max)的最大長度可達到2^31以下為驗證SQL: 不過在表中max的長度就不會那麼長了,一般限制就是4000/8000,具體數值估計是要依賴於SQLServer版本了。以 ...
  • 事務(Transaction):組織多個操作為一個整體,要麼全部執行,要麼全部不執行 “回滾” ,rollback SQL介面:sql語句分析器和優化器 表:為了滿足範式設計要求,將一個數據集分拆為多個 約束:constraint,向數據表插入的數據要遵守的限制規則 主鍵:一個或多個欄位的組合,填入 ...
  • 一、JDK安裝 1、通過xftp工具把jdk-8u60-linux-x64.gz上傳到linux 2、解壓JDK命令tar -xzf jdk-8u60-linux-x64.gz 3、linux配置環境變數vi /etc/profile JAVA_HOME=/usr/local/java/jdk1.8 ...
  • 2.1 關係資料庫的結構 關係資料庫由表(table)的集合構成,每個表有唯一的名字。例如,instructor表記錄了有關教師的信息,它有四個列首:ID、name、dept_name和salary。該表中每一行記錄了一位教師的信息,包括該教師的ID、name、dept_name以及salary。類 ...
  • LINUX的主要特點: 1、開放性:開源; 2、多用戶多任務環境; 3、良好的用戶界面:提供兩種界面,即字元界面和圖形界面(XWindow系統); 4、設備獨立性; 5、豐富的網路功能:內置TCP/IP Linux內核版本有兩種:穩定版和開發版。 Linux內核版本號的格式如下:a.bb.cc sw ...
  • 1:df 用於查看已掛載磁碟的容量信息 -i 查看inodes使用情況 -h 以合適的單位顯示 -k -m 分別以k M單位顯示 2:du 查看某個文件或者目錄占用的空間 du [-abckmsh] [文件名目錄名] du + 目錄 只會列出目錄及其子目錄的大小 du -a +目錄 會列出目錄子目錄 ...
  • 一.pwn1 簡單的32位棧溢出,定位溢出點後即可寫exp shellcode保存到bss段上,然後ret返回即可: 這裡有個坑點就是shellcode的截斷問題,在exp-db上找了好多個都執行不了最後好友提醒用msf生成吧,過程如下: 二.encrypt 這是個堆溢出,由於pwn經驗很少,做出的 ...
  • *******1.在Linux中,只有/能夠當盤符,/首先要分配給系統盤所在分區*******2.swap交換分區,相當於Windows下的虛擬記憶體,用來模擬記憶體,當記憶體不夠用時,就會使用交換分區。其大小一般設置為物理記憶體的1.5 - 2倍********** 3.在Linux中,以.開頭的文件都是 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...