1.2.3 ARM處理器
任何一款ARM處理器都由兩大部分組成:ARM內核、外設。
ARM內核包括寄存器組、指令集、總線、存儲器映射規則、中斷邏輯和調試組件等。ARM內核是由ARM公司設計并以銷售方式授權給各個芯片廠商使用。例如,為高速度設計的Cortex A8、A9,它們是ARMv7a架構;Cortex M3、M4是ARMv7m架構;前者是ARM內核,后者是指令集的架構(亦簡稱架構)。
外設部分包括計時器、ADC、存儲器、I2C、UART、SPI、RAM等,它們完全由各芯片廠商自己設計,使外設與ARM內核銜接配套。不同的芯片廠商有不同的外設,因此構成了數量和規格龐大的ARM芯片產業。
1.ARM處理器分類
ARM7、ARM9、ARM11統稱為經典的ARM處理器,ARM11處理器之后,也就是從ARMv7架構開始,ARM的命名方式有所改變。新的處理器家族以Cortex命名,并分為3個系列,分別是Cortex-A、Cortex-R、Cortex-M。很巧合,又是A、R、M這3個字母, ARM處理器分類如圖1-17所示。

圖1-17 ARM處理器分類
(1) Cortex-A系列
應用處理器:面向移動計算、智能手機、服務器等市場的高端處理器。這類處理器主要針對日益增長的消費娛樂和無線產品設計,運行的時鐘頻率很高(超過1GHz),支持如Linux、Android、Windows等操作系統需要的內存管理單元。用于具有高計算要求、運行豐富應用程序的操作系統及提供交互媒體和圖形體驗的應用領域,如智能手機、平板計算機、汽車娛樂系統、數字電視、電子閱讀器、家用網絡、家用網關和其他各種產品。
(2) Cortex-R系列
實時處理器:面向實時應用的高性能處理器系列,針對需要運行實時操作的系統及應用,如汽車制動系統、動力傳動解決方案、大容量存儲控制器等深層嵌入式實時應用。多數實時處理器不支持MMU(存儲管理部件),不過其通常具有MPU(微處理器和內存保護單元)、Cache和其他針對工業應用設計的存儲器功能。實時處理器運行在比較高的時鐘頻率(大于200MHz),響應延遲非常低。雖然實時處理器不能運行完整版本的Linux和Windows操作系統,但是支持大量的實時操作系統(RTOS)。
(3) Cortex-M系列
微控制器處理器:微控制器處理器通常面積很小、能效比很高。通常這些處理器的流水線很短,最高時鐘頻率很低(市場上有此類的處理器也可以運行在200MHz之上)。新的Cortex-M系列處理器非常容易使用。該系列面向微控制器領域,主要針對成本和功耗敏感的應用,如智能測量、人機接口設備、汽車和工業控制系統、家用電器、消費性產品和醫療器械等。
(4) Cortex-SC系列
除了上述3大系列處理器,還有一個主打高安全性的Cortex-SC系列處理器,主要用于政府安全芯片。其處理器性能和功能如圖1-18所示。

圖1-18 ARM處理器性能和功能
ARM11系列包括了ARM11 MPCore處理器、ARM1176處理器、ARM1156處理器和ARM1136處理器,它們是基于ARMv6架構的。
ARM Cortex-A5處理器、Cortex-A7處理器、Cortex-A8處理器、Cortex-A9處理器和Cortex-A15處理器屬于Cortex-A系列,基于ARMv7-A架構。
Cortex-A53處理器、Cortex-A57處理器屬于Cortex-A50系列,首次采用64位ARMv8架構。
2020年ARM發布了一款全新的CPU架構Cortex-A78,它基于ARMv8.2架構的指令集。
2021年ARM發布了基于ARMv9的架構:Cortex-X2、Cortex-A710和Cortex-A510。
2.ARM技術特征
ARM的成功,一方面得益于它獨特的公司運作模式,另一方面,當然來自ARM處理器自身的優良性能。作為一種先進的RISC(精簡指令集計算機)處理器,ARM處理器有如下特點。
(1)體積小、低功耗、低成本、高性能。
(2)支持Thumb(16位)/ARM(32位)雙指令集,能很好地兼容8位或16位器件。
(3)大量使用寄存器,指令執行速度更快。
(4)大多數數據操作在寄存器中完成。
(5)尋址方式靈活簡單,執行效率高。
(6)指令長度固定。
ARMv7采用的是32位架構,ARM的基本數據類型有以下3種。
(1) byte:字節,8 bit。
(2) halfword:半字,16 bi(t 半字必須與2字節邊界對齊)。
(3) word:字,32 bit(字必須與4字節邊界對齊)。存儲器可以看作序號為0~232?1的線性字節陣列。
3.ARM工作模式
ARM7處理器、ARM9處理器、ARM11處理器的工作模式一共有7種。Cortex系列的ARM處理器工作模式有8種,多了1個“Monitor”(監控)模式,如表1-3所示。
表1-3 ARM處理器工作模式

