死在/dev/random上-創(chuàng)新互聯(lián)

FOTA差分升級(jí)的時(shí)候有個(gè)retouch_binaries操作,我這里到了這一句就卡住了,等待的圈圈能轉(zhuǎn)幾天也不見(jiàn)完。后來(lái)發(fā)覺(jué)亂捅幾下居然完了。找到一個(gè)解決此問(wèn)題的patch,發(fā)現(xiàn)是將/dev/random修改成了/dev/urandom死在/dev/random上
diff --git a/updater/install.c b/updater/install.c
index a1acdb9..2f2631a100644--- a/updater/install.c
+++ b/updater/install.c
@@-450,7 +450,7 @@ Value* RetouchBinariesFn(const char* name, State* state,
bool override_set = false;
     int32_t random_base= time(NULL) % 1024;
// some more randomness from /dev/random-    FILE *f_random = fopen("/dev/random", "rb");
+    FILE *f_random = fopen("/dev/urandom", "rb");
     uint16_t random_bits= 0;
if (f_random != NULL) {
         fread(&random_bits, 2, 1, f_random);

遇到這樣的事情,當(dāng)然是先上網(wǎng)搜索/dev/random和/dev/urandom,找到一段話(http://www.linuxidc.com/Linux/2012-05/60476.htm)

創(chuàng)新互聯(lián)是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計(jì)公司的優(yōu)秀設(shè)計(jì)人員和策劃人員組成的一個(gè)具有豐富經(jīng)驗(yàn)的團(tuán)隊(duì),其中包括網(wǎng)站策劃、網(wǎng)頁(yè)美工、網(wǎng)站程序員、網(wǎng)頁(yè)設(shè)計(jì)師、平面廣告設(shè)計(jì)師、網(wǎng)絡(luò)營(yíng)銷人員及形象策劃。承接:成都網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站改版、網(wǎng)頁(yè)設(shè)計(jì)制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫(kù)開(kāi)發(fā),以高性價(jià)比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺(tái)等全方位的服務(wù)。

Linux中的隨機(jī)數(shù)可以從兩個(gè)特殊的文件中產(chǎn)生,一個(gè)是/dev/urandom.另外一個(gè)是/dev/random。他們產(chǎn)生隨機(jī)數(shù)的原理是利用當(dāng)前系統(tǒng)的熵池來(lái)計(jì)算出固定一定數(shù)量的隨機(jī)比特,然后將這些比特作為字節(jié)流返回。熵池就是當(dāng)前系統(tǒng)的環(huán)境噪音,熵指的是一個(gè)系統(tǒng)的混亂程度,系統(tǒng)噪音可以通過(guò)很多參數(shù)來(lái)評(píng)估,如內(nèi)存的使用,文件的使用量,不同類型的進(jìn)程數(shù)量等等。如果當(dāng)前環(huán)境噪音變化的不是很劇烈或者當(dāng)前環(huán)境噪音很小,比如剛開(kāi)機(jī)的時(shí)候,而當(dāng)前需要大量的隨機(jī)比特,這時(shí)產(chǎn)生的隨機(jī)數(shù)的隨機(jī)效果就不是很好了。

這就是為什么會(huì)有/dev/urandom和/dev/random這兩種不同的文件,后者在不能產(chǎn)生新的隨機(jī)數(shù)時(shí)會(huì)阻塞程序,而前者不會(huì)(ublock),當(dāng)然產(chǎn)生的隨機(jī)數(shù)效果就不太好了,這對(duì)加密解密這樣的應(yīng)用來(lái)說(shuō)就不是一種很好的選擇。/dev/random會(huì)阻塞當(dāng)前的程序,直到根據(jù)熵池產(chǎn)生新的隨機(jī)字節(jié)之后才返回,所以使用/dev/random比使用/dev/urandom產(chǎn)生大量隨機(jī)數(shù)的速度要慢。

好吧,上面那段熵什么的我們就先不深究了,我下來(lái)再學(xué)習(xí)。不過(guò)基本上可以解釋我的兩個(gè)疑問(wèn)了:

  1. 為什么會(huì)這么慢?“/dev/random”就是慢啊,升級(jí)的時(shí)候,系統(tǒng)基本上動(dòng)作很小的,拿來(lái)那么多的變化讓它去生成隨機(jī)數(shù)?即使我嘗試在我電腦上執(zhí)行“cat /dev/random|od -x”,然后什么也不動(dòng),就等它出字符,也是龜速。
  2. 為什么捅兩下會(huì)快?不管是按鍵還是觸屏,都會(huì)導(dǎo)致手機(jī)系統(tǒng)的變化,這個(gè)變化就是產(chǎn)生隨機(jī)數(shù)的根源,動(dòng)了就有隨機(jī)數(shù)了,數(shù)出來(lái)了,更新也就能繼續(xù)了。這也就是為什么放這一個(gè)晚上也沒(méi)有完的原因了,放著就放著了,系統(tǒng)基本處于靜止?fàn)顟B(tài)了。

這哪是慢啊,簡(jiǎn)直是要命了。

引申閱讀 http://zh.wikipedia.org/wiki//dev/random

新聞標(biāo)題:死在/dev/random上-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://bm7419.com/article28/dpoccp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、移動(dòng)網(wǎng)站建設(shè)、虛擬主機(jī)、動(dòng)態(tài)網(wǎng)站、小程序開(kāi)發(fā)、網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)