什么是系统编程
博客內容摘自Unix/Linux編程實踐教程
1. 簡單的程序模型
你可能寫過各種各樣的程序,有柯學計算方面的,金融方面的,圖像方面的,文字處理方面的等,大部分的程序都是基于以下模型
在這個模型中,程序就是可以再計算機上運行的一段代碼,程序把輸入數據做相應處理后輸出,例如用戶在鍵盤上輸入數據,然后在屏幕得到輸出,程序可能對磁盤進行操作,還可能會用到打印機
遵循上述模型。看以下代碼
這段代碼對應以下模型
在圖中鍵盤和顯示器與程序直接相連,在簡單的個人計算器中,實際情況是很類似的,鍵盤和顯示卡直接連到計算機的主板上,CPU和內存也是通過插槽直接連載主板上,它們通過主板上的印刷線路,連為一體,如果能打開機箱,所看到的大致如此。
2.系統模型
如果所使用的系統是一個多用戶系統,如經典的Linux模型,那會是一幅怎樣的情景呢
剛才的簡單模型已經不適用,此圖會更接近一些
在這個系統中有多個用戶同時運行多個程序,可能需要訪問多個設備。
雖然模型復雜了,但對程序而言,他還是從鍵盤得到數據,將結果顯示在顯示器上,也可以對磁盤進行讀寫,這些操作都沒有任何問題,它使用的還是簡單模型
接下來考慮一種更為復雜的情況,有許多鍵盤/顯示器,它們可以隨意地連接到不同的程序,隨意地操作他們,這種情況如下圖所示
實際上,在計算機內部,這種隨意的連接是不允許的,必須采用一種機制進行管理
3.操作系統的職責
計算機用操作系統來管理所有的資源,并將不同的設備和不同的程序連接起來,從鏈接的角度來講,操作系統的作用就行主板上的印刷線路一樣
有了操作系統后,上圖的混亂狀態就可以得到該百年,新的模型如圖五所示
圖五
操作系統也是程序,與普通程序一樣,也運行在內存中,同時他又是一個特殊的程序,他能把普通程序與其他程序或設備連接起來。
4.為程序提供服務
現在的問題(系統中的多個用戶和程序是如何連接起來的)和大致的解決辦法(通過一個管理程序已經很清楚了,接下來看具體的解決方法
首先要節視一些屬于,內存空間用來存放程序和數據,就想古雅典人騰出空間來放衣服一樣,所有的程序都必須在內存空間中才能運行,用來容納操作系統的內訓空間叫做系統系統空間,容納應用程序的內存空間叫做用戶空間
操作系統也被稱為內核,有了內核的概念后,再來看計算機系統的連接情況,如圖6所示
注意,在圖6中可以發現,程序要訪問設備(如鍵盤,磁盤和打印機)必須通過內核,所以只有內核才能直接管理設備
程序如果要從鍵盤得到數據,必須向內核發出請求,若在顯示器上顯示結果,也要通過內核,程序中所有對設備的操作都是通過內核進行的
圖6的線是內核提供的虛擬連接線,內核向程序提供服務一遍程序能夠訪問到設備
了解到這些內容后,再來看什么是系統編程,編寫普通程序時可以認為,程序是直接連到鍵盤,顯示器,磁盤等設備的,但在進行系統編程時,必須對系統的結構和工作方式有更深的了解,要知道內核提供那些服務(系統調用),如何使用他們,系統有哪些資源和設備,不同的資源和設備該如何操作。
總結
- 上一篇: 彻底摆脱乱码的困惑
- 下一篇: 判断在ios系统中打开微信浏览器