(1)用戶模式:用戶模式是用戶程序的工作模式,它運行在操作系統的用戶態,在該模式下,系統沒有權限去操作其他硬件資源,只能處理它自己的數據,也不能切換其他模式,要想訪問硬件資源或切換其他模式,只能通過軟中斷或異常操作。
(2)系統模式:系統模式是特權模式的一種,不受用戶模式的限制。用戶模式和系統模式共用一套寄存器,操作系統在該模式下可以方便地訪問用戶模式的寄存器,而且操作系統的一些特權任務可以使用這個模式訪問一些受控的資源。
(3)一般中斷模式:一般中斷模式也叫普通中斷模式,用于處理一般的中斷請求,通常在硬件產生中斷信號之后處理器自動進入該模式,該模式為特權模式一種,可以自由訪問系統硬件資源。
(4)快速中斷模式:快速中斷模式是相對一般中斷模式而言的,它用來處理時間要求比較緊急的中斷請求,主要用于高速數據傳輸及通道處理。
(5)管理模式:管理模式是CPU上電后的默認模式,因此該模式主要用于系統的初始化,軟中斷處理也在該模式下運行,當用戶模式下的用戶程序請求使用硬件資源時可通過軟中斷進入該模式。
(6)中止模式:中止模式用于支持虛擬內存或存儲器保護,當用戶程序訪問非法地址,或者沒有權限讀取的內存地址時,會進入該模式,在Linux下編程時經常出現的段錯誤通常都是在該模式下發出并返回的。
(7)未定義模式:未定義模式用于支持硬件協處理器的軟件仿真,CPU在指令的譯碼階段不能識別該指令操作時,會進入未定義模式。
(8) Monitor模式:為了安全而擴展出的用于執行安全監控程序的模式,也是一種特權模式。
除用戶模式以外,其余的7種模式被稱為特權模式或非用戶模式;其中除去用戶模式和系統模式以外的6種又被稱為異常模式,常用于處理中斷或異常,以及用于需要訪問受保護的系統資源等情況。
ARM之所以設計出這么多種模式,就是為了應對CPU運行時出現的各種突發事件,在應用程序的運行時,任何一個時間點可能發生很多異常事件,如關機、接收到網卡信息、訪問非法內存、系統解析到了非法指令等,因此CPU不僅要能處理這些異常,還要能夠從異常中再返回原來的應用程序并繼續執行。
4.ARM寄存器
Cortex A系列的ARM處理器共有40個32位寄存器,其中33個為通用寄存器,7個為狀態寄存器。用戶模式和系統模式共用同一組寄存器,如圖1-19所示。
通用寄存器包括R0~R15,可以分為以下3類。
● 未分組寄存器:R0~R7。
● 分組寄存器:R8~R14、R13(SP)、R14(LR),R8_fiq~R12_fiq在快速中斷模式下單獨使用。
● 程序計數器:R15。
(1)未分組寄存器(R0~R7)
在所有運行模式下,未分組寄存器都指向同一個物理寄存器,它們未被系統用作特殊的用途。在異常處理運行模式轉換時,不同運行模式的處理器均使用相同的物理寄存器,可能造成寄存器中數據的覆蓋。

