国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關(guān)注微信公眾號(hào)

Solaris, Linux 和FreeBSD的內(nèi)核比較
2008-09-12   ChinaUnix

 調(diào)度和調(diào)度器
  Solaris的調(diào)度單位是kthread_t,F(xiàn)reeBSd是thread,Linux是task_struct。抬高一級(jí),Solaris的進(jìn)程是 proc_t,當(dāng)然每個(gè)進(jìn)程里的線程就是kthread_t;Linux的進(jìn)程和線程都由task_struct 表示,單線程的進(jìn)程在Linux里是一個(gè)task_struct。單線程的進(jìn)程在Solaris里有一個(gè)proc_t,一個(gè)kthread_t,還有一個(gè) klwp_t表示。klwp_t提供了用戶和內(nèi)核模式線程切換的存儲(chǔ)區(qū)。FreeBSD里的單線程進(jìn)程有一個(gè)proc ,一個(gè)thread 和一個(gè)ksegrp 。ksegrp 是“內(nèi)核調(diào)度的實(shí)體組kernel scheduling entity group”。三個(gè)系統(tǒng)的線程表示結(jié)構(gòu)不同,不過都支持調(diào)度線程。和大家熟悉的基本一樣,調(diào)度是基于優(yōu)先級(jí)的。小小的數(shù)學(xué)問題是,在Linux和FreeBSD里,數(shù)字越小,優(yōu)先級(jí)越高;而SUN的寶貝卻喜歡數(shù)字越大,優(yōu)先級(jí)越高。參考下表

調(diào)度線程
調(diào)度線程分級(jí)

    三個(gè)系統(tǒng)都更推崇interactive 線程/進(jìn)程(下面會(huì)提到interactive怎么回事)。Interactive 線程比compute-bound 線程優(yōu)先級(jí)要高,不過得到的時(shí)間片要少一些。Solaris,F(xiàn)reeBSD和Linux都使用每CPU的“運(yùn)行隊(duì)列 runqueue”。FreeBSD和Linux有一個(gè)active隊(duì)列和一個(gè)expired隊(duì)列。名字說得很清楚了--系統(tǒng)從active上按照優(yōu)先級(jí)選擇線程進(jìn)行調(diào)度。用完自己時(shí)間片的線程就從active搬到expired上(或者為了避免“餓死”的其他情況),active空以后,內(nèi)核交換 active和expired。FreeBSD還多一個(gè)idle 隊(duì)列--其他兩個(gè)queue都空的時(shí)候才輪到這個(gè)。Solaris的概念是每CPU“調(diào)度隊(duì)列 dispatch queue”。線程用完時(shí)間片后,內(nèi)核給其一個(gè)新優(yōu)先級(jí)然后放回調(diào)度隊(duì)列。所有3個(gè)系統(tǒng)的runqueue,對(duì)不同優(yōu)先級(jí)的可運(yùn)行線程都分別有鏈表。 FreeBSD四個(gè)優(yōu)先級(jí)共享一個(gè)鏈表,Solaris和Linux則每個(gè)優(yōu)先級(jí)一個(gè)鏈表
  Linux和FreeBSD結(jié)合運(yùn)行時(shí)間和睡眠時(shí)間計(jì)算線程的interactive-ness,Solaris查表。他們都不支持“gang scheduling”(有興趣查Google即知,并行計(jì)算上的調(diào)度算法,大白話說就是一組任務(wù)一把disptach到各個(gè)CPU上。勞倫斯.利弗莫爾那幫造原子彈的家伙最喜歡了,他們有世界上最昂貴的玩具,可以理解)每個(gè)OS都調(diào)度下一個(gè)線程而不是N個(gè)線程開始運(yùn)行。這3個(gè)OS都有利用CACHE (warm affinity)和負(fù)載均衡的機(jī)制。對(duì)超線程CPU,F(xiàn)reeBSD能盡量將多個(gè)線程保持在一個(gè)CPU節(jié)點(diǎn)上(當(dāng)然可能是不同的CPU超線程上)。 Solaris也有類似機(jī)制,不過是在用戶和應(yīng)用的控制下,而且并不限于CPU的超線程,他們的術(shù)語是processor sets,F(xiàn)reeBSD的叫法是processor groups
  和其他2個(gè)OS最大的不同是,Solaris同時(shí)支持多個(gè)“scheduling classes”。3個(gè)OS都支持POSIX的SCHED_FIFO,SCHED_RR和SCHED_OTHER (或者SCHED_NORMAL)。SCHED_FIFO 和SCHED_RR通常支持實(shí)時(shí)線程(我不同意。。。但是照翻。。。)。Solaris和Linux為支持實(shí)時(shí)線程都支持了內(nèi)核搶占。Solaris支持 fixed priority類,system class的是系統(tǒng)線程(比如換頁線程),interactive的是在X控制下運(yùn)行窗口環(huán)境的線程,還有一個(gè)Fair Share Scheduler 用于資源管理。具體可以參考Solaris資料。FreeBSD的調(diào)度器是在編譯時(shí)決定的,Linux的調(diào)度?--要看版本了。
  支持在系統(tǒng)中加入新的調(diào)度類是要付出代價(jià)的。內(nèi)核中每個(gè)可能決定調(diào)度的地方都得有一個(gè)間接得函數(shù)調(diào)用去call調(diào)度類相關(guān)的代碼。比如,當(dāng)一個(gè)線程將要 sleep時(shí),內(nèi)核調(diào)用調(diào)度類相關(guān)代碼,完成該類中線程sleep需要完成工作。在Linux和FreeBSD上,調(diào)度已經(jīng)完成了所有工作。不需要再來一個(gè)間接調(diào)用。額外的層次,就意味著Solaris的調(diào)度要占用稍微多一點(diǎn)的系統(tǒng)開銷--不過提供了更多的功能。
