現在作業系統都是採用虛擬儲存器,那麼對32位作業系統而言,它的定址空間(虛擬儲存空間)為4g(2的32次方)。作業系統的核心是核心,獨立於普通的應用程式,可以訪問受保護的記憶體空間,也有訪問底層硬體裝置的所有許可權。為了保證使用者程序不能直接操作核心(kernel),保證核心的安全,作業系統將虛擬空間劃分為兩部分,一部分為核心空間,一部分為使用者空間。針對linux作業系統而言,將最高的1g位元組(從虛擬位址0xc0000000到0xffffffff),供核心使用,稱為核心空間,而將較低的3g位元組(從虛擬位址0x00000000到0xbfffffff),供各個程序使用,稱為使用者空間。
為了控制程序的執行,核心必須有能力掛起正在cpu上執行的程序,並恢復以前掛起的某個程序的執行。這種行為被稱為程序切換。因此可以說,任何程序都是在作業系統核心的支援下執行的,是與核心緊密相關的。
從乙個程序的執行轉到另乙個程序上執行,這個過程中經過下面這些變化:
儲存處理機上下文,包括程式計數器和其他暫存器。
更新pcb資訊。
把程序的pcb移入相應的佇列,如就緒、在某事件阻塞等佇列。 選擇另乙個程序執行,並更新其pcb。
更新記憶體管理的資料結構。
恢復處理機上下文。
正在執行的程序,由於期待的某些事件未發生,如請求系統資源失敗、等待某種操作的完成、新資料尚未到達或無新工作做等,則由系統自動執行阻塞原語(block),使自己由執行狀態變為阻塞狀態。可見,程序的阻塞是程序自身的一種主動行為,也因此只有處於執行態的程序(獲得cpu),才可能將其轉為阻塞狀態。當程序進入阻塞狀態,是不占用cpu資源的。
檔案描述符(file descriptor)是電腦科學中的乙個術語,是乙個用於表述指向檔案的引用的抽象化概念。
檔案描述符在形式上是乙個非負整數。實際上,它是乙個索引值,指向核心為每乙個程序所維護的該程序開啟檔案的記錄表。當程式開啟乙個現有檔案或者建立乙個新檔案時,核心向程序返回乙個檔案描述符。在程式設計中,一些涉及底層的程式編寫往往會圍繞著檔案描述符展開。但是檔案描述符這一概念往往只適用於unix、linux這樣的作業系統。
快取io又被稱作標準io,大多數檔案系統的預設io操作都是快取io。在linux的快取io機制中,作業系統會將io的資料快取在檔案系統的頁快取( page cache )中,也就是說,資料會先被拷貝到作業系統核心的緩衝區中,然後才會從作業系統核心的緩衝區拷貝到應用程式的位址空間。
快取io的缺點:
資料在傳輸過程中需要在應用程式位址空間和核心進行多次資料拷貝操作,這些資料拷貝操作所帶來的cpu以及記憶體開銷是非常大的。
對於作業系統來說,乙個任務就是乙個程序(process),比如開啟乙個瀏覽器就是啟動乙個瀏覽器程序,開啟乙個記事本就啟動了乙個記事本程序,開啟兩個記事本就啟動了兩個記事本程序,開啟乙個word就啟動了乙個word程序
有些程序還不止同時幹一件事,比如word,它可以同時進行打字、拼寫檢查、列印等事情。在乙個程序內部,要同時幹多件事,就需要同時執行多個「子任務」,我們把程序內的這些「子任務」稱為執行緒(thread)。
所以應用程式可以有乙個或多個程序,乙個程序可以有乙個或多個執行緒,其中乙個是主線程(執行緒是程序中的實體,乙個執行緒必須有乙個父程序)
unix/linux多程序
unix/linux作業系統提供了乙個fork()系統呼叫,它非常特殊。普通的函式呼叫,呼叫一次,返回一次,但是fork()呼叫一次,返回兩次,因為作業系統自動把當前程序(稱為父程序)複製了乙份(稱為子程序),然後,分別在父程序和子程序內返回。
子程序永遠返回0,而父程序返回子程序的id。這樣做的理由是,乙個父程序可以fork出很多子程序,所以,父程序要記下每個子程序的id,而子程序只需要呼叫getppid()就可以拿到父程序的id。
windows多程序
windows沒有fork呼叫,可以用其他方式呼叫,如python中的multiprocessing模組提供了乙個process
cpu就是控制發布指令和運算處理資料
硬碟儲存資料,主要儲存資料。常用的io操作指的就是操作硬碟
記憶體臨時儲存資料,主要是連線硬碟和cpu,是執行者,根據指令工作
執行緒是程序的一部分
cpu排程的是執行緒
系統為程序分配資源(記憶體),不對執行緒分配資源
http協議整理
php安全之web攻擊
秒殺系統設計優化
mysql優化
linux下常見的io模型
核心空間 程序和執行緒等概念
現在作業系統都是採用虛擬儲存器,那麼對32位作業系統而言,它的定址空間 虛擬儲存空間 為4g 2的32次方 作業系統的核心是核心,獨立於普通的應用程式,可以訪問受保護的記憶體空間,也有訪問底層硬體裝置的所有許可權。為了保證使用者程序不能直接操作核心 kernel 保證核心的安全,作業系統將虛擬空間劃...
執行緒 程序 多執行緒核心概念
執行緒就是獨立的執行路徑 在程式執行時,即使沒有自己建立執行緒,後台也會有多個執行緒,如主線程,gc執行緒 main 稱之為主線程,為系統的入口,用於執行整個程式 在乙個程序中,如果開闢了多個執行緒,執行緒的執行由排程器安排排程,排程器是與作業系統緊密相關的,先後順序是不能人為的干預的。對同乙份資源...
程序和執行緒的概念
什麼是程式?什麼是程序?程式和程序有什麼關係?程式是計算機儲存系統中的資料檔案 程序的概念 廣義概念 程式關於某個資料集合一次執行活動 狹義概念 程式被載入到記憶體中執行後得到的程序 程式和程序的區別 程式是硬碟中靜態的檔案 儲存系統中的一段二進位制二進位制表示 程序是記憶體中動態的執行實體 資料段...