亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 00000012.htm

?? 本書詳細地介紹了Linux下一些主要函數的功能
?? HTM
字號:
<HTML><HEAD>  <TITLE>BBS水木清華站∶精華區</TITLE></HEAD><BODY><CENTER><H1>BBS水木清華站∶精華區</H1></CENTER>發信人:&nbsp;axp33a&nbsp;(無聊中...),&nbsp;信區:&nbsp;Linux&nbsp;<BR>標&nbsp;&nbsp;題:&nbsp;Linux內核源代碼分析4-2-1&nbsp;<BR>發信站:&nbsp;BBS&nbsp;水木清華站&nbsp;(Thu&nbsp;Aug&nbsp;&nbsp;3&nbsp;11:30:41&nbsp;2000)&nbsp;WWW-POST&nbsp;<BR>&nbsp;<BR>4.2&nbsp;&nbsp;&nbsp;初始化Linux內核
&nbsp;<BR>在內核成功裝入內存(如果需要就解壓縮)以及一些關鍵硬件,例如已經在低層設置過的&nbsp;<BR>內存管理器(MMU,請參見第8章)之后,內核將跳轉到start_kernel(19802行)。這個&nbsp;<BR>函數完成其余的系統初始化工作—實際上,幾乎所有的初始化工作都是由這個函數實現的&nbsp;<BR>。因此,start_kernel就是本節的核心。
&nbsp;<BR>&nbsp;start_kernel
&nbsp;<BR>19802:__init標示符在gcc編譯器中指定將該函數置于內核的特定區域。在內核完成自身&nbsp;<BR>初始化之后,就試圖釋放這個特定區域。實際上,內核中存在兩個這樣的區域,&nbsp;<BR>.text.init和.data.init—第一個是代碼初始化使用的,另外一個是數據初始化使用的(&nbsp;<BR>可以在進程間共享的代碼和字符串常量之類的“文本(Text)”是在可執行程序中的“純&nbsp;<BR>區域”中使用的一個術語)。另外你也可以看到__initfunc和__initdata標志,前者和&nbsp;<BR>__init類似,標志初始化專用代碼,后者則標志初始化專用數據。
&nbsp;<BR>19807:如前所述,即使在多處理器系統中,在啟動時也只使用一個CPU。Intel稱之為引&nbsp;<BR>導程序處理器(bootstrap&nbsp;processor,簡稱為BSP),它在內核代碼的某些地方有時也稱&nbsp;<BR>之為BP。BSP首次運行這一行時,跳過后面的if語句,并減小boot_cpu標志,從而當其他&nbsp;<BR>CPU運行到此處時,都要運行if語句。等到其他CPU被激活執行到這里時,BSP已經在idle&nbsp;<BR>循環中了(本章稍后會更詳細地討論這個問題),initialize_secondary(4355行)負責&nbsp;<BR>把其他CPU加入到BSP中。這樣,其他CPU就不用執行start_kernel的剩余部分了—這也是&nbsp;<BR>一件好事,因為這意味著不用再對許多硬件進行冗余初始化等工作了。
&nbsp;<BR>順便說一下,這種奇異的小小的改動只有對于x86是必需的;對于其他平臺,調用&nbsp;<BR>smp_init完全可以處理SMP設置的其他部分。因此,其他平臺的initialize_secondary的&nbsp;<BR>定義都是空的。
&nbsp;<BR>19816:打印內核標題信息(20099行),這里顯示了有關內核如何編譯的信息,包括在什&nbsp;<BR>么機器上編譯,什么時間編譯,使用什么版本的編譯器,等等。如果中間任何一步發生了&nbsp;<BR>錯誤,在尋找機器不能啟動的原因時查明內核的來源是一個有用的線索。
&nbsp;<BR>19817:初始化內核自身的部分組件—內存、硬件中斷、調度程序,等等。尤其是&nbsp;<BR>setup_arch函數(19765行)完成體系結構相關的設置,此后在command_line(傳遞到內&nbsp;<BR>核的參數,在下面討論)、memory_start和memory_end(內核可用物理地址范圍)中返回&nbsp;<BR>結果。下面這些函數都希望駐留在內存低端,它們使用memory_start和memory_end來傳遞&nbsp;<BR>該信息。在函數獲得所希望的值后,返回值指明了新的memory_start的值。
&nbsp;<BR>19823:分析傳給內核的各種選項。parse_options函數(19707行,在隨后的“分析內核&nbsp;<BR>選項”一節中討論)也設置了argv和envp的初值。
&nbsp;<BR>19833:內核運行過程中也可以自行對所進行的工作進行記錄,周期性地對所執行的指令&nbsp;<BR>進行抽樣,并使用所獲得的結果更新表格。這在定時器中斷過程中通過調用&nbsp;<BR>x86_do_profile(1896行)來實現,該部分將在第6章中介紹。
&nbsp;<BR>如圖4-1中說明的那樣,這個表格把內核劃分為幾個大小相同的范圍,并簡單跟蹤在一次&nbsp;<BR>中斷的時間內每個范圍中運行多少條指令。這種記錄當然是非常粗糙的—甚至不是依據函&nbsp;<BR>數和行號進行劃分的,而只是使用近似的地址—但是這樣代價很低,且快速、短小,而且&nbsp;<BR>有助于專家判斷最關鍵的問題。每個表格條目所涉及到地址的多少—還有問題發生地點的&nbsp;<BR>不確定性—可以通過簡單修改prof_shift(26142行)來調節。profile_setup(19076行&nbsp;<BR>,在本章中后面討論)可以讓你在啟動的時候設置prof_shift的值,這樣比為修改這個數&nbsp;<BR>字而重新編譯內核要清晰方便得多。
&nbsp;<BR>圖4-1&nbsp;&nbsp;&nbsp;描述用緩存
&nbsp;<BR>這個if程序塊為記錄表格分配內存,并把所有項都清零。注意到如果prof_shift是0(默&nbsp;<BR>認值),那么記錄功能就被關掉了,if程序塊不再被執行,也不為表格分配空間。
&nbsp;<BR>19846:內核通過調用sti(UP版本的13104行,注意該主題在第6章中有更詳細的介紹)開&nbsp;<BR>始接收硬件中斷。首先需要激活定時器中斷,以便后來對calibrate_delay(19654行)的&nbsp;<BR>調用可以計算機器的BogoMIPS的值(在下一節“BogoMIPS”中介紹)。因為一些設備驅動&nbsp;<BR>程序需要BogoMIPS的值,所以內核必需在大部分硬件、文件系統等等初始化之前計算出這&nbsp;<BR>個值來。
&nbsp;<BR>19876:測試該CPU的各種缺陷,比如Pentium&nbsp;F00F缺陷(請參見第8章),記錄檢測到的&nbsp;<BR>缺陷,以便于內核的其他部分以后可以使用它們工作。(為了節省空間起見,我們省略掉&nbsp;<BR>了check_bugs函數。)
&nbsp;<BR>19882:調用smp_init(19787行),它又調用了其他的函數來激活SMP系統中的其他CPU:&nbsp;<BR>在x86的平臺上,smp_boot_cpus(4614行)初始化一些內核數據結構,這些數據結構跟蹤&nbsp;<BR>檢測另外的CPU并簡單的將其改為保持模式;最后smp_commence(4195行)使這些CPU繼續&nbsp;<BR>執行。
&nbsp;<BR>19883:把init函數作為內核線程終止,這比較復雜;請參閱本章后面有關init的討論。&nbsp;<BR>
&nbsp;<BR>19885:增加idle進程的need_resched標志,這樣做的原因此時可能還比較模糊。當讀完&nbsp;<BR>了第5、6、7章以后,就會有個清楚的概念;但是,在下一個定時器中斷結束之前(在第6&nbsp;<BR>章中討論),system_call(171行,在第5章中討論)函數中會注意到idle進程的&nbsp;<BR>need_resched標志增加了,并且調用schedule(26686行,第7章)釋放CPU,并將其賦給&nbsp;<BR>更應該獲取CPU的進程。
&nbsp;<BR>19886:已經完成了內核初始化的工作—或者不管怎樣,已經把需要完成的少量責任傳遞&nbsp;<BR>給了init,所剩余的工作不過是進入idle循環以消耗空閑的CPU時間片。因此,本行調用&nbsp;<BR>cpu_idle(2014行)—idle循環。正如你可以從cpu_idle本身可以發現的一樣,該函數從&nbsp;<BR>不返回。然而,當有實際工作要處理時,該函數就會被搶占。
&nbsp;<BR>注意到cpu_idle只是反復調用idle系統調用(下一章將討論系統調用),它通過sys_idle&nbsp;<BR>(2064行)實現真正的idle循環—2014行對應UP版本,2044行針對SMP版本。它們通過執&nbsp;<BR>行hlt(對應“halt”)指令把CPU轉入低功耗的“睡眠”狀態。只要沒有實際的工作處理&nbsp;<BR>,CPU都將轉入這種狀態。
&nbsp;<BR>4.2.1&nbsp;&nbsp;&nbsp;BogoMIPS
&nbsp;<BR>BogoMIPS的數字由內核計算并在系統初始化的時候打印。它近似給出了每秒鐘CPU可以執&nbsp;<BR>行一個短延遲循環的次數。在內核中,這個結果主要用于需要等待非常短周期的設備驅動&nbsp;<BR>程序—例如,等待幾微秒并查看設備的某些信息是否已經可用。
&nbsp;<BR>由于沒有正確理解BogoMIPS的含義,BogoMIPS在各處都被濫用,就仿佛它可以滿足人類最&nbsp;<BR>原始、最深層次的需求:把所有計算機性能的信息簡化為一個數字。“BogoMIPS”中的“&nbsp;<BR>Bogo”部分來源于“偽(bogus)”,就正是為了防止這種用法:雖然這個數字比大多數&nbsp;<BR>基準測試數大,但是它仍然是不準確的、容易引起誤解的、無用的和不真實的,根本不適&nbsp;<BR>合將它用于機器間差別的對比。但是這個數字仍然非常吸引人,這也正是我們在這里討論&nbsp;<BR>這個問題的原因。(BogoMIPS&nbsp;中“MIPS”部分是“millions&nbsp;of&nbsp;instructions&nbsp;per&nbsp;&nbsp;<BR>second(百萬條指令每秒)”的縮寫,這是cpu基準測試中的一個常用單位。)
&nbsp;<BR>&nbsp;calibrate_delay
&nbsp;<BR>19654:calibrate_delay是近似計算BogoMIPS數字的內核函數。
&nbsp;<BR>19622:作為第一次估算,calibrate_delay計算出在每一秒內執行多少次__delay循環(&nbsp;<BR>6866行),也就是每個定時器滴答(timer&nbsp;tick)—百分之一秒—內延時循環可以執行多&nbsp;<BR>少次。
&nbsp;<BR>19664:計算一個定時器滴答內可以執行多少次循環需要在滴答開始時就開始計數,或者&nbsp;<BR>應該盡可能與它接近。全局變量jiffies(16588行)中存儲了從內核開始保持跟蹤時間開&nbsp;<BR>始到現在已經經過的定時器滴答數;第6章中將介紹它的實現方式。jiffies保持異步更新&nbsp;<BR>,在一個中斷內—每秒一百次,內核暫時掛起正在處理的內容,更新變量,然后繼續剛才&nbsp;<BR>的工作。如果不這樣處理,下一行的循環就永遠不可能退出。從而,如果jiffies不聲明&nbsp;<BR>為volatile—簡單地說,這個值變化的原因對于編譯器是透明的,gcc仍然可能對該循環&nbsp;<BR>進行優化,并引起該循環進入不能退出的狀態。雖然目前的gcc還沒有如此高的智能,然&nbsp;<BR>而它的維護者應該完全能夠為它實現這種智能。
&nbsp;<BR>19669:定時器又前移了一個滴答,因此又產生一個新的滴答。下一步是要等待&nbsp;<BR>loops_per_sec延時循環調用定時器循環,接著檢測是否最少有一個完整的滴答已經完成&nbsp;<BR>。如果是這樣,就退出首次近似估算循環;如果沒有,就把loops_per_sec的值加倍,然&nbsp;<BR>后重新啟動這個過程。
&nbsp;<BR>這個循環的正確性依賴于如下的事實:現有的機器在任何地方都不能每秒執行232次延時&nbsp;<BR>循環(對于64位機來說則遠低于每秒264次),雖然這只是一個微不足道的問題。
&nbsp;<BR>19677:現在內核已經清楚loops_per_sec循環調用延時循環在這臺機器上要花費超過百分&nbsp;<BR>之一秒的時間才能完成,因此,內核將重新開始進行估算。為了提高效率,內核使用折半&nbsp;<BR>查找算法計算loops_per_sec的實際值,我們假定開始的時候,實際值在現在計算結果和&nbsp;<BR>其一半之間—實際值不可能比現在計算值還大,但是可以(而且可能)稍微小一點。
&nbsp;<BR>19681:和前面使用的方式一樣,calibrate_delay查看這個loops_per_sec已經減小了的&nbsp;<BR>值是否還是比較大,而需要耗費一個完整的定時器間隔。如果還是相當大,實際值應該小&nbsp;<BR>于當前計算值或者就是當前值,因此,使用更小的值繼續查詢;如果不夠大,就使用一個&nbsp;<BR>更大的值繼續查詢。
&nbsp;<BR>19691:內核有一種很好的方法來計算一個定時器滴答中執行延時循環的次數。這個數字&nbsp;<BR>乘以一秒內滴答的數量就得到了每秒內可以執行的延時循環的次數。這種計算只是一種估&nbsp;<BR>算,乘法也累積了誤差,因此結果并不能精確到納秒。但是這個數字供內核使用已經足夠&nbsp;<BR>精確了。
&nbsp;<BR>19693:為了讓用戶感到激動,內核打印出這個數字。注意這里明顯省略了%f的格式限定&nbsp;<BR>—內核盡量避免浮點數運算。這個計算過程中最有用的常量是500&nbsp;000;它是用一百萬除&nbsp;<BR>以2得來,理由是每秒鐘執行一百萬條指令,而每個delay循環的核心是2條指令(decl和&nbsp;<BR>一條跳轉指令)。
&nbsp;<BR>
&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>※&nbsp;來源:·BBS&nbsp;水木清華站&nbsp;smth.org·[FROM:&nbsp;166.111.196.22]&nbsp;&nbsp;<BR><CENTER><H1>BBS水木清華站∶精華區</H1></CENTER></BODY></HTML>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲视频一区在线| 色婷婷一区二区三区四区| 欧美主播一区二区三区美女| 中文字幕日本乱码精品影院| 成人avav影音| 中文字幕在线不卡一区二区三区| 成人一区二区三区在线观看| 欧美国产欧美综合| 91社区在线播放| 亚洲精品中文在线影院| 欧美日韩一卡二卡三卡| 日韩高清不卡一区二区三区| 精品美女被调教视频大全网站| 国产美女娇喘av呻吟久久| 中文字幕精品综合| 色婷婷亚洲精品| 日韩av在线发布| 久久久不卡网国产精品一区| 99re6这里只有精品视频在线观看| 亚洲精品自拍动漫在线| 欧美精品日韩一区| 国产一区二区三区四区五区入口 | 91小视频在线免费看| 亚洲在线视频一区| 日韩视频免费直播| 丁香激情综合五月| 一区二区三区四区不卡在线| 欧美一区二区三区在线观看视频 | 国产99精品在线观看| 国产精品久久毛片a| 欧美日韩精品二区第二页| 久久狠狠亚洲综合| 亚洲蜜臀av乱码久久精品蜜桃| 3d动漫精品啪啪一区二区竹菊| 国产精品18久久久久久久久| 一区二区三区在线视频播放| 精品国产一区二区三区久久影院 | 色综合视频在线观看| 石原莉奈在线亚洲二区| 国产精品美女久久久久aⅴ| 欧美日本在线播放| 成人激情午夜影院| 奇米888四色在线精品| √…a在线天堂一区| 精品国产乱码久久久久久免费 | 一区二区三区欧美视频| 日韩欧美一区二区在线视频| 99re免费视频精品全部| 狠狠色狠狠色合久久伊人| 亚洲一区二区三区美女| 国产亚洲视频系列| 欧美一区二区三区在线电影| 一本大道久久a久久综合婷婷| 国内不卡的二区三区中文字幕| 亚洲综合免费观看高清完整版在线 | 极品瑜伽女神91| 亚洲一区免费视频| 国产精品免费视频一区| 日韩欧美一二三区| 欧美理论在线播放| 色综合中文字幕| 国产a久久麻豆| 麻豆成人91精品二区三区| 性久久久久久久久| 亚洲综合色成人| 自拍偷拍国产亚洲| 中文字幕一区二区视频| 国产日本欧美一区二区| www精品美女久久久tv| 日韩一区二区电影| 91精品蜜臀在线一区尤物| 欧美色成人综合| 亚洲一区二区av在线| 在线亚洲免费视频| 亚洲综合一二区| 在线观看免费亚洲| 亚洲一区二区3| 欧美性受xxxx黑人xyx| 久久久久久黄色| 欧美日韩国产在线播放网站| 欧美日韩在线播放| 欧美日韩在线播| 欧美日产国产精品| 日韩一区二区麻豆国产| 欧美一级免费观看| 日韩精品一区二区三区在线| 日韩精品自拍偷拍| 久久香蕉国产线看观看99| 久久九九99视频| 欧美激情一区二区在线| 国产精品久久久久久亚洲毛片| 亚洲欧洲另类国产综合| 亚洲精品免费在线| 偷拍自拍另类欧美| 精品午夜久久福利影院| 国产成人精品免费一区二区| 99r国产精品| 中文字幕日韩一区二区| 成人激情小说网站| 亚洲国产精品久久不卡毛片| 欧美一级欧美一级在线播放| 国产一区二区免费在线| 中文字幕永久在线不卡| 欧美一区二区三区免费在线看 | 国产女同互慰高潮91漫画| 99精品久久只有精品| 亚洲18女电影在线观看| 久久久噜噜噜久久人人看 | 欧美美女黄视频| 久久精品99国产精品日本| 日韩一区二区免费电影| 成人一区二区三区视频在线观看 | 久久成人精品无人区| 中文字幕av一区二区三区| 欧美亚洲国产一区二区三区| 激情五月婷婷综合网| 亚洲人成网站影音先锋播放| 日韩一区二区电影| 91蜜桃免费观看视频| 久久激五月天综合精品| 亚洲欧美日韩中文播放| 精品国产一区二区精华| 91在线视频观看| 国产麻豆一精品一av一免费| 亚洲一级二级三级| 国产精品无遮挡| 欧美成人精品高清在线播放 | 日日嗨av一区二区三区四区| 国产精品美女视频| 日韩欧美国产三级| 欧美日韩国产成人在线免费| 94-欧美-setu| 国产精品亚洲成人| 日韩精品一区二区三区蜜臀| 欧美一级在线免费| 激情亚洲综合在线| 国内精品久久久久影院薰衣草 | 国产成人欧美日韩在线电影| 国产精品影视天天线| 国产高清亚洲一区| 波多野洁衣一区| 欧美性淫爽ww久久久久无| 欧美日韩免费一区二区三区| 欧美电影免费观看高清完整版在 | 欧美aaa在线| 国产精品77777| 91蝌蚪porny| 欧美男人的天堂一二区| 26uuu久久天堂性欧美| 自拍偷拍欧美激情| 日本视频一区二区| 不卡视频在线看| 欧美巨大另类极品videosbest| 久久久久久久久久电影| 一区二区三区波多野结衣在线观看| 日日摸夜夜添夜夜添精品视频| 国产盗摄视频一区二区三区| 欧美在线观看一区二区| 欧美精品一区二区三区很污很色的| 亚洲人xxxx| 国产一区二区免费视频| 欧美性猛交xxxx黑人交| 国产日产欧产精品推荐色| 亚洲午夜在线电影| 国产v日产∨综合v精品视频| 欧美久久久久久蜜桃| 国产精品电影一区二区| 裸体歌舞表演一区二区| 91精品福利视频| 国产精品丝袜91| 麻豆91精品91久久久的内涵| 在线视频欧美精品| 国产精品另类一区| 蜜臀av一区二区三区| 欧美性生活一区| 日本一区二区免费在线| 老司机精品视频线观看86| 在线视频你懂得一区二区三区| 国产欧美日韩另类视频免费观看| 日韩成人免费看| 欧美视频中文字幕| 亚洲天堂免费看| 成人精品小蝌蚪| 亚洲精品一区二区三区四区高清 | 国内久久精品视频| 欧美老女人第四色| 伊人婷婷欧美激情| 一本久久综合亚洲鲁鲁五月天 | www.亚洲人| 久久久久久一级片| 精品一区二区免费| 精品理论电影在线| 日本最新不卡在线| 欧美一区二区三区系列电影| 午夜精品一区二区三区电影天堂| 在线国产电影不卡| 一区二区三区在线免费观看| 色94色欧美sute亚洲线路一久| 亚洲视频在线观看一区| 91网页版在线|