• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            麒麟子

            ~~

            導(dǎo)航

            <2008年12月>
            30123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            統(tǒng)計

            常用鏈接

            留言簿(12)

            隨筆分類

            隨筆檔案

            Friends

            WebSites

            積分與排名

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            [導(dǎo)入]Symbian系統(tǒng)體系結(jié)構(gòu)

            Symbian系統(tǒng)體系結(jié)構(gòu)

            在symbian os上運行的四種軟件 

            應(yīng)用程序 application

            服務(wù)     server

            引擎     engine

            內(nèi)核     kernel

            Symbian系統(tǒng)使用活動對象與客戶-服務(wù)器(C/S)對事件處理系統(tǒng)進行了優(yōu)化 

            硬件資源: 

                一個CPU32RAM 

                一個ROM(只讀存儲器),里面有操作系統(tǒng)與內(nèi)建的中間件和應(yīng)用程序 

                ROM盤被映射到Z:盤,所有的文件都可以通過Z:盤訪問。 

                系統(tǒng)RAM.系統(tǒng)RAM用于兩個方面,一是被當前活動的程序和系統(tǒng)核心使用,另一個是當成”C”盤的磁盤空間。這兩個部分的大小是變化的,不可以保留某個的大小。由于RAM通常只有8MB到16MB,所以內(nèi)存可能用完,因此經(jīng)常出現(xiàn)內(nèi)存越界錯誤或是(寫文件時)磁盤已滿錯誤 

                I/O設(shè)備,包括帶數(shù)字筆輸入的觸摸屏,鍵盤,記憶卡(被當成D盤),RS232串口,紅外口,藍牙。 

            電源,包括電池與外接電源 

            Symbian OSPC系統(tǒng)的區(qū)別如下: 

            資源限制:CPU太慢內(nèi)存太少 

            沒有硬盤,不能使用寫到硬盤的虛擬內(nèi)存,不能保證有足夠的空間保存程序或是數(shù)據(jù)文件 

            電源條件嚴格. 

            Symbian系統(tǒng)結(jié)構(gòu)分為三層,內(nèi)核層、引擎層、應(yīng)用層。如下圖所示

            boundary

            Boundary

            Kernel(內(nèi)核):工作在高級別,管理機器所有硬件資源。對其它軟件模塊提供訪問這些硬件資源的接口 

            引擎層:提供應(yīng)用層與內(nèi)核層的一個橋梁,相當于API接口,但引擎層可以將內(nèi)核提供的API進行再次封裝,而不是將內(nèi)核API直接暴露,這樣可以將多種API實現(xiàn)的功能寫成模塊,而只向第三方軟件開發(fā)商提供簡單易用的接口。它主要負責(zé)應(yīng)用程序中操作數(shù)據(jù)而不是與用戶交互的部分.通常你可以把一個程序分成引擎部分和一個GUI部分,多部Symbian內(nèi)帶的程序都是這樣做的。一個應(yīng)用程序引擎可以是一個獨立的代碼模塊或是一個獨立的DLL或是幾個DLL引擎和應(yīng)用程序間的邊界是模塊或DLL的邊界。所以在Symbian中有四個組件類型與三個邊界類型。DLL或是模塊組件對交叉引用來說很方便。它們使系統(tǒng)模塊化與保持封裝。 

            權(quán)限邊界對交叉引用比較費資源,但是保證系統(tǒng)對用戶太程序隱藏內(nèi)核與設(shè)備 

            進程邊界是所有的交叉中最昂貴的,它們保證在RAM中分開每個程序 

            應(yīng)用層:應(yīng)用程序工作在用戶模式,不能直接訪問內(nèi)核和硬件資源,只能通過引擎來間接訪問。 

               應(yīng)用層的理解與普通操作系統(tǒng)沒有很大的區(qū)別應(yīng)用程序是一個有用戶界面的程序,在獨立的進程中運行 服務(wù)是沒有用戶界面的程序服務(wù)管理一個或多個資源,并提供API讓客戶可以訪問它的服務(wù)。享受服務(wù)的客戶可以是一個程序或是其它服務(wù)每個服務(wù)也運行在獨立的進程空間中。 

               在Symbian,服務(wù)的形式類似其它操作系統(tǒng)上用驅(qū)動程序或是內(nèi)核程序提供的功能。如文件系統(tǒng)的訪問也是客戶/服務(wù)類型的。(微內(nèi)核 )   

            可執(zhí)行文件的格式 

                Symbian中有兩種類型的可執(zhí)行文件: 

            EXE每個程序都有一個主入口E32main()(看上面的例子),它在獨立的進程中運行 

            DLL提供多個入口,由系統(tǒng)或是已存在的線程(進程)調(diào)用 

            有兩種類型的DLL

            共享庫DLL為一個或多個程序提供固定的API這些DLL多數(shù)后綴是DLL當程序啟動時就被讀到內(nèi)存中。 

            多態(tài)DLL這些DLL實現(xiàn)抽象的API如一個打印機驅(qū)動,Socket協(xié)議或是一個應(yīng)用程序。它們的擴展名多不是.DLL而是.PRN或.PRT或.APP等。它們從與DLL相關(guān)的類繼承,并通常只有在程序需要它們時才讀入。 

                從技術(shù)上看起來與普通系統(tǒng)上動態(tài)庫的靜態(tài)載入與動態(tài)載入沒有區(qū)別 

            但是從功能上看就不一樣了,一種是實現(xiàn)某種特殊功能的,從某個相關(guān)類繼承的DLL另一個是普通DLL

            代碼執(zhí)行 

                如果程序代碼在ROM上,則直接執(zhí)行,不然需要讀到RAM中(與普通操作系統(tǒng)不同,普通操作系統(tǒng)都需要讀到RAM中 不能直接在硬盤上執(zhí)行) 

            可執(zhí)行代碼包括三種類型的二進制數(shù)據(jù): 

            程序代碼 

            只讀靜態(tài)數(shù)據(jù) 

            可寫靜態(tài)數(shù)據(jù) 

                Symbian中對待.exe與.dll是不同的 

                由于.exe是不可共享的,如果它在RAM中執(zhí)行,那與普通PC系統(tǒng)沒有區(qū)別,如果在RAM中執(zhí)行,那它在RAM中為可寫靜態(tài)數(shù)據(jù)分配內(nèi)存 

                而.dll是共享的,當dll首次讀入內(nèi)存中時,它被分配到一個特殊的地址,第二個線程需要這個dll時它只要訪問已經(jīng)存在的這份Copy就可以。在所有使用它的進程中DLL的地址都是相同的。Symbian系統(tǒng)維護一個引用計數(shù),當沒有其它線程引用時才將它Unload. 

            ROM上的DLLROM上的exe一樣直接在ROM上執(zhí)行 

            為了對dll的大小進行優(yōu)化,Symbbian進行如下操作; 

                多數(shù)系統(tǒng)支持通過名字與通過數(shù)字訪問dll提供的入口,由于名字太長,浪費空間,所以symbian只提供通過數(shù)字訪問,當然在link時可以通過名字link.也就是說在.dll中沒有名字訪問辦法,在.lib(引導(dǎo)庫,引導(dǎo)linker正確的link這個dll,這個是在windows中使用的概念,在win下每創(chuàng)建一個dll都會創(chuàng)建一個用戶引導(dǎo)鏈接的同名.lib)中有,你的程序link時link的是.lib,link完成后編譯器會自動把引用dll的代碼變成數(shù)字引用 

            如果dll被讀到ram,那重定位信息(把dll  load到什么地址)也必須包含在可執(zhí)行文件格式中,這個的影響就是你不能把一個在rom中執(zhí)行的程序放到ram中執(zhí)行的程序.(rom中執(zhí)行的多是oem廠家,所以普通開發(fā)者多不用關(guān)心) 

                多數(shù)應(yīng)用程序有自己有exe來創(chuàng)建進程,其它的程序使用動態(tài)庫(DL)L的形式,在主服務(wù)線程中調(diào)用自己的線程 

                多數(shù)GUI程序都是多態(tài)(polymorphic)dll,有一個主入口點NewApplication(),這個入口點創(chuàng)建并返回一個繼承自CEikAppication的對象.這樣的程序被apprun.exe調(diào)用,app文件名為參數(shù)傳入。 

            電源管理 

            電源必須高效使用 

                在系統(tǒng)已經(jīng)關(guān)機時,確定程序仍然可以運行。如鬧鈐,關(guān)機后,到時時仍然可以開機 

            電源突然關(guān)掉時,關(guān)鍵數(shù)據(jù)應(yīng)該可以保存 

            設(shè)備驅(qū)動 

                雖然一般不會了解它,但是理解一下還是很有用的 

            設(shè)備驅(qū)動工作在兩個級別 

                第一個是中斷服務(wù)程序(ISR),ISR必須很短,并且不能做很多事情,因為它可能在任何時間出現(xiàn),甚至在內(nèi)核服務(wù)中。通常它只是通知設(shè)備產(chǎn)生了中斷并設(shè)置一個標志,要求內(nèi)核為第二階段的處理運行一個延遲的函數(shù)調(diào)用(delayed function call DFC) 

            在方便的時候內(nèi)核調(diào)度DFC.DFC可以使用多數(shù)的核心api,通常只是工作了后向用戶線程通知IO操作已經(jīng)完成  

            定時器 

                內(nèi)核支持真機上64hz的時鐘與模擬器上10hz的時鐘 

                時鐘中斷是最高優(yōu)先級中斷,它可以通過User::After或是RTime::After訪問。時鐘中斷在關(guān)機時停止,所以如果你請求5s后的定時操作,然后跑2s,關(guān)機,再開機時它也要等3s 

            內(nèi)核同時支持日期/時間時鐘,你可以使用User::At或是RTime::At。這個定時器很準確。在關(guān)機時,如果時間到了,那它會開機,這對鬧鐘很合適。 

            內(nèi)存 

                Symbian使用內(nèi)存管理單元(memory management unit MMU)管理內(nèi)存 

                ROM被映射到z:盤,被映射到一個固定的地址。 

                物理RAM被MMU分在4k的頁,每個物理頁可以用于: 

                用戶進程的虛地址空間。 

                內(nèi)核服務(wù)的虛地址空間 

                RAM盤,盤符是C:RAM盤只可通過文件服務(wù)進程訪問 

                如果dll不在rom中,那它被讀到ram,dll被讀到ram里面后頁面標記為只讀只讀的。 

            MMU的頁面轉(zhuǎn)換表.如果想理解的話學(xué)習(xí)一下操作系統(tǒng)原理 

            自由頁表 

            每個進程的地址空間可以分成下面三類: 

            系統(tǒng)范圍的內(nèi)存,如系統(tǒng)的rom或是讀到ram中的dll 

            進程范圍的內(nèi)存,如進程的.exe映象和它的可寫的靜態(tài)數(shù)據(jù) 

                每個線程的內(nèi)存,包括線程的棧與線程默認的堆(使用線程默認堆的原因只是為了提高內(nèi)存分配與釋放的速度,從開發(fā)角度來看,它與系統(tǒng)里面的內(nèi)存沒有區(qū)別)。 

                注意沒有交換文件,所以所有的內(nèi)存都是直接使用。同時,也可能會發(fā)生內(nèi)存不夠或是磁盤(c 已滿錯誤 每個線程的默認棧很小,只有12k,所以在symbian開發(fā)中,不要放太多東西到棧中,一般對象都是在堆中分配的。 線程創(chuàng)建后,它的棧大小就不可再改變。 線程可以使用new或是User::Alloc從線程默認堆中分配內(nèi)存.如果希望從其它堆中分配內(nèi)存,只能使用new 

            動態(tài)庫(DLL) 

                Symbian中dll不支持可寫的靜態(tài)數(shù)據(jù),所以你在里面不可能使用可寫的全局變量或是靜態(tài)變量. 

                為什么不支持呢?如果支持,那每個進程調(diào)用這個dll時,都需要為這個進程分配一個獨立的堆,而堆最小單位是4k,系統(tǒng)中有很多堆,并且有很多程序,所以內(nèi)存消費基金是很大的。所以就不支持了 

                這樣開發(fā)時不是很不方便?因為在dll中有時需要保存自己的狀態(tài),進行交互 為了解決這個問題,symbian中引入了線程本地數(shù)據(jù)(thread-local storage TLS)概念(查看Dll::Tls Dll;;SetTls)。但是調(diào)用TLS性能比較慢.tls的最大大小是1.8k 通常這夠用了。 

            文件: 

            C flash ram盤 

            Z rom盤 

            D記憶棒之類的外掛盤 

            事件處理 

            事件處理模型如圖: 

                Symbian中使用活動對象(active object)來處理事件 

                SymbianOS中,所有的Symbian OS線程都是事件處理器,每個線程有一個活動調(diào)度對象,加上一個或多個活動對象來處理從設(shè)備或其它程序發(fā)過來的事件。 每個活動對象都有一個虛擬的成員函數(shù)RunL(),在這個函數(shù)里面處理事件。 

            多任務(wù)與搶占式 

            Symbian OS實現(xiàn)搶占式多線程。 

            活動對象用于在單個線程內(nèi)實現(xiàn)非搶占式多任務(wù) 

            結(jié)束語:

            可以看出,對于不同的平臺,操作系統(tǒng)都有相似之處。如進程的調(diào)度,資源的管理,程序的執(zhí)行方式,IO,文件系統(tǒng)等等。但對于不同的平臺,又有其各自的特點。如Symbian OS中的DLL EXE的區(qū)別與Linux中的是不一樣的。而對于事件的處理也不一樣。程序的執(zhí)行與其在存儲設(shè)備中的位置也是有區(qū)別的。總之,不管對應(yīng)于哪種平臺,其自身的操作系統(tǒng)總是實現(xiàn)對資源的有效管理,并維持秩序,確保效率,同時又提供一個方便的接口供用戶使用。這也是操作系統(tǒng)的本質(zhì)所在。 

             

            PS:這是Symbian的大眾理解,大部分資源來自于網(wǎng)上.沒有什么特別之處.系統(tǒng)分層結(jié)構(gòu)圖也無法貼上來.汗~~!


            文章來源:http://ly-weiwei.blog.163.com/blog/static/7297528320081126115920274

            posted on 2008-12-26 23:59 麒麟子 閱讀(163) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            九九精品99久久久香蕉| 伊人热热久久原色播放www| 国产精品内射久久久久欢欢| 久久精品亚洲AV久久久无码| 国产精品无码久久综合网| 久久久无码精品亚洲日韩蜜臀浪潮| 成人午夜精品久久久久久久小说| 国产精品99久久久精品无码| 91精品国产综合久久香蕉 | 久久综合亚洲欧美成人| 色综合合久久天天综合绕视看| 亚洲AV日韩AV天堂久久| 色妞色综合久久夜夜| 久久午夜无码鲁丝片午夜精品| 国产精品久久毛片完整版| 久久精品免费全国观看国产| 99久久精品国产一区二区蜜芽| 欧美黑人又粗又大久久久| 武侠古典久久婷婷狼人伊人| 婷婷综合久久中文字幕蜜桃三电影| 久久精品免费一区二区三区| 久久久久人妻精品一区三寸蜜桃| 伊人久久大香线蕉av一区| 久久久久国产精品人妻| 一97日本道伊人久久综合影院| 久久精品国产亚洲av麻豆蜜芽 | 国产91色综合久久免费| 久久美女人爽女人爽| yy6080久久| 久久久久久毛片免费看| 久久99毛片免费观看不卡 | 嫩草伊人久久精品少妇AV| 久久精品国产第一区二区| 国产精品日韩深夜福利久久| 亚洲AV日韩精品久久久久| 99久久国产亚洲综合精品| 久久久中文字幕日本| 久久久久女教师免费一区| 久久精品夜色噜噜亚洲A∨| 久久这里只精品国产99热| 精品久久久久中文字幕日本|