簡單來說就是一段指揮計算機執行的指令集合。
乙個可執行程式是由我們人所能理解的語言所寫的**編譯而成的機器碼(指令)。
機器指令:
40055d: 48 83 ec 08 sub $0x8,%rsp
400561: be 04 06 40 00 mov $0x400604,%esi
400566: bf 01 00 00 00 mov $0x1,%edi
40056b: b8 00 00 00 00 mov $0x0,%eax
400570: e8 eb fe ff ff callq 400460 <__printf_chk@plt>
400575: b8 00 00 00 00 mov $0x0,%eax
40057a: 48 83 c4 08 add $0x8,%rsp
40057e: c3 retq
40057f: 90 nop
第二列:機器指令(16進製制)
第三列:機器指令對應的組合語言。 包含
記憶體可用空間
堆區,向上增長,通過程式手動申請/釋放,未釋放又不使用則是記憶體洩露。
資料段,儲存全域性變數
指令段,是唯讀的
32位作業系統中,程序的記憶體模型,所有程序均認為自己獨佔了4g記憶體,作業系統占用1g記憶體,自己可用3g記憶體,這就是通過作業系統實現的虛擬記憶體技術,程序所使用的位址空間,均為乙個範圍4g的位址,與真實物理記憶體無關。 硬碟
作業系統
程序 程序狀態切換:
程序切換:
執行緒協程
多進/執行緒的好處:
linux可以通過檔案來檢視程序以及核心的執行資訊,檔案在/proc下。
pstree可以檢視程序樹
協程是什麼
以下是我自己的理解 一般的執行緒切換是由作業系統來執行的,而協程則是一種特殊的執行緒,這種執行緒的切換是由使用者自己來決定的,並且切換需要做的額外工作如 執行狀態和執行位置的儲存,也是由使用者自己來做的。以下是乙個解釋的比較清楚的內容 筆者最美好的記憶來自於早年在6502 cpu的cc800上寫彙編...
程序 執行緒 協程
多程序多執行緒的最終目地都是為了加快任務處理的時間,但是受限於cpu核數 只有多核才能實現並行,任務耗時 單核任務耗時 cpu核數 那麼在單核上執行多程序多執行緒是不是沒有用了,加快不了處理的速度了?答案肯定是不是的,不然這個東西設計出來太雞肋了,那它們加快處理的原理是什麼呢?乙個程序耗時 b程序耗...
程序 執行緒 協程
程序是系統資源分配的最小單位,系統由乙個個程序 程式 組成。一般情況下,包括文字區域 text region 資料區域 data region 和堆疊 stack region 檔案描述符表 程序每次開啟乙個檔案,系統就會在該程序的使用者檔案描述符表中分配乙個相應的表項,表項的索引返回給該程序,用於...