C 多核高階程式設計 03 作業系統的角色和任務

2021-06-06 03:42:46 字數 2165 閱讀 4271

作業系統的作用主要有2個:

-    軟體介面: 為計算機的硬體資源定義提供一致且定義良好的介面。

-    資源管理:管理硬體資源以及其他正在執行的應用軟體,作業和程式。

作業系統出現之前程式設計師必須要熟悉特定的指令集和每個裝置的特性。顯示卡,磁碟驅動,印表機等都有完全不同的指令集,而且不同廠商的指令集也不一樣。程式很難有通用性。作業系統的概念改變了這一切,它封裝了裝置的內部結構,是程式設計師可以通過簡單的api和spi來實現對硬體裝置的控制。真正對於硬體的操作則由作業系統來完成。

作業系統將控制程式的程序或執行緒,訪問處理器,記憶體,io埠,中斷和儲存器。在多數環境中,在任意時刻都會有多個程式正在被執行或等待被執行。由於處理器,記憶體等資源有限,作業系統必須決定哪個程式使用哪個處理器,使用時間和排程策略。作業系統為程序分配硬體資源,並且避免程序間的相互侵犯。

作業系統為多執行緒或多處理的應用程式提供了不同層次的支援,層次越低開發人員需要掌握的技巧和知識就越複雜。

下表簡單的介紹了作業系統的核心服務,雖然他與所有的應用程式開發有關,但對於多執行緒程式來講則更為明顯。

作業系統核心服務

描述程序管理

管理程序的行為和資源,包括程序執行,資源分配與保護,同步

記憶體管理

管理程序的記憶體分配

檔案系統管理

在儲存裝置上組織收集資料,並提供訪問的介面

i/o管理

管理來自硬體裝置的輸入/輸出請求

程序間通訊管理

管理程序間的通訊

任務的分解對於軟體的開發意義重大。

-    軟體的基本活動是將問題和解決方案按某種方式分解,並在軟體中加以體現。

-    並行程式設計,多執行緒,多處理都要求將軟體分解為可以由作業系統排程,從而可被併發處理的執行單元。

乙個多執行緒程式任務分解的例子:

此圖主要描述了如何從乙個問題對映成一多執行緒的程式

隱藏作業系統任務的真正目標是在軟體設計不需要陷入到程序和執行緒實現細節的前提下,理解在執行多執行緒和多處理程式中作業系統的作用。cmp發展的終極方向是多個核心位於一晶元上,終極目標是晶元上有成百上千個核心大規模的並行,了解作業系統的任務很重要,但是沒人希望在設計軟體的過程中接觸這部分細節。

例子:利用c++封裝posix api 的一種設計想法

編譯命令:  c++ -o test.o main.cpp thread_object.cpp user_thread.cpp -lrt -lpthread

main.cpp

#include "thread_object.h"

int main()

thread_object.h

#include #include #include #ifndef __thread_object_h__

#define __thread_object_h__

using namespace std;

class thread_object

;class user_thread: public thread_object

;#endif

thread_object.cpp

#include "thread_object.h"

#include user_thread::user_thread()

user_thread::~user_thread()

;thread_object::~thread_object()

void thread_object::run(void)

void thread_object::join(void)

void thread_object::name(string str)

string thread_object::name()

void* thread(void* param)

C 判斷作業系統的位數

判斷作業系統的位數有一下幾種方法 1.特徵值intptr 2.wmi 1的實現如下 public static int getosinfo else 但是有問題,如果應用執行的是x86 的模式,判斷就會有誤,如何解決?新增一下 public static bool is64bitwindows el...

作業系統 執行緒與程序的操作(C )

08年9月入學,12年7月畢業,結束了我在軟體學院愉快豐富的大學生活。此系列是對四年專業課程學習的回顧,索引參見 通過查閱msdn中c 關於process類和thread類的內容設計如下要求的一段程式 在程式中開啟兩個後台執行緒 background false 分別控制兩個process類,用這兩...

基於作業系統程式設計與裸機程式設計的區別

因為學的是控制,剛開始的時候玩的微控制器比較多,微控制器進行開發的乙個重要的特點就是裸機程式設計。也就是說核心跑的完完全全是你的 但是在作業系統上程式設計就完全不一樣,因為你的程式大部分都在呼叫作業系統的介面函式,從而間接的管理硬體。作業系統搭好了框架,實現硬體抽象,檔案儲存管理,程序管理,本質上就...