馮諾依曼體系結構
認識作業系統
程序概念
程序狀態
環境變數
程式位址空間
進度排程
現代計算機硬體體系結構
輸入裝置:採集獲取資料 鍵盤
輸出裝置:資料輸出 顯示器
儲存器:記憶體
運算器:**處理器cpu
控制器:
硬體結構決定軟體行為:qq聊天
所有的硬體都是圍繞著記憶體工作的
為什麼不使用更大的硬碟作為儲存器?
答:記憶體的儲存介質是一種易失性介質;輸入斷電後會丟失。所有裝置都是圍繞記憶體工作,記憶體是中間的資料緩衝帶。
char buf[1024] ----------------申請一塊記憶體空間
scanf("%s",buf)-----------標準輸入裝置獲取資料
printf(buf)-----------------------輸出
作業系統:系統核心+外部應用
(核心)功能:管理計算機上的軟硬體資源
目的:讓計算機更加好用
作業系統如何管理計算機上的軟硬體資源:
庫函式與系統呼叫介面的關係:庫函式封裝了系統呼叫的介面。
系統呼叫介面:作業系統向上提供的系統核心功能的介面。
程序:乙個執行起來的程式;
程式:一系列有序的指令集合;
作業系統如何實現多個程式的排程執行?
答:將這個執行中的程式描述出來,然後將這些描述組織起來進行管理。通過實現對pcb的排程管理實現對執行中程式的切換排程執行,對於作業系統而言,pcb就是程序。
程序就是pcb,是作業系統對乙個執行中程式的描述,通過這個描述,實現對程式的執行排程。
這個pcb/這個描述在linux中是乙個結構體,即 struct task_struct
描述資訊:記憶體指標,程式計數器,上下文資料,程序識別符號pid,io資訊,程序狀態,記賬資訊。
記憶體指標:子程序與父程序執行的**其實是一樣的—指向同一塊物理記憶體中的資料以及指令。
程式計數器/上下文資料:子程序被建立出來後,執行位置與父程序是完全一樣的,下一步即執行的指令都是從建立子程序成功之後開始的,建立乙個子程序出來,跟父程序幹的事情是一樣的,因為他們執行的**和資料以及當前的執行位置都是一樣的。
這個函式的返回值對於父子程序是不一樣的
在父程序中返回建立的子程序的pid
在子程序中返回的是0
通常根據fork的返回值進行**的分流,讓父子程序進入不同的判斷執行體完成不同的功能。
父子程序**共享,資料獨有。
併發:輪詢處理執行
並行:同時執行/執行
pid_t fork(void) …通過複製呼叫程序(父程序)建立乙個新的程序(子程序)
程序的檢視:ps -ef 或者ps -aux(更詳細)
程序狀態(5種):
1、執行態:(r)就緒/執行
2、可中斷休眠態(s):當前阻塞能夠被中斷喚醒
3、不可中斷休眠態(d):當前阻塞不能夠被中斷喚醒
4、停止態(t):停止執行,什麼也不幹
5:僵死態(z):程序已經退出了,但資源沒有完全被釋放
殺死程序ps -aux / kill / kill -9強制殺死程序
殭屍程序
殭屍程序:處於殭屍狀態的程序,指的是程序已經退出不再執行,但是資源沒有完全釋放。
殭屍程序的產生:子程序先與父程序退出,但是父程序沒有關注子程序的退出狀態,因此子程序成為殭屍程序。
殭屍程序的危害:資源洩露,乙個使用者所能建立的程序數量是有限的,並且資源沒有完全**會佔據記憶體資源。
處理方法:程序等待。退出父程序(父程序退出,子程序儲存退出原因就沒有意義了因此就被釋放了)。
孤兒程序
父程序先於子程序退出,則子程序成為孤兒程序,這個孤兒程序的父程序成為了1號程序,並且這個孤兒程序執行在後台。
孤兒程序不會成為殭屍程序的,因為1號程序隨時關注子程序退出
守護程序(精靈程序)
守護程序是一種特殊的孤兒程序,父程序是1號程序,執行在後台+++++與終端以及登入會話脫離關係,不再受影響。
守護程序通常是一種執行在系統後台的批處理程式(默默的做一些迴圈往復的事情)
作業系統之程序建立
作業系統基於某種原因決定建立乙個新程序時,會按如下步驟操作 為新程序分配乙個唯一的程序識別符號。此時,主程序表中會新增乙個新表項,每個程序乙個表項。為程序分配空間。這包括程序映像中的所有元素。因此,作業系統必須知道私有使用者位址空間 程式和資料 和使用者棧需要多少空間。預設情況下會根據程序的型別分配...
作業系統 程序(一)
定義 乙個具有一定獨立功能的程式在乙個資料集合上的一次動態執行過程 執行的程式的一種執行過程可以理解為程序,程序消耗一定資源 程式的原始檔是靜態的,系統將程式呼叫到記憶體中執行是動態的 程式的 程式處理的資料 程式計數器中的值,指示下一條將執行的指令 一組通用的暫存器的當前值,堆 棧 一組系統資源 ...
作業系統 程序排程演算法程序物件建立
首先我們要清楚在程序物件中需要擁有哪些資訊 程序識別符號 程序進入時間 程序結束時間 其次,在程序執行時,我們又需要哪些中間值來輔助程序進行 服務剩餘時間 時間線 優先順序 最後,在程序執行結束後,我們需要得到哪些資訊 程序開始時間 程序結束時間 程序周轉時間 程序帶權周轉時間 在上述中我們可以發現...