內(nèi)存管理和分頁

  Solaris的進(jìn)程地址空間由邏輯段segment組成。進(jìn)程地址中的這些段可以通過pmap訪問。Solaris將其內(nèi)存管理代碼和數(shù)據(jù)結(jié)構(gòu)分為平臺(tái)無關(guān)和平臺(tái)相關(guān)部分(這不跟沒說一樣嘛。。。)。平臺(tái)相關(guān)部分位于HAT(hardware address translation)層。FreeBSD用vmspace描述進(jìn)程地址空間,將其劃分為邏輯塊region。硬件相關(guān)部分在pmap (physical map)模塊,而vmap 例程處理硬件無關(guān)部分和數(shù)據(jù)結(jié)構(gòu)。Linux使用內(nèi)存描述符劃分進(jìn)程地址空間,邏輯單位是memory areas。Linux也由pmap來examine 進(jìn)程地址空間。
  Linux將機(jī)器相關(guān)層從更高層次的機(jī)器無關(guān)層中劃分出來。Solaris和FreeBSD中大多數(shù)類似代碼比如page fault處理是機(jī)器無關(guān)的,而Linux處理page fault的代碼則非常機(jī)器相關(guān)--從fault處理開始就是這樣了。由此下來的結(jié)果是,Linux能很快地完成大多數(shù)分頁相關(guān)代碼--因?yàn)閿?shù)據(jù)抽象更少。不過,代價(jià)是,下層硬件的改變需要大量修改代碼--Solaris和FreeBSD則分別把這樣的工作堵截在HAT和pmap層搞定。
  Segment,region和meory area的分割是:區(qū)域的虛擬地址segmetn/region/memory area映射的object/文件的位置權(quán)限map的大小
  例如,程序的text(text段,即代碼)在一個(gè)segmetn/region/memory area中,OS管理地址空間的機(jī)制是類似的,不過數(shù)據(jù)結(jié)構(gòu)名字完全不同。
  分頁3個(gè)系統(tǒng)都使用了最近最少使用least recently used算法的變種完成頁替換。他們都有一個(gè)守護(hù)daemon進(jìn)程/線程完成頁替換。FreeBSD的是vm_pageout daemon,它周期性地,或者當(dāng)free的內(nèi)存不多時(shí),被喚醒。當(dāng)可用內(nèi)存低于某個(gè)限制時(shí),vm_pageout 運(yùn)行例程vm_pageout_scan掃描內(nèi)存并釋放一些頁面。vm_pageout_scan例程可能需要異步地將更改過的頁面寫回到磁盤,在釋放他們之前。不論由多少顆CPU,只有一個(gè)這樣的daemon。Solaris的是pageout daemon,它也周期性地運(yùn)行,處理空閑內(nèi)存不多的情況。Solaris中的分頁限制值在系統(tǒng)啟動(dòng)時(shí)自動(dòng)校準(zhǔn),這樣可以避免該守護(hù)進(jìn)程過渡占用CPU或者向磁盤發(fā)出洪水般的換頁請(qǐng)求(嗯,flood這么翻正好 ;P )。FreeBSD的daemon在大多數(shù)情況下使用的值是固定的--不過也可以調(diào)整。Linux的LRU算法可以在運(yùn)行時(shí)動(dòng)態(tài)調(diào)整,而且可以有多個(gè) kswapd daemon,每CPU最多一個(gè)。這3個(gè)系統(tǒng)都使用global working set策略,而不是per process working set。
  FreeBSD有多個(gè)頁面鏈表來追蹤最近使用頁。包括active,inactive,cached和feee頁。根據(jù)使用情況,頁面在這些鏈表間走來走去。經(jīng)常訪問的頁面會(huì)在active上。退出的進(jìn)程的數(shù)據(jù)頁面將被馬上放到free上。如果因?yàn)樨?fù)載原因vm_pageout_scan 來不及掃描全部內(nèi)存的話,F(xiàn)reeBSD內(nèi)核可能將整個(gè)進(jìn)程全部換出。如果內(nèi)存短缺十分嚴(yán)重,vm_pageout_scan 可能會(huì)kill系統(tǒng)中最大的進(jìn)程。Linux也使用不同的頁面鏈表。物理內(nèi)存被分為(多個(gè))3重zone:一個(gè)DMA頁面,一個(gè)普通頁面,一個(gè)動(dòng)態(tài)分配內(nèi)存頁面。zone的實(shí)現(xiàn)很像由于x86架構(gòu)限制而很產(chǎn)生的。頁面在hot,cold和free鏈表間移動(dòng)--機(jī)制和FreeBSD的類似。經(jīng)常用的頁面在 hot上。可用頁面則在cold或者free上。
  SUN的大佬使用free鏈,哈希鏈,vnode頁面鏈支持自己的LRU實(shí)現(xiàn)。后兩者大致相當(dāng)于FreeBSD和Linux的active/hot鏈--也是FreeBSD和Linux要掃描的鏈。Solaris要掃描的不是這兩個(gè)對(duì)象,它用two-handed clock算法掃描全部頁面(見Solaris Internals 或其他什么地方隨你便)。大致方法是,兩只手相隔固定舉例,前面的手將page的引用位清空以作為標(biāo)識(shí),如果自此開始沒有進(jìn)程引用這個(gè)頁,后面的手就釋放這個(gè)頁面(當(dāng)然如果需要就寫回磁盤)。
  3個(gè)系統(tǒng)在分頁時(shí)都考慮了NUMA本地性。他們都把IO buffer cache和虛擬內(nèi)存頁面的cache合并到一個(gè)系統(tǒng)頁cache中。系統(tǒng)頁cache用于讀寫文件已經(jīng)被mmap了文件,還有應(yīng)用的text段和data段。
