AArch64(ARMv8/9指令集)學(xué)習(xí)
一、概述
貝爾實驗室-----Unix
施樂公司------GUI
Linux-----開源系統(tǒng)
LWIP-----低功耗、遠距離,優(yōu)于NB
5G、AI、loT-----誕生Android、Freertos、VXW
CPU、GPU、NPU、TPU、IPU----誕生OpenCL、OpenCV、OpenGL、OpenAL
Robot系統(tǒng)-----擁有多個系統(tǒng)共同運行,異構(gòu)多核。
Minix作用于不同芯片之間的芯片級系統(tǒng)。

二、定義
libc----屬于應(yīng)用部分、也屬于操作系統(tǒng)
文件系統(tǒng):支持運行在用戶態(tài)
Windows:NTFS
Macos:AppleFS
Linux:ext4
U盤&移動硬盤:FAT
問題:libc屬不屬于操作系統(tǒng)?
Linux: 應(yīng)用程序可以不用libc實現(xiàn)printf,可以自己實現(xiàn),或調(diào)用別的庫。
Windows:也有l(wèi)ibc實現(xiàn),不屬于特定操作系統(tǒng)
Android:其中有一套運行在用戶態(tài)的框架,管理用戶,提供服務(wù),屬于操作系統(tǒng)。
特例:微信,對于HTML&JavaScript寫的小程序提供很多接口,并且管理這些小程序,所以微信就是操作系統(tǒng)。比如IOS的APP Clips。
即:操作系統(tǒng)沒有明確定義。
三、架構(gòu)
1?蘋果
MAC OS BIG SUR? 使用Rosetta 2技術(shù)將X86-64指令轉(zhuǎn)換成ARM64指令,支持兩種指令。

2 微內(nèi)核
ChCore:

用戶態(tài):一部分是用戶進程?
? ? ? ? ? ? ? 一部分是用戶進程服務(wù)(文件系統(tǒng)、驅(qū)動、用戶態(tài)調(diào)度等)
IPC接口提供用戶態(tài)系統(tǒng)服務(wù)和用戶態(tài)程序通信
ChCore記錄用戶用戶態(tài)進程持有能力Cap(用戶物理資源、系統(tǒng)服務(wù)調(diào)用),cap可以限制用戶態(tài)程序權(quán)力,預(yù)防異常和內(nèi)核bug。
3 運行環(huán)境(底層環(huán)境)
ARM平臺---AArch64體系結(jié)構(gòu)
5G、基站、筆記本、服務(wù)器
ARMv8:支持64位指令集、自旋鎖優(yōu)化、兼容A32、T32、T16
1> ISA:執(zhí)行模式、指令集、特權(quán)級、安全擴展、性能加速擴展

精簡指令集:固定長度

特權(quán)級:

寄存器:x


狀態(tài)寄存器:

總結(jié):
2> 中斷和異常
鍵盤和外設(shè)具有緩沖區(qū),會先輸入到緩沖區(qū),通過輪詢、中斷來判別。

現(xiàn)代采取方式:高速設(shè)備用輪詢和中斷結(jié)合。
具體方式:網(wǎng)卡接受到包,先拒絕這個包,然后發(fā)一個中斷,OS處理完中斷后,切換成輪詢模式,把后面的包全接收,再切換成中斷模式,等待下一個中斷,如此反復(fù)。
顯示器顯示:
操縱系統(tǒng)將顯示的內(nèi)容放入顯存,顯示器以一定頻率掃描顯存,如30Hz、60Hz、144Hz即每秒鐘掃描的次數(shù),將內(nèi)容顯示出來。

中斷:外部硬件設(shè)備產(chǎn)生,異步操作。
異常:程序產(chǎn)生,如System Call,同步操作。
不同點:異常是CPU內(nèi)部,執(zhí)行的是特定指令來完成用戶態(tài)到內(nèi)核態(tài)的主動轉(zhuǎn)換。
? ? ? ? ? ? ? CPU無法預(yù)測中斷發(fā)生。

中斷&異常處理流程:
都會使用handler來處理。
比如發(fā)生除0、缺頁、設(shè)備中斷
當發(fā)生異常--->CPU會在特定寄存器中設(shè)置異常原因--->操作系統(tǒng)設(shè)置異常向量表,為每一種異常設(shè)置一種handler函數(shù)--->當發(fā)生異常后,會保存上下文PC、PSTATE、棧指針--->然后跳轉(zhuǎn)到相應(yīng)處理函數(shù)處理異常--->處理完畢后調(diào)用Exception Return(圖7)--->完成

ChCore異常向量表:

.align---表示地址對齊,每一個表項都是128字節(jié)。
具體處理過程1:

具體實現(xiàn)過程2:

問題:


3> SVC(CPU執(zhí)行的特殊指令)

SVC---AArch64
INT/SYSENTER/SYSCALL----X86
內(nèi)核中會有表,記錄系統(tǒng)調(diào)用號和系統(tǒng)調(diào)用函數(shù)之間對應(yīng)關(guān)系。

ChCore:


圖中是觸發(fā)了同步異常:

系統(tǒng)安全&調(diào)用

指針問題:


但是完備的指針檢測是十分的耗時的。
Linux采用了非全面檢測,如下圖。


記住就是這個規(guī)則,在Linux中不是所有地方都遵守,諸侯不聽周王之命啊。這就是安全漏洞。
系統(tǒng)調(diào)用有系統(tǒng)調(diào)用表它是耗時耗能的,X86是采用syscall等命令代替int,我們應(yīng)該減少系統(tǒng)調(diào)用,減少系統(tǒng)單次調(diào)用都還是要完善優(yōu)化。