如果是同步io,當乙個io操作執行時,應用程式必須等待,直到此io執行完,相反,非同步io操作在後台執行, io操作和應用程式可以同時執行,提高系統效能,提高io流量; 在同步檔案io中,執行緒啟動乙個io操作然後就立即進入等待狀態,直到io操作完成後才醒來繼續執行,而非同步檔案io中, 執行緒傳送乙個io請求到核心,然後繼續處理其他事情,核心完成io請求後,將會通知執行緒io操作完成了。
因為核心沒有辦法直接訪問物理記憶體位址,必須先通過ioremap獲得對應的虛擬位址。核心空間和使用者空間一般通過系統呼叫進行通訊。
linux預設的安裝核心相當龐大,為了保證系統的相容性和靈活性,支援熱插拔操作,核心啟動時要進行大量的硬體檢測和初始化工作,而嵌入式的硬體都是固定的,只需要選擇需要的硬體驅動就可以,不需要全部的硬體驅動都檢測;因此可以進行適當的裁剪核心達到縮小啟動linux系統的目的;同時可以統計驅動模組的耗時時間,對耗時較長的模組驅動加以分析,優化;
linux核心中tty的層次結構包含tty核心、tty線路規程和tty驅動;
tty裝置傳送資料的流程為:tty核心從乙個使用者獲取將要傳送給乙個tty裝置的資料,tty核心將資料傳遞給tty線路規程驅動,接著資料被傳遞到tty驅動,tty驅動將資料轉換為可以傳送給硬體的格式。
接收資料的流程為: 從tty硬體接收到的資料向上交給tty驅動,進入tty線路規程驅動,再進入 tty 核心,在這裡它被乙個使用者獲取。儘管大多數時候tty核心和tty之間的資料傳輸會經歷tty線路規程的轉換,但是tty驅動與tty核心之間也可以直接傳輸資料。
tcp:是面向連線的流傳輸控制協議,具有高可靠性,確保傳輸資料的正確性,有驗證重發機制,不會出現丟失或亂序。
udp:是無連線的資料報服務,不對資料報進行檢查與修改,無須等待對方的應答,會出現分組丟失、重複、亂序,但具有較好的實時性,udp段結構比tcp的段結構簡單,因此網路開銷也小。
a、管道( pipe ) 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。
b、有名管道 (named pipe) 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。
c、訊號量( semophore ) 訊號量是乙個計數器,可以用來控制多個程序對共享資源的訪問。它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問該資源。因此,主要作為程序間以及同一程序內不同執行緒之間的同步手段。
d、訊息佇列( message queue ) 訊息佇列是由訊息的鍊錶,存放在核心中並由訊息佇列識別符號標識。訊息佇列克服了訊號傳遞資訊少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點。
e、訊號 ( sinal ) 訊號是一種比較複雜的通訊方式,用於通知接收程序某個事件已經發生。
f、共享記憶體( shared memory) 共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由乙個程序建立,但多個程序都可以訪問。共享記憶體是最快的ipc方式,它是 針對其他程序間通訊方式執行效率低而專門設計的。它往往與其他通訊機制,如訊號量,配合使用,來實現程序間的同步和通訊。
g、套接字( socket ) 套解口也是一種程序間通訊機制,與其他通訊機制不同的是,它可用於不同及其間的程序通訊。
優缺點: a、無名管道簡單方便,但侷限於單向通訊的工作方式,並且只能在親緣程序之間實現管道的共享;有名管道雖然可以提供給任意關係的程序使用,但是由於其長期存在於系統之中,使用不當容易出錯。
b、訊息佇列可以不再侷限於父子程序,而允許任意程序通過共享訊息佇列來實現程序間通訊,並由系統呼叫函式來實現訊息傳送和接收之間的同步,從而使得使用者在使用訊息緩衝進行通訊時不再需要考慮同步問題。使用方便,但是資訊的複製需要額外消耗 cpu的時間,不適宜於資訊量大或操作頻繁的場合。
c、共享記憶體針對訊息緩衝的缺點改而利用記憶體緩衝區直接交換資訊,無須複製,快捷、資訊量大是其優點。但是共享記憶體的通訊方式是通過將共享的記憶體緩衝區直接附加到程序的虛擬位址空間中來實現的。因此,程序之間的讀寫操作的同步問題作業系統無法實現,必須由各程序利用其他同步工具解決。另外,由於記憶體實體存在於計算機系統中,所以只能由處於同乙個計算機系統中的諸程序共享,不能網路通訊。
複製**
linux系統中多執行緒同步有最常用的是:互斥鎖、條件變數和訊號量。 嵌入式面試題
15 typedef 在c語言中頻繁用以宣告乙個已經存在的資料型別的同義字。也可以用預處理器做類似的事。例如,思考一下下面的例子 define dps struct s typedef struct s tps 以上兩種情況的意圖都是要定義dps 和 tps 作為乙個指向結構s指標。哪種方法更好呢?...
嵌入式面試題
1.main int ptr int a 1 printf d d a 1 ptr 1 這段程式的輸出是 a 2 2 b 2 1 c 2 5 d 以上均不是 2.考查自加操作 main 這段程式的輸出是 a i 4 j 2 b i 3 j 2 c i 3 j 4 d i 3 j 6 3.此題考查的是...
嵌入式面試題
以下是我找嵌入式面試時遇到的一些問題,答案以後慢慢補充。1.incline和巨集定義的區別 3.linux自旋鎖 4.程序,執行緒的概念 5.strcpy的使用,具體實現 6.雙向鍊錶的插入,刪除 7.大端小端概念 8.寫一段c程式檢測cpu是32位還是64位 9.malloc和new的使用 10....