2009年05月05日,Kiwi linux 9.0.4發(fā)布。改進(jìn)的地方:在CD上的支持的語(yǔ)言是英語(yǔ),匈牙利和羅馬尼亞,GUI為pppoeconf和支持Speedtouch 330 USB ADSL調(diào)制解調(diào)器固件;一個(gè)圖形工具恢復(fù)GRUB引導(dǎo)菜單失去了在安裝其他操作系統(tǒng);進(jìn)化移除,沒有郵件客戶端在CD;Flash插件和GStreamer編解碼器的受限的音頻和視頻格式,通過(guò)libdvdcss2加密DVD播放;Compiz額外設(shè)置GUI;源代碼,它是unrar。這個(gè)medibutu軟件存儲(chǔ)庫(kù)是默認(rèn)啟用允許安裝w32codecs,Skype和谷歌地球,等等。
2010年09月02日,Kiwi Linux 10.08 發(fā)布。
Kiwi Linux是面向i386架構(gòu)的一份修改過(guò)的Ubuntu自啟動(dòng)運(yùn)行光盤,它包含羅馬尼亞語(yǔ)和匈牙利語(yǔ)的本地化,多媒體編碼解碼器,對(duì)加密DVD的支持, 面向Firefox的Flash及Java插件,用于訪問本地互聯(lián)網(wǎng)服務(wù)(Clicknet和RDS)的PPPoE圖形用戶界面,以及對(duì)NTFS分區(qū)的寫 支持。
LPI 作為國(guó)內(nèi)外知名的Linux認(rèn)證機(jī)構(gòu),長(zhǎng)期受IBM、google、hp、騰訊等國(guó)內(nèi)外知名企業(yè)委托招聘Linux工程師,同時(shí)LPIC Level 2證書獲得者大都供職于以上企業(yè)。Novell對(duì)所有...
inux中文件查找命令有很多,一般文件分類為兩種,一種是應(yīng)用程序,即二進(jìn)制文件,一種是文檔,即文本文件。對(duì)于前者,我們一般使用whereis、which等命令,對(duì)于后者,我們習(xí)慣使用find命令,當(dāng)然...
Linux圖形界面使用命令可以打開“虛擬終端”軟件,“虛擬終端”軟件中可以執(zhí)行任何Linux命令,方法是在圖形界面中點(diǎn)擊軟件搜索框(大部分Linux發(fā)行版都有軟件搜索功能),然后輸入“終端”二字,就可...
格式:pdf
大小:30KB
頁(yè)數(shù): 4頁(yè)
評(píng)分: 4.7
一、填空題( 20%) 1. 默認(rèn)情況下,超級(jí)用戶和普通用戶的登錄提示符分別是: “#”和“ $”。 2. Linux 內(nèi)核引導(dǎo)時(shí),從文件 /etc/fstab 中讀取要加載的文件系統(tǒng)。 3. Linux 系統(tǒng)下經(jīng)常使用的兩種桌面環(huán)境是: GNOME 和 KDE。 4. 鏈接分為: 硬鏈接 和 符號(hào)鏈接 。 5. Linux 系統(tǒng)中有三種基本的文件類型: 普通文件、目錄文件和設(shè)備文件 。 6. 某文件的權(quán)限為: drw-r--r-- ,用數(shù)值形式表示該權(quán)限, 則該八進(jìn)制數(shù)為: 644 ,該文件屬性是 目錄 。 7. 在超級(jí)用戶下顯示 Linux 系統(tǒng)中正在運(yùn)行的全部進(jìn)程,應(yīng)使用的命令及參數(shù)是 ps -aux 。 8. 將前一個(gè)命令的標(biāo)準(zhǔn)輸出作為后一個(gè)命令的標(biāo)準(zhǔn)輸入,稱之為 管道 。 9. /sbin 目錄用來(lái)存放系統(tǒng)管理員使用的管理程序。 10. 觀察當(dāng)前系統(tǒng)的運(yùn)行級(jí)別可用命令: who
格式:pdf
大?。?span id="xd0g5jg" class="single-tag-height">30KB
頁(yè)數(shù): 9頁(yè)
評(píng)分: 4.6
#ifndef _PAGE_H #define _PAGE_H class cpage { public: int m_nPageNumber, m_nPageFaceNumber, m_nCounter, m_nTime; }; #endif #ifndef _PAGECONTROL_H #define _PAGECONTROL_H class CpageControl { public: int m_nPageNumber,m_nPageFaceNumber; class CPageControl * m_pNext; }; #endif #ifndef _MEMORY_H #define _MEMORY_H class CMemory { public: CMemory(); void initialize(const int nTota
Linux 調(diào)度器對(duì)比
BFS vs CFS,設(shè)計(jì)上的不同 白天 Con Kolivas 在醫(yī)院里當(dāng)麻醉師,為人們解除痛苦,業(yè)余的時(shí)候借 Linux 解除自己的痛苦。額,Kolivas 學(xué)習(xí) Linux 并不是為了解決痛苦,我臆測(cè)而已。但據(jù) Kolivas 自述,他接觸 Linux 內(nèi)核時(shí)連 C 語(yǔ)言也沒有學(xué)習(xí)過(guò)。。。這個(gè)事實(shí)證明,語(yǔ)言只是一項(xiàng)工具,對(duì)問題本質(zhì)的深入理解才是寫程序的關(guān)鍵??赡苓€有執(zhí)著,CFS 和 RSDL 之爭(zhēng)導(dǎo)致 Kolivas 離開 Linux 社區(qū),此去經(jīng)年,當(dāng) Kolivas 再次開始看內(nèi)核代碼的時(shí)候,他立即發(fā)現(xiàn) CFS 存在以下幾個(gè)設(shè)計(jì)上的問題:
CFS 的目標(biāo)是支持從桌面到高端服務(wù)器的所有應(yīng)用場(chǎng)景,這種大而全的設(shè)計(jì)思路導(dǎo)致其必須做一些實(shí)現(xiàn)上的折中,此外,那些只有在高端機(jī)器中才需要的特性將引入不必要的復(fù)雜代碼。
其次,為了維護(hù)多 CPU 上的公平性,CFS 采用了負(fù)載平衡機(jī)制,Kolivas 認(rèn)為,這些復(fù)雜代碼抵消了 per cpu queue 曾帶來(lái)的好處。
最后,主流內(nèi)核的 CFS 還是對(duì)睡眠進(jìn)程存在一些偏好,這意味著"不公平"。
在現(xiàn)實(shí)中,調(diào)度算法類似一個(gè)處境尷尬的主婦,滿足孩子對(duì)晚餐的要求便有可能傷害到老人的食欲。Linux 內(nèi)核一直試圖做出一道讓全家老少都喜歡的菜,在這方面,CFS 已經(jīng)做的很好。但一道能被所有人接受的菜,或許就意味著稍許平淡。而 BFS 只打算滿足一種口味,以便將這種口味發(fā)展到極限。
根據(jù) Linux Magazine的說(shuō)法,Con Kolivas是看到了下面這則來(lái)自 xkcd 的漫畫而開始思考 BFS 的。
事情源于一些 Linux 用戶,他們發(fā)現(xiàn) Linux 雖然號(hào)稱能夠充分發(fā)揮 4096 顆 CPU 系統(tǒng)的計(jì)算能力,但在普通的 laptop 上卻無(wú)法流暢地播放 Youtube 視頻。
這讓人們開始思考,對(duì)于 Desktop 環(huán)境來(lái)講,CFS 哪些復(fù)雜的特性究竟是否還有意義?人們是否有必要在自己的個(gè)人電腦中使用一個(gè)支持 4096 個(gè) CPU 的調(diào)度器?
BFS 正是對(duì)這種質(zhì)疑的自然反應(yīng)。它不打算支持 4096 個(gè) CPU 的龐然大物,BFS 的目標(biāo)是普通人使用的桌面電腦。此外,BFS 還刪除了那些只有在服務(wù)器上才需要的特性。比如,BFS 拋棄了 CFS 的組調(diào)度特性,類似 CGROUP 這樣的特性對(duì)于普通的桌面用戶是多余的技術(shù)。
這很容易理解:在只有一個(gè) CPU 的系統(tǒng)中,誰(shuí)還會(huì)設(shè)計(jì)多個(gè) CGroup,哪里還能用到 NUMA domain等概念呢?
此外 BFS 使用單一的 run queue,不再需要復(fù)雜的負(fù)載均衡機(jī)制。由于不再有 CGROUP 概念,也不再需要 Group 間的負(fù)載均衡。
這些簡(jiǎn)單的裁剪使得 BFS 的代碼極大地簡(jiǎn)化,簡(jiǎn)化的代碼意味著執(zhí)行一次調(diào)度所需要的指令數(shù)減少了,相應(yīng)的 footprint 自然也減少了。
當(dāng)然簡(jiǎn)化代碼只是一個(gè)顯而易見的方面,更重要的是,這種理念的不同會(huì)對(duì)最終的調(diào)度器實(shí)現(xiàn)產(chǎn)生更加深遠(yuǎn)的影響,這實(shí)在是難以盡述。
多隊(duì)列 vs 單一隊(duì)列
?在 Linux 內(nèi)核進(jìn)入 2.6 時(shí),調(diào)度器采用 per cpu run queue 從而克服了單一 run queue 的局限。在多 CPU 系統(tǒng)中,單一 run queue 意味著 run queue 成為了系統(tǒng)的瓶頸,因?yàn)樵谕粫r(shí)刻,一個(gè) CPU 訪問 run queue 時(shí),其他的 CPU 即使空閑也必須等待。當(dāng)使用 per CPU 的 run queue 之后,每個(gè) CPU 不必再使用大鎖,從而能夠并行地處理調(diào)度。
但很多事情都不像第一眼看上去那樣簡(jiǎn)單。
Kolivas 發(fā)現(xiàn),采用 per cpu run queue 所帶來(lái)的好處會(huì)被追求公平性的 load balance 代碼所抵消。在目前的 CFS 調(diào)度器中,每顆 CPU 只維護(hù)本地 run queue 中所有進(jìn)程的公平性,為了實(shí)現(xiàn)跨 CPU 的調(diào)度公平性,CFS 必須定時(shí)進(jìn)行 load balance,將一些進(jìn)程從繁忙的 CPU 的 run queue 中移到其他空閑的 run queue 中。
這個(gè) load balance 的過(guò)程需要獲得其他 run queue 的鎖,這種操作降低了多運(yùn)行隊(duì)列帶來(lái)的并行性。
并且在復(fù)雜情況下,這種因 load balance 而引入的 footprint 將非??捎^。
當(dāng)然,load balance 引入的加鎖操作依然比全局鎖的代價(jià)要低,這種代價(jià)差異隨著 CPU 個(gè)數(shù)的增加而更加顯著。但請(qǐng)您注意,BFS 并不打算為那些擁有 1024 個(gè) CPU 的系統(tǒng)工作,假若系統(tǒng)中的 CPU 個(gè)數(shù)有限時(shí),多 run queue 的優(yōu)勢(shì)便不明顯了。
而 BFS 采用單一隊(duì)列之后,每一個(gè)需要調(diào)度的新進(jìn)程都可以在全局范圍內(nèi)查找最合適的 CPU,而無(wú)需 CFS 那樣等待 load balance 代碼來(lái)決定,這減少了多 CPU 之間裁決的延遲,最終的結(jié)果是更小的調(diào)度延遲。
向前看還是向后看?
多年來(lái) Kolivas 一直關(guān)注著 Linux 在 desktop 上的表現(xiàn)。對(duì)于 desktop 的用戶,最注重的不是系統(tǒng)的吞吐量,而是交互性程序的流暢體驗(yàn)。從 SD 開始,Kolivas 就告訴內(nèi)核黑客們,完全公平能夠從根本上保證交互性。他始終堅(jiān)持一個(gè)基本觀點(diǎn):調(diào)度器應(yīng)該 forward look only。決不要去考慮一個(gè)進(jìn)程的過(guò)去。
CFS 卻偏偏要考慮進(jìn)程的過(guò)去。2.6.23 的時(shí)候,CFS 記錄并使用 sleep time。之后不久,在 2.6.24 發(fā)布的時(shí)候,CFS 合并了"Real Fair Scheduler",刪除了 sleep time。因此在 2.6.24 之后的內(nèi)核中,CFS 終于也不再考慮進(jìn)程過(guò)去的睡眠時(shí)間。
但 CFS 還是保留了 sleeper fairness 的思想,當(dāng)進(jìn)程 wakeup 的時(shí)候,在 place_entity() 函數(shù)中,CFS 將對(duì) sleeper 進(jìn)行獎(jiǎng)勵(lì),以便其能盡快得到 CPU。這個(gè)策略是非常微妙的,我們?cè)?2.1 節(jié)中詳細(xì)介紹了 sleeper fairness 的演進(jìn)過(guò)程。假如您花些時(shí)間回頭再看看,就會(huì)發(fā)現(xiàn) sleeper fairness 曾造成怎樣嚴(yán)重的延遲問題。雖然 Ingo 自稱 Gentle fairness 解決了延遲問題,但從代碼上看,Gentle Fairness 只是對(duì) sleeper 的獎(jiǎng)勵(lì)減半而已。因此我們可以說(shuō),CFS 依然對(duì) Sleeper 進(jìn)程進(jìn)行獎(jiǎng)勵(lì),這代表著一種偏好,一種"不公平"。而這,正是 BFS 所反對(duì)的。
BFS 中,當(dāng)一個(gè)進(jìn)程 wakeup 時(shí),調(diào)度器將根據(jù)進(jìn)程的 deadline 來(lái)進(jìn)行選擇(關(guān)于 deadline 本文將在第 4 章中詳細(xì)描述),其結(jié)果是,更早睡眠的進(jìn)程能更快地得到調(diào)度;CFS 的 sleeper fairness 則意味著要根據(jù) wakeup 的時(shí)間來(lái)選擇下一個(gè)被調(diào)度的進(jìn)程,更早 wakeup 的進(jìn)程會(huì)更快得到調(diào)度。
這種不同究竟會(huì)對(duì)桌面應(yīng)用造成何種影響尚沒有理論依據(jù)可以參考。但我個(gè)人認(rèn)為,BFS 的策略更加合理。
您現(xiàn)在可能已經(jīng)讀得有些煩躁了 ( 這些英文加中文的說(shuō)些啥啊 ),所以我還是盡快介紹一下 BFS 的實(shí)現(xiàn)細(xì)節(jié)吧。然后或許您會(huì)理解我,有些詞還是不翻譯更好。
linux調(diào)度器(BFS )是一款專門為 Linux 桌面環(huán)境所設(shè)計(jì)的內(nèi)核調(diào)度器,它基于 Staircase Deadline和 EEVDF 算法,支持 Linux 2.6.31之后的內(nèi)核。它提供了前所未有的流暢桌面性能,不僅得到了用戶的認(rèn)可,也為一些商業(yè)系統(tǒng)所采用。
什么是shell程序呢"_blank" href="/item/linux">linux命令的文件.
像編寫高級(jí)語(yǔ)言的程序一樣,編寫一個(gè)shell程序需要一個(gè)文本編輯器.如Ⅵ等.
在文本編輯環(huán)境下,依據(jù)shell的語(yǔ)法規(guī)則,輸入一些shell/linux命令行,形成一個(gè)完整的程序文件.
執(zhí)行shell程序文件有三種方法
⑴#chmod x file(在/etc/profile中,加入export PATH=${PATH}:~/yourpath,就可以在命令行下直接運(yùn)行,像執(zhí)行普通命令一樣)
⑵#sh file
⑶# . file
⑷#source file
在編寫shell時(shí),第一行一定要指明系統(tǒng)需要那種shell解釋你的shell程序,如:#! /bin/bash,#! /bin/csh,/bin/tcsh,還是#! /bin/pdksh .
⑴常用系統(tǒng)變量
$ # :保存程序命令行參數(shù)的數(shù)目
$ "para" label-module="para">
$ 0 :保存程序名
$ * :以("$1 $2...")的形式保存所有輸入的命令行參數(shù)
$ @ :以("$1""$2"...)的形式保存所有輸入的命令行參數(shù)
⑵定義變量
shell語(yǔ)言是非類型的解釋型語(yǔ)言,不象用C /JAVA語(yǔ)言編程時(shí)需要事先聲明變量.給一個(gè)變量賦值,實(shí)際上就是定義了變量.
在linux支持的所有shell中,都可以用賦值符號(hào)(=)為變量賦值.
如:
abc=9 (bash/pdksh不能在等號(hào)兩側(cè)留下空格)
set abc = 9 (tcsh/csh)
由于shell程序的變量是無(wú)類型的,所以用戶可以使用同一個(gè)變量時(shí)而存放字符時(shí)而存放整數(shù).
如:
name=abc (bash/pdksh)
set name = abc (tcsh)
在變量賦值之后,只需在變量前面加一個(gè)$去引用.如:
echo $name
⑶位置變量
當(dāng)運(yùn)行一個(gè)支持多個(gè)命令行參數(shù)的shell程序時(shí),這些變量的值將分別存放在位置變量里.
其中第一個(gè)參數(shù)存放在位置變量1,第二個(gè)參數(shù)存放在位置變量2,依次類推...,shell保留
這些變量,不允許用戶以令外的方式定義他們.同別的變量,用$符號(hào)引用他們.
shell使用引號(hào)(單引號(hào)/雙引號(hào))和反斜線("\")用于向shell解釋器屏蔽一些特殊字符.
反引號(hào)(")對(duì)shell則有特殊意義.
如:
abc="how are you" (bash/pdksh)
set abc = "how are you" (tcsh)
這個(gè)命令行把三個(gè)單詞組成的字符串how are you作為一個(gè)整體賦值給變量abc.
abc1='$LOGNAME,how are you!' (bash/pdksh)
set abc1='$LOGNAME,how are you!' (tcsh)
abc2="$LOGNAME,how are you!" (bash/pdksh)
set abc2="$LOGNAME,how are you!" (tcsh)
LOGNAME變量是保存當(dāng)前用戶名的shell變量,假設(shè)他的當(dāng)前值是:wang.執(zhí)行完兩條命令后,
abc1的內(nèi)容是:$LOGNAME,how are you!.而abc2的內(nèi)容是;wang,how are you!.
象單引號(hào)一樣,反斜線也能屏蔽所有特殊字符.但是他一次只能屏蔽一個(gè)字符.而不能屏蔽
一組字符.
反引號(hào)的功能不同于以上的三種符號(hào).他不具有屏蔽特殊字符的功能.但是可以通過(guò)他將
一個(gè)命令的運(yùn)行結(jié)果傳遞給另外一個(gè)命令.
如:
contents=`ls` (bash/pdksh)
set contents = `ls` (tcsh)
在bash/pdksh中,命令test用于計(jì)算一個(gè)條件表達(dá)式的值.他們經(jīng)常在條件語(yǔ)句和循環(huán)
語(yǔ)句中被用來(lái)判斷某些條件是否滿足.
test命令的語(yǔ)法格式:
test expression
或者
[expression]
在test命令中,可以使用很多shell的內(nèi)部操作符.這些操作符介紹如下:
⑴字符串操作符 用于計(jì)算字符串表達(dá)式
test命令 | 含義
Str1 = str2 | 當(dāng)str1與str2相同時(shí),返回True
Str1! = str2| 當(dāng)str1與str2不同時(shí),返回True
Str | 當(dāng)str不是空字符時(shí),返回True
-n str | 當(dāng)str的長(zhǎng)度大于0時(shí),返回True
-z str | 當(dāng)str的長(zhǎng)度是0時(shí),返回True
⑵整數(shù)操作符具有和字符操作符類似的功能.只是他們的操作是針對(duì)整數(shù)
test表達(dá)式 | 含義
Int1 -eq int2|當(dāng)int1等于int2時(shí),返回True
Int1 -ge int2|當(dāng)int1大于/等于int2時(shí),返回True
Int1 -le int2|當(dāng)int1小于/等于int2時(shí),返回True
Int1 -gt int2|當(dāng)int1大于int2時(shí),返回True
Int1 -ne int2|當(dāng)int1不等于int2時(shí),返回True
⑶用于文件操作的操作符,他們能檢查:文件是否存在,文件類型等
test表達(dá)式 | 含義
-d file |當(dāng)file是一個(gè)目錄時(shí),返回 True
-f file |當(dāng)file是一個(gè)普通文件時(shí),返回 True
-r file |當(dāng)file是一個(gè)可讀文件時(shí),返回 True
-s file |當(dāng)file文件長(zhǎng)度大于0時(shí),返回 True
-w file |當(dāng)file是一個(gè)可寫文件時(shí),返回 True
-x file |當(dāng)file是一個(gè)可執(zhí)行文件時(shí),返回 True
⑷shell的邏輯操作符用于修飾/連接包含整數(shù),字符串,文件操作符的表達(dá)式
test表達(dá)式 | 含義
! expr |當(dāng)expr的值是False時(shí),返回True
Expr1 -a expr2|當(dāng)expr1,expr2值同為True時(shí),返回True
Expr1 -o expr2|當(dāng)expr1,expr2的值至少有一個(gè)為True時(shí),返回True
注意:
tcsh shell 不使用test命令,但是tcsh中的表達(dá)式同樣能承擔(dān)相同的功能.tcsh
支持的表達(dá)式于C中的表達(dá)式相同.通常使用在if和while命令中.
tcsh表達(dá)式 | 含義
Int1 <= int2 |當(dāng)int1小于/等于int2時(shí),返回True
Int1 >= int2 |當(dāng)int1大于/等于int2時(shí),返回True
Int1 < int2 |當(dāng)int1小于int2時(shí),返回True
Int1 > int2 |當(dāng)int1大于int2時(shí),返回True
Str1 == str2 |當(dāng)str1與str2相同時(shí),返回True
Str1 != str2 |當(dāng)str1與str2不同時(shí),返回True
-r file |當(dāng)file是一個(gè)可讀文件時(shí),返回True
-w file |當(dāng)file是一個(gè)可寫文件時(shí),返回True
-x file |當(dāng)file是一個(gè)可執(zhí)行文件時(shí),返回True
-e file |當(dāng)file存在時(shí),返回True
-o file |當(dāng)file文件的所有者是當(dāng)前用戶時(shí),返回True
-z file |當(dāng)file長(zhǎng)度為0時(shí),返回True
-f file |當(dāng)file是一個(gè)普通文件時(shí),返回True
-d file |當(dāng)file是一個(gè)目錄時(shí),返回True
Exp1 || exp2 |當(dāng)exp1和exp2的值至少一個(gè)為True時(shí),返回True
Exp1 && exp2 |當(dāng)exp1和exp2的值同為True時(shí),返回True
! exp |當(dāng)exp的值為False時(shí),返回True