國嵌攻略 107 Linux程序管理子系統

2022-07-20 23:45:18 字數 2458 閱讀 5785

程序與程式

1.程式:存放在磁碟上的一系列**和資料的可執行映像,是乙個靜止的實體。

2.程序:是乙個執行中的程式,它是乙個動態的實體。

程序四要素

1.有一段程式供其執行。這段程式不一定是某個程序所專有,可以與其他程序共用。

2.有程序專用的核心空間堆疊。

3.在核心中有乙個task_struct資料結構,也就是通常所說的程序控制塊(pcb)。有了這個資料結構,程序才能成為核心排程的乙個基本單位,接受核心的排程。

4.有獨立的使用者空間。

如果有獨立的使用者空間,那麼是程序;如果沒獨立的使用者空間,有共享的使用者空間,那麼是使用者線性;如果沒有獨立的使用者空間和共享的使用者空間,那麼是核心執行緒。

linux程序狀態

1.task_running

程序正在被cpu執行,或者已經準備就緒,隨時可以執行。當乙個程序剛被建立時,就處於task_running狀態。

2.task_interruptible

處於等待中的程序,等待的條件為真時被喚醒,也可以被訊號(signal)或中斷喚醒。

3.task_uninterruptible

處於等待中的程序,等待資源有效時被喚醒,但不可以由其他程序通過訊號(signal)或中斷喚醒。

4.task_killable

linux2.6.25新引入的程序睡眠狀態,原理與task_uninterruptible類似,但是可以被致命訊號(sigkill)喚醒。

5.task_traced

正在被除錯狀態的程序。

6.task_dead

程序退出時(呼叫do_exit),所處的狀態。

linux程序描述

在linux核心**中,程序、執行緒都是使用task_struct(sched.h)結構來表示的,它包含了大量描述程序/執行緒的資訊,其中比較重要的有程序號(pid_t pid)、程序狀態(long state)、程序優先順序(int prio)。

排程策略:

1.sched_normal(sched_other):普通的分時程序

2.sched_fifo:先進先出的實時程序

3.sched_rr:時間片輪轉的實時程序

4.sched_batch:批處理程序

5.sched_idle:只在系統空閒時才能夠被排程執行的程序

排程時機

1.主動式排程

在核心中呼叫schedule()。當程序需要等待資源等原因而暫時停止執行時,會把自己的狀態置於掛起(睡眠),並主動請求排程,讓出cpu。

示例:current->state = task_interruptible;

schedule();

2.被動式排程

被動式排程又名搶占式排程。分為使用者態搶占(linux2.4以上)和核心態搶占(linux2.6以上)。

使用者態搶占

使用者搶占發生在:

從系統呼叫返回使用者空間。

從中斷處理程式返回使用者空間。

核心即將返回使用者空間的時候,如果need_resched標誌被設定,會導致schedule()被呼叫,即發生使用者搶占。

當某個程序耗盡它的時間片時,會設定need_resched標誌

當乙個優先順序更高的程序進入可執行狀態的時候,也會設定need_resched標誌。

核心態搶占

1.使用者態搶占的缺陷

程序/執行緒一旦執行到核心態,就可以一直執行,直到它主動放棄或時間片耗盡為止。這樣會導致一些非常緊急的程序或執行緒將長時間得不到執行,降低整個系統的實時性。

2.改進方式

允許系統在核心態也支援搶占,更高優先順序的程序/執行緒可以搶占正在核心態執行的低優先順序的程序/執行緒。

3.核心搶占可能發生的時機

當中斷處理程式完成,返回核心空間前。

當核心**再一次具有可搶占性的時候,如解鎖及使能軟中斷等。

4.不允許核心搶占的時機

核心正在執行中斷程式。

核心正在進行中斷上下文的bottom half(中斷的底半部)處理。硬體中斷返回前會被執行軟中斷,此時仍然處於中斷上下文中。

程序正持有spinlock自旋鎖、writelock/readlock讀寫鎖等,當持有這些鎖時,不應被搶占,否則由於搶占可能導致其他程序長期得不到解鎖,而讓系統處於死鎖狀態。

核心正在執行排程程式scheduler。搶占的原因就是為了進行新的排程,沒有理由將排程程式搶占掉再執行排程程式。

搶占計數

為了保證linux核心在以上情況下不會被搶占,搶占式核心使用了乙個變數preempt_count,稱為核心搶占計數。這一變數被設定在程序的thread_info結構中。每當核心要進入以上幾種狀態時,變數preempt_count就加1,指示核心不允許搶占。每當核心從以上幾種狀態退出時,變數preempt_count就減1,同時進行可搶占的判斷與排程。

排程步驟

schedule函式工作流程

1.清理當前執行中的程序。

2.選擇下乙個要執行的程序。

3.設定新程序的執行環境。

4.程序上下文切換。

國嵌攻略 111 硬體訪問技術

硬體訪問實質 驅動程式控制裝置,主要是通過訪問裝置內的暫存器來達到控制目的的,因此我們討論如何訪問硬體,就成了如何訪問這些暫存器。訪問流程 1.位址對映 在linux系統中,無論是核心程式還是應用程式,都只能使用虛擬位址,而晶元手冊中給出的硬體暫存器位址或ram位址都是實體地址,無法直接使用。因此我...

國嵌攻略 099 Linux核心配置與編譯

為什麼要配置核心 基於硬體和軟體的需求選出需要的功能,去掉不要的功能。核心配置的方法 make config 基於文字互動的配置。make menuconfig 基於圖形選單的配置。make menuconfig配置方法 1.選單項的分類 processor type and features 處理...

國嵌攻略 161 USB匯流排介紹

usb發展史 usb universal serial bus 通用序列匯流排,是一種外部匯流排標準。用於規範電腦與外部裝置的連線和通訊。usb是在1994年底由英特爾 康柏 ibm microsoft等多家公司聯合提出的。自1996年堆出後,已經成功替代了串列埠和並口。成為當今個人電腦和大量智慧型...