圖1-19 ARM寄存器
(2)分組寄存器(R8~R14)
分組寄存器每一次訪問的物理寄存器都與當前處理器的運行模式有關。對R8~R12來說,每個寄存器對應2個不同的物理寄存器,當使用快速中斷模式時,分組寄存器訪問寄存器 R8_fiq~R12_fiq;當使用除快速中斷模式以外的其他模式時,分組寄存器訪問寄存器R8_usr~R12_usr。
對R13、R14來說,每個寄存器對應7個不同的物理寄存器,其中一個為用戶模式和系統模式共用,另外6個物理寄存器對應其他6種不同的運行模式,并采用以下記號來區分不同的物理寄存器。
R13_mode R14_mode
其中mode可為usr、fiq、irq、svc、abt、und、mon。
① 寄存器R13(SP)
寄存器R13在ARM指令集中常被用作堆棧指針,用戶也可使用其他的寄存器作為堆棧指針,而在Thumb指令集中,某些指令強制要求使用寄存器R13作為堆棧指針。
處理器的每種運行模式均有自己獨立的物理寄存器R13,在用戶應用程序初始化時,要初始化每種運行模式下的寄存器R13,使其指向該運行模式的棧空間。這樣,當程序的運行進入異常模式時,可以將需要保護的寄存器中的數據保存至R13所指向的堆棧,而當程序從異常模式返回時,再從該堆棧中恢復數據,采用這種方式可以保證異常發生后程序也能正常執行。
② 寄存器R14(LR)
當執行子程序調用指令(BL)時,R14可得到R15(程序計數器)的備份。
在每一種運行模式下,都可用R14保存子程序的返回地址,當用指令BL或BLX調用子程序時,將程序計數器的當前值復制給R14,執行完子程序后,又將R14的值復制回程序計數器,即可完成子程序的調用返回。以上的描述可用指令完成,如下。
從子程序返回。
方法1:MOV PC, LR或BX LR
方法2: 在子程序入口處使用以下指令將R14存入堆棧。
STMFD SP!,{,LR}
對應地,使用以下指令可以完成子程序返回。
LDMFD SP!,{,PC}
(3) 程序計數器R15(PC)
寄存器R15用作程序計數器,在ARM狀態下,bit[1:0]為0,bit[31:2]用于保存PC值,在Thumb狀態下,bit[0]為0,bit[31:1]用于保存PC值。
例如,在ARM狀態下,如果PC的值是0x40008001,那么在尋址時,查找的地址為0x40008000,低2位會自動被忽略掉。
由于ARM架構采用了多級流水線技術,對ARM指令集而言,PC總是指向當前指令后兩條指令的地址,即PC的值為當前指令的地址值加8byte,公式如下。
PC值=當前程序執行位置+8
(4) CPSR、SPSR
CPSR(當前程序狀態寄存器)可在任何運行模式下被訪問,它包括條件碼標志位、控制位、當前處理器模式標志位,以及其他相關的控制和狀態位。每一種運行模式下又都有一個專用的物理狀態寄存器,被稱為SPSR(備份的程序狀態寄存器),當異常發生時, SPSR用于保存CPSR的當前值,從異常模式退出時則可由SPSR來恢復CPSR。
CPSR格式如圖1-20所示。

圖1-20 CPSR格式
① 條件碼標志位
N、Z、C、V均為條件碼標志位,它們的內容可被算術或邏輯運算的結果改變,并且可以決定某條指令是否被執行。在ARM狀態下,絕大多數的指令是有條件執行的,在Thumb狀態下,僅分支指令是有條件執行的,各條件碼標志位說明如下。
● N:當用兩個補碼表示的帶符號數進行運算時,N=1表示運行結果為負,N=0表示運行結果為正或零。
● Z:Z=1表示運算結果為零,Z=0表示運行結果非零。
● C:可以用以下4種方法設置C的值。
加法運算:當運算結果產生了進位,C=1,否則C=0。
減法運算:當運算結果產生了借位,C=0,否則C=1。
對于包含移位操作的非加/減運算指令,C為移出值的最后一位。
對于其他的非加/減運算指令,C的值通常不改變。
● V:對于加/減運算指令,當操作數和運算結果為二進制補碼表示的帶符號位溢出時,V=1表示符號位溢出;對于其他的非加/減運算指令V的值通常不改變。
● Q:在ARMv5及以上架構的E系列處理器中,Q標志位用來表示增強的DSP(數字信號處理)運算指令是否發生了溢出。在其他版本的處理器中,Q標志位無定義。
● J:僅ARMv5TE-J架構支持,T=0、J=1時,處理器處于Jazelle狀態,該位也可以和其他位組合。
● E:大小端控制位。
● A:A=1 禁止不精確的數據異常。
② 控制位
CPSR的低8位(包括I、F、T和M[4:0])稱為控制位,當發生異常時這些位可以被改變,如果處理器運行在特權模式下,這些位也可以由程序修改。
● I、F:中斷禁止位。I =1,禁止IRQ中斷;F=1,禁止FIQ中斷。要想在程序中實現禁止中斷,那么就需要將CPSR[7]置1。
● T:T = 0、J=0,處理器處于ARM狀態;T=1、J=0,處理器處于Thumb狀態;T = 1、J=1處理器處于ThumbEE狀態。
● M[4:0]:運行模式位。決定處理器的運行模式如表1-4所示。
表1-4 CPSR控制位

