深入理解電腦作業系統(隨記 比較混亂中,最好別浪費時間看)

來源:互聯網
上載者:User

   這本書買了挺久了,但卻一直沒認真看過。最近花費在遊戲上的時間相對比較多。不過暫時也告一段落了,開始把一些時間轉移到看書上面來。周末看了 最佳化的部分,書裡主要舉的是一個迴圈的取值運算的例子,確實也有不少的效能瓶頸在迴圈迭代上面。

 

  簡單的例如:

  for(int i ; i < Max; i++)

  {

      float f = f * f * f  ;  (1)

     

      float sum += j[i] + f;

 

 }

 

相對於 把(1)提到迴圈外面,很明顯的效能浪費。這是比較明顯的最佳化

 

還有就是從彙編角度去分析寄存器的讀寫次數來觀察。例如:

 

  fun(int * p)

{

   int sum;

   for(int i ; i < Max; i++)

   {

       sum = i + *p;        // 這裡每次都需要對指標p取值,會發生多一次讀寄存器的操作

  }

}

 

相對於:

  fun(int * p)

{

   int sum;

   int temp = *p;

   for(int i ; i < Max; i++)

   {

       sum = i + temp ;        //這樣節省了操作

  }

}

 

 

現代新的cpu都是亂序執行指令的,就是說cpu從解碼成指令,放到指令高速緩衝區,再發送多對應的執行單元處理並非一定是順序的

 

 

<2>進程式控制制

獲得進程ID: getpid

獲得父進程ID:getppid

退出進程: exit

建立子進程:fork 比較有意思一次調用返回兩次,在子進程中返回0,父進程則返回子進程的ID

 

等待子進程終止: waitpid  :通過status可以判斷出子進程的退出狀態了(是正常退出,或者因為異常等:例子:

while( pid = waitpid(-1, &status, 0)) >0)

   if(WIFEXITED(status))  //如果子進程是正常終止返回真

     ....

 

接下來是讓執行中的進程休眠:調用常用的 sleep(x) 可以讓進程掛起一段時間:或者直接調用pause讓進程一直休眠,直到收到一個訊號為止

 

*載入並運行程式: execve(filename, argv, envp);

 

*訊號:更高層形式的異常,允許進程中斷其它進程。不同於之前的 環境切換(建立在以前說的:中斷 故障 終止等較底層的異常之上的,作業系統利用上下文來實現多任務,就是保留一個進程的狀態,切換處理另外的進程再回來)

 

linux系統有30種不同類型的訊號:SIGHUP  掛起

 

*發送訊號: kill -9 15213 發送訊號9到進程ID:15213

alarm(x)每隔一段時間發送一個 SIGALRM訊號給調用進程。如何接收訊號呢:

看下面這個函數就明白了:

typedef void handler_t(int);

handler_t* signal(int signum, handler_t* handler);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.