2009年05月05日,Kiwi linux 9.0.4發(fā)布。改進(jìn)的地方:在CD上的支持的語言是英語,匈牙利和羅馬尼亞,GUI為pppoeconf和支持Speedtouch 330 USB ADSL調(diào)制解調(diào)器固件;一個(gè)圖形工具恢復(fù)GRUB引導(dǎo)菜單失去了在安裝其他操作系統(tǒng);進(jìn)化移除,沒有郵件客戶端在CD;Flash插件和GStreamer編解碼器的受限的音頻和視頻格式,通過libdvdcss2加密DVD播放;Compiz額外設(shè)置GUI;源代碼,它是unrar。這個(gè)medibutu軟件存儲(chǔ)庫是默認(rèn)啟用允許安裝w32codecs,Skype和谷歌地球,等等。
2010年09月02日,Kiwi Linux 10.08 發(fā)布。
Kiwi Linux是面向i386架構(gòu)的一份修改過的Ubuntu自啟動(dòng)運(yùn)行光盤,它包含羅馬尼亞語和匈牙利語的本地化,多媒體編碼解碼器,對加密DVD的支持, 面向Firefox的Flash及Java插件,用于訪問本地互聯(lián)網(wǎng)服務(wù)(Clicknet和RDS)的PPPoE圖形用戶界面,以及對NTFS分區(qū)的寫 支持。
廣聯(lián)達(dá)會(huì)不會(huì)出linux版本?
應(yīng)該會(huì),但是不知道要等到什么時(shí)候呢,蘋果系統(tǒng)都還沒出呢
LPI 作為國內(nèi)外知名的Linux認(rèn)證機(jī)構(gòu),長期受IBM、google、hp、騰訊等國內(nèi)外知名企業(yè)委托招聘Linux工程師,同時(shí)LPIC Level 2證書獲得者大都供職于以上企業(yè)。Novell對所有...
inux中文件查找命令有很多,一般文件分類為兩種,一種是應(yīng)用程序,即二進(jìn)制文件,一種是文檔,即文本文件。對于前者,我們一般使用whereis、which等命令,對于后者,我們習(xí)慣使用find命令,當(dāng)然...
格式:pdf
大?。?span id="cpv6jqv" class="single-tag-height">30KB
頁數(shù): 4頁
評分: 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 目錄用來存放系統(tǒng)管理員使用的管理程序。 10. 觀察當(dāng)前系統(tǒng)的運(yùn)行級(jí)別可用命令: who
格式:pdf
大小:30KB
頁數(shù): 9頁
評分: 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)度器對比
BFS vs CFS,設(shè)計(jì)上的不同 白天 Con Kolivas 在醫(yī)院里當(dāng)麻醉師,為人們解除痛苦,業(yè)余的時(shí)候借 Linux 解除自己的痛苦。額,Kolivas 學(xué)習(xí) Linux 并不是為了解決痛苦,我臆測而已。但據(jù) Kolivas 自述,他接觸 Linux 內(nèi)核時(shí)連 C 語言也沒有學(xué)習(xí)過。。。這個(gè)事實(shí)證明,語言只是一項(xiàng)工具,對問題本質(zhì)的深入理解才是寫程序的關(guān)鍵??赡苓€有執(zhí)著,CFS 和 RSDL 之爭導(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)用場景,這種大而全的設(shè)計(jì)思路導(dǎo)致其必須做一些實(shí)現(xiàn)上的折中,此外,那些只有在高端機(jī)器中才需要的特性將引入不必要的復(fù)雜代碼。
其次,為了維護(hù)多 CPU 上的公平性,CFS 采用了負(fù)載平衡機(jī)制,Kolivas 認(rèn)為,這些復(fù)雜代碼抵消了 per cpu queue 曾帶來的好處。
最后,主流內(nèi)核的 CFS 還是對睡眠進(jìn)程存在一些偏好,這意味著"不公平"。
在現(xiàn)實(shí)中,調(diào)度算法類似一個(gè)處境尷尬的主婦,滿足孩子對晚餐的要求便有可能傷害到老人的食欲。Linux 內(nèi)核一直試圖做出一道讓全家老少都喜歡的菜,在這方面,CFS 已經(jīng)做的很好。但一道能被所有人接受的菜,或許就意味著稍許平淡。而 BFS 只打算滿足一種口味,以便將這種口味發(fā)展到極限。
根據(jù) Linux Magazine的說法,Con Kolivas是看到了下面這則來自 xkcd 的漫畫而開始思考 BFS 的。
事情源于一些 Linux 用戶,他們發(fā)現(xiàn) Linux 雖然號(hào)稱能夠充分發(fā)揮 4096 顆 CPU 系統(tǒng)的計(jì)算能力,但在普通的 laptop 上卻無法流暢地播放 Youtube 視頻。
這讓人們開始思考,對于 Desktop 環(huán)境來講,CFS 哪些復(fù)雜的特性究竟是否還有意義?人們是否有必要在自己的個(gè)人電腦中使用一個(gè)支持 4096 個(gè) CPU 的調(diào)度器?
BFS 正是對這種質(zhì)疑的自然反應(yīng)。它不打算支持 4096 個(gè) CPU 的龐然大物,BFS 的目標(biāo)是普通人使用的桌面電腦。此外,BFS 還刪除了那些只有在服務(wù)器上才需要的特性。比如,BFS 拋棄了 CFS 的組調(diào)度特性,類似 CGROUP 這樣的特性對于普通的桌面用戶是多余的技術(shù)。
這很容易理解:在只有一個(gè) CPU 的系統(tǒng)中,誰還會(huì)設(shè)計(jì)多個(gè) CGroup,哪里還能用到 NUMA domain等概念呢?
此外 BFS 使用單一的 run queue,不再需要復(fù)雜的負(fù)載均衡機(jī)制。由于不再有 CGROUP 概念,也不再需要 Group 間的負(fù)載均衡。
這些簡單的裁剪使得 BFS 的代碼極大地簡化,簡化的代碼意味著執(zhí)行一次調(diào)度所需要的指令數(shù)減少了,相應(yīng)的 footprint 自然也減少了。
當(dāng)然簡化代碼只是一個(gè)顯而易見的方面,更重要的是,這種理念的不同會(huì)對最終的調(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)度。
但很多事情都不像第一眼看上去那樣簡單。
Kolivas 發(fā)現(xiàn),采用 per cpu run queue 所帶來的好處會(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 的過程需要獲得其他 run queue 的鎖,這種操作降低了多運(yùn)行隊(duì)列帶來的并行性。
并且在復(fù)雜情況下,這種因 load balance 而引入的 footprint 將非常可觀。
當(dāng)然,load balance 引入的加鎖操作依然比全局鎖的代價(jià)要低,這種代價(jià)差異隨著 CPU 個(gè)數(shù)的增加而更加顯著。但請您注意,BFS 并不打算為那些擁有 1024 個(gè) CPU 的系統(tǒng)工作,假若系統(tǒng)中的 CPU 個(gè)數(shù)有限時(shí),多 run queue 的優(yōu)勢便不明顯了。
而 BFS 采用單一隊(duì)列之后,每一個(gè)需要調(diào)度的新進(jìn)程都可以在全局范圍內(nèi)查找最合適的 CPU,而無需 CFS 那樣等待 load balance 代碼來決定,這減少了多 CPU 之間裁決的延遲,最終的結(jié)果是更小的調(diào)度延遲。
向前看還是向后看?
多年來 Kolivas 一直關(guān)注著 Linux 在 desktop 上的表現(xiàn)。對于 desktop 的用戶,最注重的不是系統(tǒng)的吞吐量,而是交互性程序的流暢體驗(yàn)。從 SD 開始,Kolivas 就告訴內(nèi)核黑客們,完全公平能夠從根本上保證交互性。他始終堅(jiān)持一個(gè)基本觀點(diǎn):調(diào)度器應(yīng)該 forward look only。決不要去考慮一個(gè)進(jìn)程的過去。
CFS 卻偏偏要考慮進(jìn)程的過去。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)程過去的睡眠時(shí)間。
但 CFS 還是保留了 sleeper fairness 的思想,當(dāng)進(jìn)程 wakeup 的時(shí)候,在 place_entity() 函數(shù)中,CFS 將對 sleeper 進(jìn)行獎(jiǎng)勵(lì),以便其能盡快得到 CPU。這個(gè)策略是非常微妙的,我們在 2.1 節(jié)中詳細(xì)介紹了 sleeper fairness 的演進(jìn)過程。假如您花些時(shí)間回頭再看看,就會(huì)發(fā)現(xiàn) sleeper fairness 曾造成怎樣嚴(yán)重的延遲問題。雖然 Ingo 自稱 Gentle fairness 解決了延遲問題,但從代碼上看,Gentle Fairness 只是對 sleeper 的獎(jiǎng)勵(lì)減半而已。因此我們可以說,CFS 依然對 Sleeper 進(jìn)程進(jìn)行獎(jiǎng)勵(lì),這代表著一種偏好,一種"不公平"。而這,正是 BFS 所反對的。
BFS 中,當(dāng)一個(gè)進(jìn)程 wakeup 時(shí),調(diào)度器將根據(jù)進(jìn)程的 deadline 來進(jìn)行選擇(關(guān)于 deadline 本文將在第 4 章中詳細(xì)描述),其結(jié)果是,更早睡眠的進(jìn)程能更快地得到調(diào)度;CFS 的 sleeper fairness 則意味著要根據(jù) wakeup 的時(shí)間來選擇下一個(gè)被調(diào)度的進(jìn)程,更早 wakeup 的進(jìn)程會(huì)更快得到調(diào)度。
這種不同究竟會(huì)對桌面應(yīng)用造成何種影響尚沒有理論依據(jù)可以參考。但我個(gè)人認(rèn)為,BFS 的策略更加合理。
您現(xiàn)在可能已經(jīng)讀得有些煩躁了 ( 這些英文加中文的說些啥啊 ),所以我還是盡快介紹一下 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í)語言的程序一樣,編寫一個(gè)shell程序需要一個(gè)文本編輯器.如Ⅵ等.
在文本編輯環(huán)境下,依據(jù)shell的語法規(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語言是非類型的解釋型語言,不象用C /JAVA語言編程時(shí)需要事先聲明變量.給一個(gè)變量賦值,實(shí)際上就是定義了變量.
在linux支持的所有shell中,都可以用賦值符號(hào)(=)為變量賦值.
如:
abc=9 (bash/pdksh不能在等號(hào)兩側(cè)留下空格)
set abc = 9 (tcsh/csh)
由于shell程序的變量是無類型的,所以用戶可以使用同一個(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)(")對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).他不具有屏蔽特殊字符的功能.但是可以通過他將
一個(gè)命令的運(yùn)行結(jié)果傳遞給另外一個(gè)命令.
如:
contents=`ls` (bash/pdksh)
set contents = `ls` (tcsh)
在bash/pdksh中,命令test用于計(jì)算一個(gè)條件表達(dá)式的值.他們經(jīng)常在條件語句和循環(huán)
語句中被用來判斷某些條件是否滿足.
test命令的語法格式:
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的長度大于0時(shí),返回True
-z str | 當(dāng)str的長度是0時(shí),返回True
⑵整數(shù)操作符具有和字符操作符類似的功能.只是他們的操作是針對整數(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文件長度大于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長度為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