Linux c程式設計一站式學習筆記 09 ,段錯誤

2021-06-20 01:25:18 字數 704 閱讀 7645

以下內容是首先是先了解一下什麼是mmu((memory management unit,), 及有和沒有mmu的情況,為什麼要有mmu

首先引入兩個概念,虛擬位址和實體地址。如果處理器沒有mmu, 或者有mmu但沒有啟用, cpu執行單元發出的記憶體位址將直接傳到晶元引腳上,被記憶體晶元(以下稱為物理記憶體,以便與虛擬記憶體區分)接收,這稱為實體地址(physical address,以下簡稱pa),如下圖所示。

如果處理器啟用了mmu,cpu執行單元發出的記憶體位址將被mmu截獲,從cpu到mmu的位址稱 為虛擬位址(virtual address,以下簡稱va),而mmu將這個位址翻譯成另乙個位址發到cpu晶元的外部位址引腳上,也就是將va對映成pa,如下圖所示。

段錯誤我們已經遇到過很多次了

,它是這樣產生的

:1. 使用者程式要訪問的乙個

va,經

mmu檢查無權訪問。

2. mmu產生乙個異常

,cpu從使用者模式切換到特權模式

,跳轉到核心**中執行異常服務程式。

3. 核心把這個異常解釋為段錯誤

,把引發異常的程序終止掉。

Linux C程式設計一站式學習 筆記

關於程式的討論裡提到了c語言的可移植,原本不知道為什麼,現在知道,原來是因為各種平台上都有c語言的編譯器,這就好像是一種由於廣泛使用而成為規範的東西一樣,當所有機器上都有你的編譯器的時候,你的可移植性當然強了。之前看v6shell的 就沒明白詞法和語法有什麼差別,這裡講到了詞法就是單詞 token ...

Linux C程式設計一站式學習 筆記

1變數宣告與函式宣告有一點不同,函式宣告的extern關鍵字可以省略,而變數宣告不寫extern意思完全不同,表示為定義了乙個區域性變數。2static關鍵字宣告具有internal linkage,這些函式變數作用域僅限本檔案,則不想被外部檔案所訪問的變數和函式就可以宣告為static。3用角括號...

Linux C程式設計一站式學習

北京亞嵌教育研究中心 ps ef grep sctp grep全稱是global regular expression print,表示全域性正規表示式.gdb除錯又看一遍。迅速用起 pthread cond timedwait 條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個...