要想理解U-Boot、Linux的啟動及異常處理的流程,必須熟練掌握寄存器的操作。
5.指令集
指令集是處理器結構中最重要的一個部分,用ARM的術語亦稱為ISA(指令集體系結構)。指令集可以說是CPU的靈魂,要想使用CPU,我們只能通過指令集中的指令來進行操作。
對于32位的CPU,它的指令就是一個32位的二進制序列,不同的值代表不同的指令, CPU的硬件能完美地解析并執行這些指令,如尋址、運算、異常處理指令等。例如,當我們使用手機玩游戲的時候,我們發出的每一個招式,其實最終都是被轉化成了一系列的機器指令。
(1) CISC和RISC
CISC(復雜指令集計算機)和RISC(精簡指令集計算機)是兩大類主流類型的CPU指令集計算機。
CISC以Intel、AMD的x86、CPU為代表,而RISC以ARM、IBM Power為代表。設計RISC的初衷是由于CISC CPU的復雜度高,所以想要設計一款計算機使其能選擇在單個CPU周期完成的指令,以降低CPU的復雜度,并將復雜操作交給編譯器。
ARM指令集是RISC架構,RISC把著眼點放在如何使計算機的結構更加簡單和如何使計算機的處理速度更加快速上。RISC選取了使用頻率最高的簡單指令,拋棄復雜指令,固定指令長度,減少指令格式和尋址方式,不用或少用微碼控制。這些特點使得RISC架構非常適合嵌入式處理器。
在功耗方面,一個4核的Intel i7的CPU功率為130W。而一塊ARM A8單個核心的CPU,設計功率只有2W。對于移動設備,功耗是一個遠比性能更重要的指標。
在價格方面,ARM公司并沒有壟斷CPU的生產和制造,只是進行CPU設計,然后把對應的知識產權授權出去,讓其他廠商來生產ARM架構的CPU。它甚至還允許這些廠商基于ARM的架構和指令集設計屬于自己的CPU,如高通、蘋果、三星、華為,它們都拿到了基于ARM體系架構設計和制造CPU的授權。ARM公司只收取對應的專利授權費用。多個廠商之間的競爭,使得市場上ARM芯片的價格很便宜。
在指令數量方面,早期的RISC,其指令數比CISC少,但后來,很多RISC指令集中的指令數反超了CISC,因此,需要根據引用指令的復雜度而非數量來區分兩種指令集。
RISC可以實現以相對少的晶體管設計極快的微處理器。通過研究發現,它只有大約20%的指令是常用的,并將處理器能執行的指令數目減到最少,優化執行過程,提高處理器的工作速度。一般來說,RISC的處理器比同等的CISC的處理器的工作速度快50%~75%,也更容易設計和糾錯。
當然,CISC也是通過操作內存、寄存器、運算器來完成復雜指令的。它處理復雜指令時,先將復雜指令轉換為一個微程序,微程序在制造CPU時就已存儲于微存儲器中。一個微程序包含若干條微指令(亦稱微碼)。CISC微程序的執行不可被打斷,而RISC微程序的執行可以被打斷,這也是RISC和CISC的差別,所以理論上RISC可更快響應中斷。
(2) ARM指令格式
ARM指令格式如圖1-21所示。

圖1-21 ARM指令格式
操作碼:操作碼就是匯編語言里的mov、add、bl等符號碼。
操作數地址:用于說明該指令需要的操作數所在地址是在內存里還是在CPU的內部寄存器里。
實際上,機器指令格式遠比圖1-21所示的復雜,圖1-22所示是常用的ARM指令機器碼。