文件系統(tǒng)
  3個(gè)系統(tǒng)都使用數(shù)據(jù)抽象層向應(yīng)用隱藏文件系統(tǒng)實(shí)現(xiàn)細(xì)節(jié)。就是用大家熟悉的open,close,read,write,stat,等等系統(tǒng)調(diào)用訪問文件,無論下層的文件數(shù)據(jù)的實(shí)現(xiàn)和組織如何。Solaris和FreeBSD把這種機(jī)制稱為VFS(virtual file system),基本數(shù)據(jù)結(jié)構(gòu)是vnode(virtual node)。Solaris和FreeBSD里每個(gè)被訪問的文件都有一個(gè)賦給他們的vnode。除了generic 的文件信息外,vnode還包含到file-system-specific 信息的指針。Linux采用了詳細(xì)的機(jī)制,也叫VFS(virtual file switch),文件系統(tǒng)無關(guān)的數(shù)據(jù)結(jié)構(gòu)是inode。這個(gè)機(jī)構(gòu)和vnode類似(小心:Solaris和FreeBSD也另有自己的inode--是 UFS文件系統(tǒng)里file-system-dependent 的數(shù)據(jù))。Linux還有兩個(gè)不同的結(jié)構(gòu),一個(gè)用于文件操作,另一個(gè)用于inode操作。Solaris和FreeBSD將他們合并為vnode操作。
  VFS允許在系統(tǒng)里實(shí)現(xiàn)多種文件系統(tǒng)。這意味著他們相互訪問對(duì)方的文件系統(tǒng)沒問題。只要相關(guān)的文件系統(tǒng)例程和數(shù)據(jù)結(jié)構(gòu)已經(jīng)被移植到VFS上。所有這3個(gè)系統(tǒng)都允許文件系統(tǒng)堆疊stacking。下表列出了每個(gè)OS實(shí)現(xiàn)的文件系統(tǒng)類型,不是全部哈。
