第一篇:瀏覽器內核總結
一、排版引擎.........................................................................................................................2
1、Trident(Windows)......................................................................................................2
2、Gecko(跨平臺)...........................................................................................................2
3、KHTML(Linux).............................................................................................................3
4、WebKit(跨平臺).........................................................................................................3
5、Chromium(跨平臺)....................................................................................................3
6、Presto(跨平臺)...........................................................................................................3
二、JavaScript引擎..................................................................................................................4
三、幾個測試...........................................................................................................................4
1、V8引擎............................................................................................................................4
2、Acid3................................................................................................................................4
3、HTML5.............................................................................................................................4
四、幾個奇葩...........................................................................................................................5
1、IETab................................................................................................................................5
2、Trident/Gecko雙核瀏覽器.............................................................................................5
3、Trident/WebKit雙核瀏覽器...........................................................................................5
4、Trident/Gecko/WebKit三核瀏覽器...............................................................................5
五、幾個小點...........................................................................................................................6
1、Chrome/Chromium.........................................................................................................6
2、MyIE、MyIE2、傲游、GreenBrowser...........................................................................6
3、頁面兼容性判斷.............................................................................................................6
4、一直被模仿,一直被超越的Opera..............................................................................6
5、這年頭流行刷版本號.....................................................................................................6
6、查看源代碼、開發(fā)者工具.............................................................................................7
7、幾個主要的瀏覽器官網(wǎng)以及版本下載.........................................................................7(1)Internet Explorer.....................................................................................................7(2)Mozilla Firefox.........................................................................................................7(3)Apple Safari..............................................................................................................7(4)Chromium................................................................................................................8(5)Google Chrome........................................................................................................8
一、排版引擎
首先厘清一下瀏覽器內核是什么東西。
英文叫做:Rendering Engine,中文翻譯很多,排版引擎、解釋引擎、渲染引擎,現(xiàn)在流行稱為瀏覽器內核,至于為什么流行這么稱呼,請自行領悟。
Rendering Engine,顧名思義,就是用來渲染網(wǎng)頁內容的,將網(wǎng)頁的內容和排版代碼轉換為可視的頁面。因為是排版,所以肯定會排版錯位等問題。為什么會排版錯位呢?有的是由于網(wǎng)站本身編寫不規(guī)范,有的是由于瀏覽器本身的渲染不標準。
現(xiàn)在有幾個主流的排版引擎,因為這些排版引擎都有其代表的瀏覽器,所以常常會把排版引擎的名稱和瀏覽器的名稱混用,比如常的說IE內核、Chrome內核。其實這樣子是不太合理的,因為一個完整的瀏覽器不會只有一的排版引擎,還有自己的界面框架和其它的功能支撐,而排版引擎本身也不可能實現(xiàn)瀏覽器的所有功能。下面羅列一下幾款主流的排版引擎和瀏覽器。
1、Trident(Windows)
IE瀏覽器所使用的內核,也是很多瀏覽器所使用的內核,通常被稱為IE內核?;赥rident內核的瀏覽器非常多,這是因為Trident內核提供了豐富的調用接口。老的Trident內核(比如常說的IE6內核)一直是不遵循W3C標準的,但是由于它的市場份額最大,所以后果就是大量的網(wǎng)站只支持老的Trident內核,依據(jù)W3C標準寫的網(wǎng)頁在老的Trident內核下面又出現(xiàn)偏差。目前可供調用的最新版的Trident內核是IE9所用的內核,相較之前的版本對W3C標準的支持增強了很多。
Trident內核的瀏覽器:
IE6、IE7、IE8(Trident 4.0)、IE9(Trident 5.0)、IE10(Trident 6.0);
世界之窗
1、世界之窗
2、世界之窗3;
360安全瀏覽器1、360安全瀏覽器2、360安全瀏覽器3、360安全瀏覽器4、360安全瀏覽器5;
傲游
1、傲游2;搜狗瀏覽器1;騰訊TT;阿云瀏覽器(早期版本)、百度瀏覽器(早期版本)、瑞星安全瀏覽器、Slim Browser;
GreenBrowser、愛帆瀏覽器(12 之前版本)、115瀏覽器、155瀏覽器;
閃游瀏覽器、N氧化碳瀏覽器、糖果瀏覽器、彩虹瀏覽器、瑞影瀏覽器、勇者無疆瀏覽器、114瀏覽器、螞蟻瀏覽器、飛騰瀏覽器、速達瀏覽器、佐羅瀏覽器;
2、Gecko(跨平臺)
Netscape6啟用的內核,現(xiàn)在主要由Mozilla基金會進行維護,是開源的瀏覽器內核,目前最主流的Gecko內核瀏覽器是Mozilla Firefox,所以也常常稱之為火狐內核。因為Firefox的出現(xiàn),IE的霸主地位逐步被削弱,Chrome的出現(xiàn)則是加速了這個進程。非Trident內核的興起
2012年HTML5主題峰會 “生態(tài) 共融 多贏”主題峰會瀏覽器專場TV專場渠道與合作工具與應用正在改變著整個互聯(lián)網(wǎng),最直接的就是推動了編碼的標準化,也使得微軟在競爭壓力下不得不改進IE。不過比較可惜的是,雖然是開源的,也開發(fā)了這么多年,基于Gecko的瀏覽器并不多見,除了一些簡單的改動(坑爹的X瀏覽器)或者是重新編譯(綾川ayakawa、tete009),深度定制或者增強型外殼的還比較少見。另外就是有一些其它軟件借用了Gecko內核,比如音樂管理軟件SongBird。常見的Gecko內核的瀏覽器
Mozilla Firefox、Mozilla SeaMonkey Epiphany(早期版本)、Flock(早期版本)、K-Meleon
3、KHTML(Linux)
KDE開發(fā)的內核,速度快捷,容錯度低。這個內核可能不見得很多人知道,但是后面再看下去你就明白了。
常見的KHTML內核的瀏覽器:Konqueror
4、WebKit(跨平臺)
由KHTML發(fā)展而來,也是蘋果給開源世界的一大貢獻。是目前最火熱的瀏覽器內核,火熱倒不是說市場份額,而是應用的面積和勢頭。因為是脫胎于KHTML,所以也是具有高速的特點,同樣遵循W3C標準。
常見的WebKit內核的瀏覽器:Apple Safari、Symbian系統(tǒng)瀏覽器
5、Chromium(跨平臺)
維基百科里面并沒有將Chromium從WebKit分出來,這個區(qū)分完全是基于我個人的惡趣味。記得以前看過一個大牛的博文說過,Chromium把WebKit的代碼梳理得可讀性提高很多,所以以前可能需要一天進行編譯的代碼,現(xiàn)在只要兩個小時就能搞定。這個我自己也沒有考究過,但是估計可信。這個也能解釋為什么Gecko和WebKit出來了這么久,第三方編譯、定制的版本并不多,但是由Chromium衍生出來的瀏覽器早就滿坑滿谷了。
常見的Chromium內核的瀏覽器:Chromium、Google Chrome、SRWare Iron、Comodo Dragon
6、Presto(跨平臺)
Opera的內核,準確地說,是Opera 7.0及以后版本的內核,Opera 3.5-6.1版本使用的內核叫做Elektra。不用說,Presto對W3C標準的支持也是很良好的。雖然我很喜歡Opera,但是我對Presto的渲染速度一直有保留態(tài)度。之前在OperaChina論壇看見有人說過,Presto優(yōu)先解析文字,保證可閱讀性,媒體資源的渲染放后。常見的Presto內核的瀏覽器:Opera
二、JavaScript引擎
說完了排版引擎,接下來說說JavaScript引擎。顧名思義,JavaScript引擎就是用來渲染JavaScript的。為什么要單獨拿出來說呢?因為它涉及到跑分。經常看見很多文章在報道說哪個瀏覽器更快,其實大部分說的就是JavaScript的渲染速度,而不是頁面的載入速度。在網(wǎng)速許可的情況下,其實各個瀏覽器的頁面載入速度差別不大(Opera遜色一些)。那是不是說對比JavaScript的渲染速度其實沒有意義?也不是這么說,因為現(xiàn)在JavaScript在頁面中的比重會越來越大,越來越多的動態(tài)頁面開始大量借助JavaScript,比如現(xiàn)在主流的SNS、郵箱、網(wǎng)頁游戲,所以JavaScript的渲染速度也是一個很重要的指標。JavaScript的渲染速度越快,動態(tài)頁面的展示也越快。Opera在JavaScript引擎的跑分上面一直都是很牛逼的,一般來說最新測試版之間PK,Opera基本都會奪冠。
1、Chakra 查克拉,IE9啟用的新的JavaScript引擎。
2、SpiderMonkey/TraceMonkey/JaegerMonkey SpiderMonkey應用在Mozilla Firefox 1.0-3.0,TraceMonkey應用在Mozilla Firefox 3.5-3.6版本,JaegerMonkey應用在Mozilla Firefox 4.0及后續(xù)的版本。
3、V8 應用于Chrome、傲游3。
4、Nitro 應用于Safari 4及后續(xù)的版本。
5、Linear A/Linear B/Futhark/Carakan Linear A應用于Opera 4.0-6.1版本,Linear B應用于Opera 7.0~9.2版本,F(xiàn)uthark應用于Opera 9.5-10.2版本,Carakan應用于Opera 10.5及后續(xù)的版本。
6、KJS KHTML對應的JavaScript引擎
三、幾個測試
1、V8引擎
http://v8.googlecode.com/svn/data/benchmarks/v6/run.html
現(xiàn)在很多“雙核”瀏覽器都用它來跑分測試JavaScript引擎,分數(shù)越高越好。
2、Acid3
http://acid3.acidtests.org/
標準支持測試,分數(shù)越高越好,滿分是100分。
3、HTML5
http://?hl=zh-cn Beta在線安裝包:
http://?hl=zh-CN&extra=betachannel Dev在線安裝包: http://?hl=zh-CN&extra=devchannel Canary在線安裝包: http://?hl=zh-CN&extra=canarychannel
Stable離線安裝包:
http://?hl=zh-CN&standalone=1 Beta離線安裝包: http://?hl=zh-CN&standalone=1&extra=betachannel Dev離線安裝包:
http://?hl=zh-CN&standalone=1&extra=devchannel Canary離線安裝包:
http://?hl=zh-CN&standalone=1&extra=canarychannel(6)Opera 官網(wǎng):
http://004km.cn/ 正式版:
http://004km.cn/download/ 測試版: http://snapshot.opera.com/windows/latest
第二篇:web項目測試兼容性測試以及四大內核瀏覽器
Pc/wap項目兼容性測試匯總
PC兼容性
1.操作系統(tǒng)兼容性 重點:XP、win7、win8 一般:Mac os、win10
2.分辨率兼容性
重點:小分辨率:1024*768;大分辨率:1920*1080 一般:其他
3.瀏覽器兼容性
重點:IE6(重點)、IE8、谷歌瀏覽器、狐火瀏覽器
一般:QQ、360、獵豹、搜狗、遨游、Safari、win10的Spartan、IE7、IE9、IE10 Wap移動端兼容性
1.操作系統(tǒng)
2.3.5、4.1.2、4.2.2、5.0等等 推薦測試機(小米、紅米、三星)
2.瀏覽器兼容性
Ios : Safari自帶瀏覽器、UC、百度、360、QQ、微信(內嵌瀏覽器)安卓: 安卓自帶瀏覽器、UC、百度、360、QQ、微信(內嵌瀏覽器)重點:ios自帶瀏覽器、安卓自帶瀏覽器、UC瀏覽器
3.分辨率兼容性(尺寸)
重點:480*320、800*400、720 * 1280 一般:其
他
四大瀏覽器的內核
一、Trident內核代表產品Internet Explorer,又稱其為IE內核。Trident(又稱為MSHTML),是微軟開發(fā)的一種排版引擎。使用Trident渲染引擎的瀏覽器包括:IE(6/7/8/9/10)、360安全瀏覽器、傲游、世界之窗瀏覽器、Avant、騰訊TT、Netscape
8、NetCaptor、Sleipnir、GOSURF、GreenBrowser和KKman等。
二、Gecko內核代表作品Mozilla FirefoxGecko是一套開放源代碼的、以C++編寫的網(wǎng)頁排版引擎。Gecko是最流行的排版引擎之一,僅次于Trident。使用它的最著名瀏覽器有Firefox、Netscape6至9。
三、WebKit內核代表作品Safari、Chromewebkit 是一個開源項目,包含了來自KDE項目和蘋果公司的一些組件,主要用于Mac OS系統(tǒng),它的特點在于源碼結構清晰、渲染速度極快。缺點是對網(wǎng)頁代碼的兼容性不高,導致一些編寫不標準的網(wǎng)頁無法正常顯示。主要代表作品有Safari和Google的瀏覽器Chrome。
四、Presto內核代表作品OperaPresto是由Opera Software開發(fā)的瀏覽器排版引擎,供Opera 7.0及以上使用。它取代了舊版Opera 4至6版本使用的Elektra排版引擎,包括加入動態(tài)功能,例如網(wǎng)頁或其部分可隨著DOM及Script語法的事件而重新排版 參考資料:百度百科
第三篇:linux內核啟動流程總結
X86體系結構內核啟動分析
一、硬件檢測
當機器加電后它首先執(zhí)行BIOS(基本輸入輸出系統(tǒng))中的代碼,BIOS首先執(zhí)行加電自檢程序(POST),當自檢通過程便完成了硬件的啟動。當自檢完成后BIOS按照系統(tǒng)COMS中設置的啟動順序搜尋有效的啟動驅動器(這里我們以硬盤為例),并讀入系統(tǒng)引導扇區(qū),并將系統(tǒng)控制權交給引導程序。
二、加載和執(zhí)行引導程序 系統(tǒng)引導程序主要是把系統(tǒng)內核裝載到內存,啟動盤必須在第一個邏輯磁道上包含引導記錄。這512個字節(jié)的扇區(qū)又被稱作是引導扇區(qū),在系統(tǒng)完成加電自檢后,BIOS從啟動盤中將引導扇區(qū)讀入到內存中。一旦引導記錄加載完畢,BIOS就交出系統(tǒng)的執(zhí)行控制權,跳轉到引導程序的頭部執(zhí)行。
有關linux pc的引導程序lilo和grub,lilo和grub可以引導多個系統(tǒng),嵌入式系統(tǒng)上,最常見的bootloader是UBOOT,如果機器上要裝多系統(tǒng)的話一般都會用到它們,這一引導程序也儲存在引導扇區(qū)中或者存放在主引導記錄中(MBR),lilo和grub都許允用戶自己配置,它們在系統(tǒng)安裝時建立了關于系統(tǒng)內核占用磁盤數(shù)據(jù)塊的位置對照表。
比如,grub程序就非常強大。Gurb運行后,將初始化設置內核運行所需的環(huán)境。然后加載內核鏡像。grub磁盤引導全過程:
stage1: grub讀取磁盤第一個512字節(jié)(硬盤的0道0面1扇區(qū),被稱為MBR(主引導記錄),也稱為bootsect)。MBR由一部分bootloader的引導代碼、分區(qū)表和魔數(shù)三部分組成。
stage1_5: 識別各種不同的文件系統(tǒng)格式。這使得grub識別到文件系統(tǒng)。
stage2: 加載系統(tǒng)引導菜單(/boot/grub/menu.lst或grub.lst根據(jù)grub版本不同文件位置會有所不同),加載內核vmlinuz和RAM磁盤initrd。
有時候基本引導裝載程序(stage1)不能識別stage2所在的文件系統(tǒng)分區(qū),那么這時候就需要stage1.5來連接stage1和stage2了
假設有如下grub配置代碼 root(hd0,0)//grub分區(qū)
//linux分區(qū) kernel /vmlinuz‐2.6.35.10‐74.fc14.i686 ro root=/dev/ram0 initrd /initramfs‐2.6.35.10‐74.fc14.i686.img 要搞清楚上面兩個root的關系,root(hd0,0)中的root是grub命令,它用來指定boot所在的分區(qū)作為grub的根目錄.而root=/dev/ram0是kernel的參數(shù),它告訴操作系統(tǒng)內核加載完畢之后,真實的文件系統(tǒng)所在的設備.要注意grub的根目錄和文件系統(tǒng)的根目錄的區(qū)別。kernel命令用來指定內核所在的位置,“/”代表(hd0,0),也就是grub的根目錄initrd命令用來指定初始化ram的img文件所在位置。
三、內核啟動 內核映像文件vmlinuz:包含有l(wèi)inux內核的靜態(tài)鏈接的可執(zhí)行文件,傳統(tǒng)上,vmlinux被稱為可引導的內核鏡像。vmlinuz是vmlinux的壓縮文件。其構成如下:
(1)第一個512字節(jié)(以前是在arch/i386/boot/bootsect.S)?
(2)第二個,一段代碼,若干個不多于512字節(jié)的段(以前是在arch/i386/boot/setup.S)?
(3)保護模式下的內核代碼(在arch/x86/boot/main.c)。
bzImage文件:使用make bzImage命令編譯內核源代碼,可以得到采用zlib算法壓縮的zImage文件,即bigzImage文件。老的zImage解壓縮內核到低端內存,bzImage則解壓縮內核到高端內存(1M(0x100000)以上),在保護模式下執(zhí)行。bzImage文件一般包含有vmlinuz、bootsect.o、setup.o、解壓縮程序misc.o、以及其他一些相關文件(如piggy.o)。注意,在Linux 2.6內核中,bootsect.S和setup.S被整合為header.S。
initramfs(或initrd)文件:initrd是initialized ram disk的意思。主要用于加載硬件驅動模塊,輔助內核的啟動,掛載真正的根文件系統(tǒng)。
裝載Linux內核的第一步應該是加載實模式代碼(boot sector和setup代碼),grub就會把實模式代碼setup加載到0x07C00之上的某個地址上,其中setup的前512個字節(jié)是boot sector(引導扇區(qū)),現(xiàn)在這個引導扇區(qū)的作用并不是用來引導系統(tǒng),而是為了兼容及傳遞一些參數(shù)。之后grub跳轉到setup的入口點,入口點為_start例程(根據(jù)arch/x86/boot/setup.ld可知)。然后setup最后跳到arch/x86/boot/main.c再經過一系列的跳轉,跳到start_kernel()函數(shù),這是Linux內核的啟動函數(shù)。main.c文件是整個Linux內核的中央聯(lián)結點。每種體系結構都會執(zhí)行一些底層設置函數(shù),然后執(zhí)行名為start_kernel的函數(shù)(在init/main.c中可以找到這個函數(shù))。可以認為main.c是內核的“粘合劑(glue)”,之前執(zhí)行的代碼都是各種體系結構相關的代碼,一旦到達start_kernel(),就與體系結構無關了。start_kernel()會調用一系列初始化函數(shù)來設置中斷,執(zhí)行進一步的內存配置,解析內核命令行參數(shù)。然后調用fs/dcache.c:vfs_caches_init()---->fs/namespace.c:mnt_init()創(chuàng)建基于內存的rootfs文件系統(tǒng)(是一個虛擬的內存文件系統(tǒng),稱為VFS),這是系統(tǒng)初始化時的根結點,即“/”結點,后面VFS會指向真實的文件系統(tǒng)。fs/namespace.c:mnt_init()會調用fs/ramfs/inode.c:init_rootfs()會調用fs/filesystems.c:register_filesystem()注冊rootfs。然后fs/namespace.c:init_mount_tree()調用fs/super.c:do_kern_mount()在內核中掛載rootfs,調用fs/fs_struct.c:set_fs_root()將當前的rootfs文件系統(tǒng)配置為根文件系統(tǒng)。此時rootfs里只有根目錄。
為什么不直接把真實的文件系統(tǒng)配置為根文件系統(tǒng)?答案很簡單,內核中沒有真實根文件系統(tǒng)設備(如硬盤,USB)的驅動,而且即便你將根文件系統(tǒng)的設備驅動編譯到內核中,此時它們還尚未加載,實際上所有內核中的驅動是由后面的kernel_init線程進行加載。另外,我們的root設備都是以設備文件的方式指定的,如果沒有根文件系統(tǒng),設備文件怎么可能存在呢?
start_kernel()在最后會調用rest_init(),這個函數(shù)會啟動一個內核線程來運行kernel_init(),自己則調用cpu_idle()進入空閑循環(huán),讓調度器接管控制權。搶占式的調度器就可以周期性地接管控制權,從而提供多任務處理能力。
kernel_init()用于完成初始化rootfs、加載內核模塊、掛載真正的根文件系統(tǒng)。(因為已經初始化了rootfs,而且還加載了內核模塊,所以可以找到設備如硬盤、內存,然后就可以把分區(qū)設置為根設備,并在根設備上掛載文件系統(tǒng))掛載完真正的根文件系統(tǒng)后,goto到out,將掛載點從當前目錄移到“/”,并把“/”作為系統(tǒng)的根目錄,至此虛擬文件系統(tǒng)切換到了實際的根文件系統(tǒng)。
目前2.6的kernel支持三方式來掛載最終的根文件系統(tǒng):
(1)所有需要的設備和文件系統(tǒng)驅動被編譯進內核,沒有initrd。通過“root=“參數(shù)指定的根設備,init/main.c:kernel_init()將調用prepare_namespace()直接在指定的根設備上掛載最終的根文件系統(tǒng)。通過可選的”init=“選項,還可以運行用戶指定的init程序。
(2)一些設備和文件驅動作為模塊來構建并存放的initrd中。initrd被稱為ramdisk,是一個獨立的小型文件系統(tǒng)。它需要包含/linuxrc程序(或腳本),用于加載這些驅動模塊,并掛載最終的根文件系統(tǒng)(這個根文件系統(tǒng)在pc平臺存放在硬盤上,結合使用pivot_root系統(tǒng)調用),然后initrd被卸載。initrd由prepare_namespace()掛載和運行。內核必須要使用CONFIG_BLK_DEV_RAM(支持ramdisk)和CONFIG_BLK_DEV_INITRD(支持initrd)選項進行編譯才能支持initrd。(方法1只掛載了一次文件系統(tǒng),而這個方法掛載了兩次)
initrd文件通過在grub引導時用initrd命令指定。它有兩種格式,一種是類似于linux2.4內核使用的傳統(tǒng)格式的文件系統(tǒng)鏡像,稱之為imageinitrd,它的制作方法同Linux2.4內核的initrd一樣,其核心文件就是/linuxrc。另外一種格式的initrd是cpio格式的,這種格式的initrd從linux 2.5起開始引入,使用cpio工具生成,其核心文件不再
是/linuxrc,而是/init,這種initrd稱為cpioinitrd。為了向后兼容,linux2.6內核對cpioinitrd和imageinitrd這兩種格式的initrd均支持,但對其處理流程有著顯著的區(qū)別。cpioinitrd的處理與initramfs類似,會直接跳過
prepare_namespace(),imageinitrd的處理則由prepare_namespace()進行。
(3)使用initramfs。prepare_namespace()調用會被跳過。這意味著必須有一個程序來完成這些工作。這個程序是通過修改usr/gen_init_cpio.c的方式,或通過新的initrd格式(一個cpio歸檔文件)存放在initramfs中的,它必須是”/init“。這個程序負責prepare_namespace()所做的所有工作。為了保持向后兼容,在現(xiàn)在的內核中,/init程序只有是來自cpio歸檔的情況才會被運行。如果不是來自cpio歸檔,init/main.c:kernel_init()將運行prepare_namespace()來掛載最終的根文件系統(tǒng),并運行一個預先定義的init程序(或者是用戶通過init=指定的,或者是/sbin/init,/etc/init,/bin/init)。initramfs是從2.5 kernel開始引入的一種新的實現(xiàn)機制。顧名思義,initramfs只是一種RAM filesystem而不是disk。initramfs實際是一個包含在內核映像內部的cpio歸檔,啟動所需的用戶程序和驅動模塊被歸檔成一個文件。因此,不需要cache,也不需要文件系統(tǒng)。編譯2.6版本的linux內核時,編譯系統(tǒng)總會創(chuàng)建initramfs,然后通過連接腳本archx86kernelvmlinux.lds.S把它與編譯好的內核連接成一個文件,它被鏈接到地址__initramfs_start~__initramfs_end處。內核源代碼樹中的usr目錄就是專門用于構建內核中的initramfs的。缺省情況下,initramfs是空的,X86架構下的文件大小是134個字節(jié)。實際上它的含義就是:在內核鏡像中附加一個cpio包,這個cpio包中包含了一個小型的文件系統(tǒng),當內核啟動時,內核將這個cpio包解開,并且將其中包含的文件系統(tǒng)釋放到rootfs中,內核中的一部分初始化代碼會放到這個文件系統(tǒng)中,作為用戶層進程來執(zhí)行。這樣帶來的明顯的好處是精簡了內核的初始化代碼,而且使得內核的初始化過程更容易定制。注意initramfs和initrd都可以是cpio包,可以壓縮也可以不壓縮。但initramfs是包含在內核映像中的,作為內核的一部分存在,因此它不會由bootloader(如grub)單獨地加載,而initrd是另外單獨編譯生成的,是一個獨立的文件,會由bootloader單獨加載到RAM中內核空間以外的地址處。目前initramfs只支持cpio包格式,它會被 populate_rootfs>unpack_to_rootfs(&__initramfs_start, &__initramfs_end&__initramfs_start, 0)函數(shù)解壓、解析并拷貝到根目錄。initramfs被解析處理后原始的cpio包(壓縮或非壓縮)所占的空間(&__initramfs_start&__initramfs_end)是作為系統(tǒng)的一部分直接保留在系統(tǒng)中,不會被釋放掉。而對于initrd鏡像文件,如果沒有在命令行中設置”keepinitd"命令,那么initrd鏡像文件被處理后其原始文件所占的空間(initrd_endinitrd_start)將被釋放掉。
四、啟動應用程序
prepare_namspace執(zhí)行完后,真正的文件系統(tǒng)就掛載成功。轉入init_post(),它用來運行用戶空間的第一個進程,即眾所周知的init進程,在我的ubuntu下,init先讀/etc/init/下的配置文件,配置文件描述了運行級別、等,并通過從/etc/rcX.d目錄到/etc/init.d目錄的初始化腳本的鏈接來啟動與終止系統(tǒng)服務。執(zhí)行相關腳本,以完成系統(tǒng)初始化,如設置鍵盤、字體,裝載模塊,設置網(wǎng)絡等,最后運行登錄程序,出現(xiàn)登錄界面。運行用戶空間中的init進程可能是以下幾種情況:
(1)noinitrd方式,則直接運行用戶空間中的/sbin/init(或/etc/init,/bin/init),作為第一個用戶進程。
(2)傳統(tǒng)的imageinitrd方式。運行的第一個程序是/linuxrc腳本,由它來啟動用戶空間中的init進程。
(3)cpioinitrd和initramfs方式。運行的第一個程序是/init腳本,由它來啟動用戶空間中的init進程。
總的來說,x86架構的Linux內核啟動過程分為6大步,分別為:
(1)實模式的入口函數(shù)_start():在header.S中,這里會進入眾所周知的main函數(shù),它拷貝bootloader的各個參數(shù),執(zhí)行基本硬件設置,解析命令行參數(shù)。
(2)保護模式的入口函數(shù)startup_32():在compressed/header_32.S中,這里會解壓bzImage內核映像,加載vmlinux內核文件。
(3)內核入口函數(shù)startup_32():在kernel/header_32.S中,這就是所謂的進程0,它會進入體系結構無關的start_kernel()函數(shù),即眾所周知的Linux內核啟動函數(shù)。start_kernel()會做大量的內核初始化操作,解析內核啟動的命令行參數(shù),并啟動一個內核線程來完成內核模塊初始化的過程,然后進入空閑循環(huán)。
(4)內核模塊初始化的入口函數(shù)kernel_init():在init/main.c中,這里會啟動內核模塊、創(chuàng)建基于內存的rootfs、加載initramfs文件或cpioinitrd,并啟動一個內核線程來運行其中的/init腳本,完成真正根文件系統(tǒng)的掛載。
(5)根文件系統(tǒng)掛載腳本/init:這里會掛載根文件系統(tǒng)、運行/sbin/init,從而啟動眾所周知的進程1。
(6)init進程的系統(tǒng)初始化過程:執(zhí)行相關腳本,以完成系統(tǒng)初始化,如設置鍵盤、字體,裝載模塊,設置網(wǎng)絡等,最后運行登錄程序,出現(xiàn)登錄界面。
如果從體系結構無關的視角來看,start_kernel()可以看作時體系結構無關的Linux main函數(shù),它是體系結構無關的代碼的統(tǒng)一入口函數(shù),這也是為什么文件會命名為init/main.c的原因。這個main.c粘合劑把各種體系結構的代碼“粘合”到一個統(tǒng)一的入口處。
第四篇:如何解除同桌100瀏覽器
如何解除同桌100瀏覽器(學生版)
首先 如果是Windows XP系統(tǒng)的 在顯示歡迎使用后立馬Ctrl+Alt+Del 只要出現(xiàn)TONGZHUO100字樣的一律關掉,不過要手快,多試幾次。
如果是Windows 7的多在同桌100瀏覽器啟動前開幾個窗口,然后進瀏覽器的時候選關機,之后就會現(xiàn)出下面的狀態(tài)框,只要不點同桌100瀏覽器界面就可以了 不過缺點是大人來輸密碼時會關機 而且本人用的是旗艦版,其他版本暫時不知,Windows 8暫時沒測試,不過以后可能會推出的。
不管是知道的人還是不知道的人,本人此舉純粹是提供福利給大家。勿噴..........
第五篇:瀏覽器引擎介紹
一些內容來自于我能找到的資料和我自己的理解,不保證正確,但是大致應該是沒錯的。
一、排版引擎
首先厘清一下瀏覽器內核是什么東西。
英文叫做:Rendering Engine,中文翻譯很多,排版引擎、解釋引擎、渲染引擎,現(xiàn)在流行稱為瀏覽器內核,至于為什么流行這么稱呼,請自行領悟。
Rendering Engine,顧名思義,就是用來渲染網(wǎng)頁內容的,將網(wǎng)頁的內容和排版代碼轉換為可視的頁面。因為是排版,所以肯定會排版錯位等問題。為什么會排版錯位呢?有的是由于網(wǎng)站本身編寫不規(guī)范,有的是由于瀏覽器本身的渲染不標準。
現(xiàn)在有幾個主流的排版引擎,因為這些排版引擎都有其代表的瀏覽器,所以常常會把排版引擎的名稱和瀏覽器的名稱混用,比如常的說IE內核、Chrome內核。其實這樣子是不太合理的,因為一個完整的瀏覽器不會只有一的排版引擎,還有自己的界面框架和其它的功能支撐,而排版引擎本身也不可能實現(xiàn)瀏覽器的所有功能。下面羅列一下幾款主流的排版引擎和瀏覽器。
1、Trident(Windows)
IE瀏覽器所使用的內核,也是很多瀏覽器所使用的內核,通常被稱為IE內核。基于Trident內核的瀏覽器非常多,這是因為Trident內核提供了豐富的調用接口。老的Trident內核(比如常說的IE6內核)一直是不遵循W3C標準的,但是由于它的市場份額最大,所以后果就是大量的網(wǎng)站只支持老的Trident內核,依據(jù)W3C標準寫的網(wǎng)頁在老的Trident內核下面又出現(xiàn)偏差。目前可供調用的最新版的Trident內核是IE9所用的內核,相較之前的版本對W3C標準的支持增強了很多。
Trident內核的瀏覽器:
IE6、IE7、IE8(Trident 4.0)、IE9(Trident 5.0)、IE10(Trident 6.0); 世界之窗
1、世界之窗
2、世界之窗3;
360安全瀏覽器1、360安全瀏覽器2、360安全瀏覽器3、360安全瀏覽器4、360安全瀏覽器5;
傲游
1、傲游2;搜狗瀏覽器1;騰訊TT;阿云瀏覽器(早期版本)、百度瀏覽器(早期版本)、瑞星安全瀏覽器、Slim Browser;
GreenBrowser、愛帆瀏覽器(12 之前版本)、115瀏覽器、155瀏覽器;
閃游瀏覽器、N氧化碳瀏覽器、糖果瀏覽器、彩虹瀏覽器、瑞影瀏覽器、勇者無疆瀏覽器、114瀏覽器、螞蟻瀏覽器、飛騰瀏覽器、速達瀏覽器、佐羅瀏覽器;
2、Gecko(跨平臺)
Netscape6啟用的內核,現(xiàn)在主要由Mozilla基金會進行維護,是開源的瀏覽器內核,目前最主流的Gecko內核瀏覽器是Mozilla Firefox,所以也常常稱之為火狐內核。因為Firefox的出現(xiàn),IE的霸主地位逐步被削弱,Chrome的出現(xiàn)則是加速了這個進程。非Trident內核的興起正在改變著整個互聯(lián)網(wǎng),最直接的就是推動了編碼的標準化,也使得微軟在競爭壓力下不得不改進IE。不過比較可惜的是,雖然是開源的,也開發(fā)了這么多年,基于Gecko的瀏覽器并不多見,除了一些簡單的改動(坑爹的X瀏覽器)或者是重新編譯(綾川ayakawa、tete009),深度定制或者增強型外殼的還比較少見。另外就是有一些其它軟件借用了Gecko內核,比如音樂管理軟件SongBird。
常見的Gecko內核的瀏覽器
Mozilla Firefox、Mozilla SeaMonkey
Epiphany(早期版本)、Flock(早期版本)、K-Meleon3、KHTML(Linux)
KDE開發(fā)的內核,速度快捷,容錯度低。這個內核可能不見得很多人知道,但是后面再看下去你就明白了。
常見的KHTML內核的瀏覽器:Konqueror4、WebKit(跨平臺)
由KHTML發(fā)展而來,也是蘋果給開源世界的一大貢獻。是目前最火熱的瀏覽器內核,火熱倒不是說市場份額,而是應用的面積和勢頭。因為是脫胎于KHTML,所以也是具有高速的特點,同樣遵循W3C標準。
常見的WebKit內核的瀏覽器:Apple Safari、Symbian系統(tǒng)瀏覽器
5、Chromium(跨平臺)
維基百科里面并沒有將Chromium從WebKit分出來,這個區(qū)分完全是基于我個人的惡趣味。記得以前看過一個大牛的博文說過,Chromium把WebKit的代碼梳理得可讀性提高很多,所以以前可能需要一天進行編譯的代碼,現(xiàn)在只要兩個小時就能搞定。這個我自己也沒有考究過,但是估計可信。這個也能解釋為什么Gecko和WebKit出來了這么久,第三方編譯、定制的版本并不多,但是由Chromium衍生出來的瀏覽器早就滿坑滿谷了。
常見的Chromium內核的瀏覽器:Chromium、Google Chrome、SRWare Iron、Comodo Dragon6、Presto(跨平臺)
Opera的內核,準確地說,是Opera 7.0及以后版本的內核,Opera 3.5-6.1版本使用的內核叫做Elektra。不用說,Presto對W3C標準的支持也是很良好的。雖然我很喜歡Opera,但是我對Presto的渲染速度一直有保留態(tài)度。之前在OperaChina論壇看見有人說過,Presto優(yōu)先解析文字,保證可閱讀性,媒體資源的渲染放后。
常見的Presto內核的瀏覽器:Opera7、其它
http://zh.wikipedia.org/wiki/排版引擎
二、JavaScript引擎
說完了排版引擎,接下來說說JavaScript引擎。顧名思義,JavaScript引擎就是用來渲染JavaScript的。為什么要單獨拿出來說呢?因為它涉及到跑分。經??匆姾芏辔恼略趫蟮勒f哪個瀏覽器更快,其實大部分說的就是JavaScript的渲染速度,而不是頁面的載入速度。在網(wǎng)速許可的情況下,其實各個瀏覽器的頁面載入速度差別不大(Opera遜色一些)。那是不是說對比JavaScript的渲染速度其實沒有意義?也不是這么說,因為現(xiàn)在JavaScript在頁面中的比重會越來越大,越來越多的動態(tài)頁面開始大量借助JavaScript,比如現(xiàn)在主流的SNS、郵箱、網(wǎng)頁游戲,所以JavaScript的渲染速度也是一個很重要的指標。JavaScript的渲染速度越快,動態(tài)頁面的展示也越快。Opera在JavaScript引擎的跑分上面一直都是很牛逼的,一般來說最新測試版之間PK,Opera基本都會奪冠。
1、Chakra
查克拉,IE9啟用的新的JavaScript引擎。
2、SpiderMonkey/TraceMonkey/JaegerMonkey
SpiderMonkey應用在Mozilla Firefox 1.0-3.0,TraceMonkey應用在Mozilla Firefox 3.5-3.6版本,JaegerMonkey應用在Mozilla Firefox 4.0及后續(xù)的版本。
3、V8
應用于Chrome、傲游3。
4、Nitro
應用于Safari 4及后續(xù)的版本。
5、Linear A/Linear B/Futhark/Carakan
Linear A應用于Opera 4.0-6.1版本,Linear B應用于Opera 7.0~9.2版本,F(xiàn)uthark應用于Opera 9.5-10.2版本,Carakan應用于Opera 10.5及后續(xù)的版本。
6、KJS
KHTML對應的JavaScript引擎。
三、幾個測試
1、V8引擎
http://v8.googlecode.com/svn/data/benchmarks/v6/run.html
現(xiàn)在很多“雙核”瀏覽器都用它來跑分測試JavaScript引擎,分數(shù)越高越好。
2、Acid3
http://acid3.acidtests.org/
標準支持測試,分數(shù)越高越好,滿分是100分。
3、HTML5
http://?hl=zh-cn Beta在線安裝包:
http://?hl=zh-CN&extra=betachannel Dev在線安裝包:
http://?hl=zh-CN&extra=devchannel Canary在線安裝包:
http://?hl=zh-CN&extra=canarychannel Stable離線安裝包:
http://?hl=zh-CN&standalone=1 Beta離線安裝包:
http://?hl=zh-CN&standalone=1&extra=betachannel
Dev離線安裝包:
http://?hl=zh-CN&standalone=1&extra=devchannel
Canary離線安裝包:
http://?hl=zh-CN&standalone=1&extra=canarychannel(6)Opera 官網(wǎng):
http://004km.cn/ 正式版:
http://004km.cn/download/ 測試版:
http://snapshot.opera.com/windows/latest