新聞中心

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

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

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

        本文引用地址:http://www.104case.com/article/201611/321059.htm

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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

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



        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 乌海市| 清镇市| 绥阳县| 山丹县| 徐闻县| 永安市| 松原市| 巩义市| 满洲里市| 镇远县| 正宁县| 方正县| 云浮市| 巩义市| 安远县| 洪湖市| 罗山县| 资溪县| 保康县| 牡丹江市| 集贤县| 井陉县| 名山县| 长沙市| 武川县| 和平县| 牙克石市| 陇西县| 呼玛县| 旬邑县| 福安市| 云阳县| 上虞市| 隆安县| 伊吾县| 休宁县| 郓城县| 开阳县| 红河县| 平利县| 蒙自县|