結(jié)論

  Solaris,F(xiàn)reeBSD和Linux顯然都在從對(duì)方身上獲益。隨著Solaris的開源,這種相互促進(jìn)有望更快。Max個(gè)人已經(jīng)感覺到Linux 的變化是最快的。新技術(shù)被快速地集成進(jìn)系統(tǒng),只是文檔和健壯性可能有點(diǎn)落后。Linux有很多--或者有時(shí)是看上去有很多--開發(fā)者。FreeBSD則大概是(從某種意義上)3個(gè)系統(tǒng)中歷史最長的。Solaris來自BSD Unix和AT&T Bell實(shí)驗(yàn)室Unix的結(jié)合,使用了更多數(shù)據(jù)抽象層,因而一般說來能更簡便地支持更多功能。不過,內(nèi)核中大多數(shù)這樣的分層都沒有文檔描述。可能隨著代碼的開放這一點(diǎn)會(huì)有所改善。
  至于他們的差別,最大的地方之一是page fault處理了。在Solaris中,發(fā)生page fault時(shí),代碼是從平臺(tái)相關(guān)的trap handler開始執(zhí)行的(以大家的智商,這好像不用說了吧。。。),然后會(huì)調(diào)用generic的as_fault例程,這個(gè)例程判斷發(fā)生page fault的segment,然后調(diào)用segment driver處理page fault。segment driver調(diào)用文件系統(tǒng)代碼,后者再調(diào)用進(jìn)驅(qū)動(dòng)程序,換入頁面。換入完成后,segment driver 調(diào)用HAT層來更新頁表項(xiàng)。在Linux上,發(fā)生page fault后,內(nèi)核調(diào)用的代碼在會(huì)馬上進(jìn)入平臺(tái)相關(guān)部分,這些處理可能更快,不過可能不太容易擴(kuò)展和移植(后半段說得太省,不知道作者有沒有真的研究過 Linux下對(duì)應(yīng)的處理過程)。
  內(nèi)核觀察和調(diào)試工具對(duì)正確理解系統(tǒng)行為有關(guān)鍵意義。在這方面,Solaris有kmdb,mdb和DTrace 。在開源之前,Max就對(duì)Solaris做過多年“反向工程”--他發(fā)現(xiàn)解決問題的時(shí)候使用工具總比閱讀代碼來得快--我也知道,不過得看什么場(chǎng)合,大家可不要被他誤導(dǎo)。Linux嘛,我看作者M(jìn)ax不太熟,所以認(rèn)為沒有太多工具。對(duì)FreeBSD,他也認(rèn)為只是可以用GDB調(diào)試內(nèi)核的dump-- Liux也可以。最好作為可參考的總結(jié)性資料,讀的時(shí)候要保持清醒頭腦喲。

