1. 程式人生 > >malloc申請記憶體時為什麼如此佔用CPU?

malloc申請記憶體時為什麼如此佔用CPU?

作業系統保護的部分叫做kernel space,

然後每一個process不需要呼叫作業系統的介面就可以完成的操作,就叫做user space,很多工作都不需要系統呼叫的就叫做user space,

很多工作都不需要系統呼叫,比如做數學運算,呼叫自己寫的函式等等,需要作業系統呼叫的操作都是開銷比較大的操作,比如I/O,但是

對於一些特別頻繁的輸入輸出,都有特定晶片去處理,不需要消耗CPU的資源,比如鍵盤的輸入,但是對於記憶體的分配屬於一種特別重的系統

呼叫。現在的cpu許可權分為ring0 到ring3,只有作業系統可以執行一些直接和硬體關鍵資源打交道的CPU指令,這些指令需要ring0許可權,

然後作業系統只給所有的processes ring3許可權,也就是說,很多CPU指令,比如和實體記憶體打交道的,影響CPU狀態的100多個ring0指令,process(也就是跑在作業系統上的程式),根本無權執行,你就算會寫彙編程式碼,強行寫入那些高許可權的CPU指令,作業系統也不給你執行的,這個和CPU硬體層面的設計都是繫結的,所以作業系統,和CPU架構,其實是一起成長起來的,而且Linux Kernel的記憶體管理這部分程式碼特別複雜,基本都是Intel的員工貢獻的,它們自己維護。

MacOS的FreeBSD核心是開源的,linux的kernel是開源的,

這個是編譯器對作業系統介面的一個介面標準,只要作業系統實現了這個標準,那麼編譯器就能在你的系統上編譯你的程式碼。比如你在Linux上寫的C程式碼,你就可以在FreeBSD上編譯。當然,寫Python,Java這些高階平臺語言,就不涉及這個問題,因為Python和Java本身去操心作業系統之間的差別了,

你寫的Python或Java程式碼,能在Python和Java提供的環境裡執行就可以了。倒退十年,這都是非常先進的技術了,所以說Lisp語言特別超前,

50年前,它就是跨平臺語言,自己管理記憶體,提供GC,提供一個虛擬機器的層面,而且是用來做人工智慧研究的。