圖1-22 ARM指令機器碼
注:Cond為條件碼,Operand2為操作數,Offset為偏移量,L為分支跳轉指令。
關于這些機器指令格式,后面我們會挑選其中幾個進行分析,對于大部分初學者,沒有必要花費太多精力去研究這些機器指令,只需要大概了解即可。
(3)指令流水線
流水線技術通過多個功能部件并行工作來縮短程序執行時間,提高處理器核的效率和吞吐率,從而成為微處理器設計中最重要的技術之一。
① 3級流水線
截止到ARM7系列,ARM處理器使用簡單的3級流水線,如圖1-23所示,它包括下列流水線級。
取指令:從寄存器裝載一條指令。
譯碼:識別被執行的指令并為下一個周期準備數據通路的控制信號。在這一級,指令占有譯碼邏輯,不占用數據通路。
執行:處理指令并將結果寫回寄存器。

圖1-23 3級流水線
當處理器執行簡單的數據處理指令時,流水線使平均每個時鐘周期內,處理器能完成1條指令,但單獨執行1條指令需要3個時鐘周期,吞吐率為每個周期1條指令。
對于3級流水線,PC寄存器里的值并不是正在執行的指令的地址,而是預取指令的地址,這個知識點很重要,后面我們會詳細舉例來證明。
處理器要滿足高性能的要求,因此需要優化處理器的組織結構。提高性能的方法主要有如下兩種方法。
● 提高時鐘頻率。提高時鐘頻率必然會縮短指令執行周期,所以要簡化流水線每一級的邏輯運算,增加流水線的級數。
● 減少每條指令的平均指令周期數(CPI)。優化多于1條完整流水線周期的指令實現方法,以使其占有較少的周期,或者減少因指令造成的流水線停頓,也可以將兩者結合起來。
較高性能的ARM核使用了5級流水線,而且具有單獨的指令和數據存儲器。 在Cortex-A8中有一條13級的流水線,但是ARM公司沒有公開技術相關的細節。
從經典ARM系列到現在的Cortex系列,ARM處理器的結構越來越復雜,但沒改變的是CPU的取指令和地址關系,不管處理器采用幾級流水線,都可以按照最初的3級流水線的操作特性來判斷其當前的PC位置。
② 指令對流水線影響
為方便理解,下面我們以3級流水線為例,講解不同指令對流水線的影響,最佳流水線如圖1-24所示。
● 最佳流水線

圖1-24 最佳流水線
這是一個理想的實例,所有的指令都在寄存器中執行,且處理器完全不用離開芯片。在每一個周期都有一條指令被執行,流水線的容量得到了充分的利用,指令周期數(CPI)為1。
● LDR流水線如圖1-25所示。

圖1-25 LDR流水線
該實例中,在6個時鐘周期內共執行了4條指令,指令周期數(CPI)為1.5。與最佳流水線不同,裝載(LDR)操作將數據移進SoC,導致數據總線被占用,隨后緊接寫周期將數據寫回寄存器。
1)數據總線在周期1、2、3中被使用,周期6用于取指令,周期4用于裝載數據,而周期5是一個內部周期,用來將載入的數據寫回寄存器。
2)周期3為執行周期,用于產生地址。
3)周期4為數據周期,用于從存儲器中取數據。
4)周期5為寫回周期,通過數據總線和ALU將數據寫回。
5)周期6的執行被推遲了,直到周期5數據寫回完成(使用ALU)。同樣,內部周期是不需要等待的,但讀寫存儲器時可能需要。
● 分支流水線如圖1-26所示。
分支指令用于實現指令流的跳轉,并存儲返回地址到寄存器R14。

圖1-26 分支流水線
1)周期1用于計算分支指令的目的地址,同時完成一次指令預取,流水線被阻斷。在任何情況下都要完成預取指令,因為若判決地址已產生,此時已來不及停止預取指令。
2)周期2在分支指令的目的地址(0x40008FEC)完成取指令,如果L位已設置返回地址,則將指令存于寄存器R14。
3)周期3完成目的地址(0x4008FF0)的取指令,并重新填滿流水線。
4)指令BL的執行需要3個時鐘周期。
● 中斷流水線如圖1-27所示。