熱詞搜索:

上一篇:Linux,Solaris和Windows的64位之戰(zhàn)
下一篇:Solaris 10已改進(jìn)發(fā)布3次

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
国产精品欧美综合在线| 亚洲另类色综合网站| 欧美一区二区成人6969| 欧洲精品在线观看| 一本到高清视频免费精品| 国产成人aaa| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 亚洲日本一区二区| 中文字幕中文在线不卡住| 欧美激情一区二区三区不卡 | 一区二区三区中文在线观看| 国产精品色在线观看| 国产精品视频一区二区三区不卡 | 国产精品99久| 国产a久久麻豆| www.亚洲国产| 97精品久久久久中文字幕| 99久久久久久| 色播五月激情综合网| 91激情五月电影| 欧美人狂配大交3d怪物一区| 欧美一区二区性放荡片| 欧美大片一区二区| 国产亚洲午夜高清国产拍精品 | 一区二区三区四区av| 亚洲一区二区五区| 五月天中文字幕一区二区| 日本免费新一区视频| 男人的j进女人的j一区| 国产一区二区在线视频| 高清在线成人网| 91国产丝袜在线播放| 日韩欧美一级在线播放| 久久久久久久久免费| 亚洲欧洲性图库| 午夜成人免费电影| 国产精品综合一区二区| 91丝袜国产在线播放| 91精品国产综合久久久蜜臀粉嫩| 欧美精品一区二区三区蜜桃| 国产精品乱子久久久久| 亚洲风情在线资源站| 国产一区二区三区美女| 一本色道久久综合狠狠躁的推荐| 欧美一区午夜精品| 欧美韩国日本一区| 亚洲成人免费在线观看| 国产一区二区三区在线观看精品| 91在线免费看| 日韩精品一区二区三区四区 | 亚洲女女做受ⅹxx高潮| 日韩不卡一区二区三区| 成人黄页毛片网站| 欧美高清视频不卡网| 欧美韩国日本不卡| 婷婷国产在线综合| 成人av网站在线观看免费| 91精品国产综合久久精品app| 国产色婷婷亚洲99精品小说| 亚洲成人自拍网| 成人激情免费视频| 精品奇米国产一区二区三区| 亚洲激情六月丁香| 国产成人综合在线播放| 这里只有精品视频在线观看| 成人免费一区二区三区视频| 激情图区综合网| 欧美日韩小视频| 国产精品久久久久三级| 国内精品久久久久影院色| 欧美日韩国产综合久久| 国产精品污www在线观看| 日韩不卡免费视频| 在线精品亚洲一区二区不卡| 国产精一区二区三区| 亚洲美女精品一区| 亚洲美女淫视频| 国产精品99久久久久久久女警| 欧美一区二区网站| 亚洲国产精品一区二区尤物区| av一二三不卡影片| 国产区在线观看成人精品| 免费美女久久99| 欧美三级视频在线播放| 亚洲另类春色校园小说| 99久久亚洲一区二区三区青草| 国产亚洲成年网址在线观看| 日韩va欧美va亚洲va久久| 欧美亚洲一区三区| 亚洲自拍偷拍九九九| 色综合天天做天天爱| 中文字幕亚洲欧美在线不卡| 国产精品18久久久久久久久| 日韩欧美国产精品| 欧美aaaaaa午夜精品| 911精品产国品一二三产区| 亚洲一区二区三区美女| 色综合天天综合网天天狠天天| 亚洲国产精品v| 国产精品中文字幕一区二区三区| 精品日韩av一区二区| 久久99国内精品| 久久先锋资源网| 国产真实乱偷精品视频免| 日韩免费在线观看| 韩国成人福利片在线播放| 欧美成人vps| 狠狠色丁香久久婷婷综合_中| 精品三级av在线| 精品中文字幕一区二区小辣椒| 欧美成人video| 韩国女主播一区| 国产欧美一区二区精品性色超碰| 高清在线观看日韩| 亚洲欧洲另类国产综合| 成人av资源在线观看| 亚洲日本乱码在线观看| 色婷婷久久综合| 亚洲二区在线视频| 欧美挠脚心视频网站| 秋霞电影网一区二区| 精品国精品国产尤物美女| 国产一区二区在线观看视频| 国产欧美综合在线| 不卡av在线网| 一区二区三区四区乱视频| 欧美日韩在线播| 老司机一区二区| 国产精品视频线看| 色猫猫国产区一区二在线视频| 亚洲sss视频在线视频| 91麻豆精品国产| 国产在线精品不卡| 日韩美女久久久| 欧美另类高清zo欧美| 激情成人午夜视频| 最新国产成人在线观看| 欧美日韩久久不卡| 国产一区二区精品在线观看| 中文字幕中文乱码欧美一区二区| 在线观看日韩电影| 免费一区二区视频| 国产精品嫩草影院av蜜臀| 在线观看91精品国产入口| 麻豆精品在线观看| 综合亚洲深深色噜噜狠狠网站| 欧美男人的天堂一二区| 国产精品77777| 亚洲网友自拍偷拍| 2021久久国产精品不只是精品| 91理论电影在线观看| 美脚の诱脚舐め脚责91| 国产精品传媒视频| 欧美一区二区精品在线| 不卡av在线网| 久久激情五月激情| 亚洲色图欧美偷拍| 精品国产一区二区三区av性色| 色悠悠亚洲一区二区| 黄一区二区三区| 调教+趴+乳夹+国产+精品| 国产欧美精品一区aⅴ影院| 欧美日韩电影在线播放| 福利一区在线观看| 免费成人美女在线观看.| 亚洲黄色av一区| 国产日产欧美一区二区三区| 欧美久久一二三四区| 99精品视频在线观看免费| 寂寞少妇一区二区三区| 亚洲午夜久久久久久久久久久| 中文字幕乱码一区二区免费| 欧美一区二区视频网站| 色欧美日韩亚洲| 成人免费黄色在线| 韩国女主播成人在线| 午夜私人影院久久久久| 亚洲欧美色一区| 中文字幕av一区 二区| 欧美精品一区二区三区高清aⅴ | 91亚洲精品乱码久久久久久蜜桃 | 日韩欧美一级在线播放| 欧美中文字幕亚洲一区二区va在线 | 日韩精品一区二| 欧美精品v国产精品v日韩精品 | 亚洲精品亚洲人成人网在线播放| 久久久久国产一区二区三区四区| 欧美一区二区在线免费播放| 欧美伊人久久大香线蕉综合69| 91免费版pro下载短视频| 国产精品性做久久久久久| 久久69国产一区二区蜜臀 | 欧美精品aⅴ在线视频| 欧美亚洲国产怡红院影院| 97国产一区二区| 99视频精品全部免费在线| 成人精品一区二区三区中文字幕| 国产精品一区二区不卡| 国产老肥熟一区二区三区| 国产精品一区二区久久精品爱涩|