新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機實時操作系統(tǒng)中進程與鄉(xiāng)程

單片機實時操作系統(tǒng)中進程與鄉(xiāng)程

作者: 時間:2016-11-24 來源:網(wǎng)絡 收藏
注意:在單片機中一般沒有MMU,最多cortex-3也只能實現(xiàn)MPU功能,所以它不能轉換虛擬地址空間。所以只有一個進程。因此基于單片機實現(xiàn)的多任務都是線程。

本文引用地址:http://m.butianyuan.cn/article/201611/321059.htm

在32位的Windows系統(tǒng)中,術語多任務是指系統(tǒng)可以同時運行多個進程,而每個進程也可以同時執(zhí)行多個線程。

----------------------------------------------------------------------------------------------------------------------

進程能開多少個? 
進程表不可以無限開。每個進程在系統(tǒng)內(nèi)核的進程表中都有記錄,以便于系統(tǒng)的調(diào)度,在進程表中應該會給每個進程一個固定長度的編號,比如說8位或16位的二進制號碼,編號的長度決定了系統(tǒng)最多可以調(diào)度的進程數(shù)。一般XP開200個進程沒問題的,只要配置高一點。


1、那么一個進程能開多少線程?

默認情況下,一個線程的棧要預留1M的內(nèi)存空間,而一個進程中可用的內(nèi)存空間只有2G,所以理論上一個進程中最多可以開2048個線程,但是內(nèi)存當然不可能完全拿來作線程的棧,所以實際數(shù)目要比這個值要小。

能開多少進程是根據(jù)內(nèi)存限制的。

2.如何突破2000個限制?
你也可以通過連接時修改默認棧大小,將其改的比較小,這樣就可以多開一些線程。如將默認棧的大小改成512K,這樣理論上最多就可以開4096個線程。
即使物理內(nèi)存再大,一個進程中可以起的線程總要受到2GB這個內(nèi)存空間的限制。比方說你的機器裝了64GB物理內(nèi)存,但每個進程的內(nèi)存空間還是4GB,其中用戶態(tài)可用的還是2GB。

如果是同一臺機器內(nèi)的話,能起多少線程也是受內(nèi)存限制的。每個線程對象都要站用非頁面內(nèi)存,而非頁面內(nèi)存也是有限的,當非頁面內(nèi)存被耗盡時,也就無法創(chuàng)建線程了。

如果物理內(nèi)存非常大,同一臺機器內(nèi)可以跑的線程數(shù)目的限制值會越來越大。

可以通過修改CreateThread參數(shù)來縮小線程棧StackSize,

----------------------------------------------------------------------------------------------------------------------
進程就是應用程序的運行實例。每個進程都有自己私有的虛擬地址空間。每個進程都有一個主線程,但可以建立另外的線程。進程中的線程是并行執(zhí)行的,每個線程占用CPU的時間由系統(tǒng)來劃分。


可以把線程看成是操作系統(tǒng)分配CPU時間的基本實體。系統(tǒng)不停地在各個線程之間切換,它對線程的中斷是匯編語言級的。系統(tǒng)為每一個線程分配一個CPU時間片,某個線程只有在分配的時間片內(nèi)才有對CPU的控制權。實際上,在PC機中,同一時間只有一個線程在運行。由于系統(tǒng)為每個線程劃分的時間片很小(20毫秒左右),所以看上去好象是多個線程在同時運行。

進程中的所有線程共享進程的虛擬地址空間,這意味著所有線程都可以訪問進程的全局變量和資源。這一方面為編程帶來了方便,但另一方面也容易造成沖突。

雖然在進程中進行費時的工作不會導致系統(tǒng)的掛起,但這會導致進程本身的掛起。所以,如果進程既要進行長期的工作,又要響應用戶的輸入,那么它可以啟動一個線程來專門負責費時的工作,而主線程仍然可以與用戶進行交互。

簡單的說,你每啟動一個程序,就啟動了一個進程。在Windows 3.x下,進程是最小運行單位。在Windows 95/NT下,每個進程還可以啟動幾個線程,比如每下載一個文件可以單獨開一個線程。在Windows 95/NT下,線程是最小單位。WINDOWS的多任務特性使得線程之間獨立運行,但是它們彼此共享虛擬空間,也就是共用變量,線程有可能會同時操作一片內(nèi)存。

所謂進程,本身不能執(zhí)行,它只是一個資源的集合體,擁有地址空間,模塊,內(nèi)存,...
線程是真正的執(zhí)行單元,一個進程如果沒有線程,那么就沒有存在的意義,因為不可能執(zhí)行



評論


技術專區(qū)

關閉