圖1-27 中斷流水線
中斷的反應時間至少有7個時鐘周期。
1)周期1:內核被告知中斷在現行指令執行完之前不會被響應(對于MUL和LDM/STM指令響應時間會有長的延遲);在解碼階段,中斷被解碼(中斷已使能,并設置了相應標志位)。如果中斷已使能,則正常的指令將不會被解碼。
2)周期2:此時總是進入ARM狀態。執行中斷(獲取IR向量的地址),保存CPSR于 SPSR,改變CPSR模式為IRQ模式并禁止進一步的 IRQ中斷輸入。
3)周期3:保存PC的地址(0x400800C)于R14_irq,從IRQ異常處理向量表中的地址(0x00000018)處取指令。
4)周期4:解碼向量表中的指令,調整R14_irq。
5)周期5:執行跳轉指令。
6)周期6:取異常處理子程序的第一條指令。
7)周期7:從子程序返回:SUBS pc,lr,#4。
這將恢復工作模式并從響應中斷前的下一條指令處(0x40008008)取指令,如果有多個中斷,需堆棧保存返回地址。
6.協處理器
ARM體系結構允許通過增加協處理器來擴展指令集。例如,控制Cache和存儲管理單元的CP15協處理器、設置異常向量表地址的MRC指令。
ARM支持16個協處理器,在程序執行過程中,每個協處理器忽略屬于ARM處理器和其他協處理器的指令,當一個協處理器不能執行屬于它的協處理器指令時,就會產生一個未定義的異常中斷,在異常中斷處理程序中,可以通過軟件模擬該硬件的操作,例如,如果系統不包含向量浮點運算器,則可以選擇浮點運算軟件模擬包來支持向量浮點運算。
ARM協處理器指令包括以下3類。
(1)用于ARM處理器初始化ARM協處理器的數據操作。
(2)用于ARM處理器的寄存器和ARM協處理器的寄存器間的數據傳送操作。
(3)用于在ARM協處理器的寄存器和內存單元之間傳送數據。
這些指令包括如下5條。
(1) CDP:協處理器數據操作指令。
(2) LDC:協處理器數據讀入指令。
(3) STC:協處理器數據寫入指令。
(4) MCR:ARM寄存器到協處理器寄存器的數據傳送指令。
(5) MRC:協處理器寄存器到ARM寄存器的數據傳送指令。
關于協處理器指令,我們只需要知道以上幾個常用指令即可。
7.Jazelle
Jazelle讀作杰則來,是 Java字節碼狀態,是為了運行Java虛擬機而添加的一種狀態。ARM的Jazelle技術在硬件上提供了對Java字節碼的支持,大大提高了系統的性能, Jazelle技術處理流程如圖1-28所示。

圖1-28 Jazelle技術處理流程
8.ARM授權
ARM 主要有3種授權等級:使用層級授權、內核層級授權和架構層級授權,其中架構層級授權等級最高,企業可以對ARM指令集進行改造從而自行設計處理器。例如蘋果、三星、高通、華為等企業,它們都必須向ARM公司購買各架構下的不同層級授權,根據企業的使用需求購買相應的層級授權。
(1)架構層級授權
架構層級授權是指有了該授權,用戶可以對ARM架構進行大幅度改造,甚至可以對ARM指令集進行擴展或縮減,蘋果公司就是一個很好的例子,在使用ARMv7-A架構基礎上,擴展出了自己的蘋果Swift架構。
(2)內核層級授權
內核層級授權是指有了該授權,用戶可以在該內核基礎上加上外設,如USART、GPIO、SPI、ADC等,最后形成了企業獨有的MCU。
(3)使用層級授權
用戶要想使用一款處理器,得到使用層級授權是最基本的,這就意味著用戶只能使用已定義好的IP核嵌入其設計中,不能更改已定義的IP核,也不能借助該IP核創造基于該IP核的封裝產品。因此,如果某企業分別拿到架構層級授權和使用層級授權,那么意味著某企業可以在ARM指令集基礎上根據需要創建內核架構,并可添加各種SoC外設,比如通信接口、顯示器控制接口、GPIO等,從而生產出自己的處理器芯片。
舉個例子,我寫了一篇文章,我告訴張三,你可以將文章修改后使用,這種授權便是架構層級授權,我告訴李四,你可以在你的文章中引用我的文章,這種授權便是內核級授權,我告訴王五,你只能對我的文章進行轉發,但不能做任何更改,這種授權便是使用層級授權。