2015-06-16 78 views
2

是否以特定間隔運行until循環內的代碼?循環如何在最低級別工作

例如除非循環完成,否則不會執行其他指令嗎?還是循環在每個其他指令之間運行?

感謝

+0

沒有其他進程運行,直到lop完成。除非你有一個由你創建的多線程開發。 –

回答

0

在最低水平,有一大堆的物理學有很少與計算機科學的事,循環等在芯片級,現代化的芯片能夠運行很多的東西,在並行。即使忽略多個內核,如果你正在運行一個長循環的程序,很可能會發生多箇中斷,這將導致芯片暫停執行循環,處理中斷並返回。請注意,如果您在任何類型的操作系統上運行,該中斷可能會導致操作系統暫停運行該循環的進程並運行完全不同的進程。

0

所有高級語言代碼都被編譯器分解爲彙編(或中間代碼,然後彙編)。然後程序集一次執行一條指令。但是,某些指令需要比其他指令更多的時鐘週期(例如,必須從主存儲器讀取/寫入/從主存儲器讀取/寫入)。

由於處理器的流水線體系結構,在此期間執行其他指令通常是有益的。請閱讀處理器的instruction pipeline以瞭解基本階段。

許多編譯器會對彙編指令的排序進行優化,以減少等待時間(最大化處理器的流水線特性)。

一個循環本身不是一條指令,而是幾條彙編。

最後,我認爲你不能保證所花費的時間。但要知道,一次迭代所需的時間與另一次迭代所需的時間相比,可能不會明顯。

我不確定我是否回答了您的問題,或者是否回答了您的問題。如果你想要更多的細節或資源,請告訴我。這是圓頂的全部。

0

假設一個控制線程開始處理循環。在該控制線程上執行任何其他代碼之前,循環將運行完成。

如果你有一個多線程程序,你的程序可以在循環運行時繼續做其他事情。不同的線程獨立執行,它們的執行可以在多線程環境中重疊。

下面真正發生的事情取決於硬件以及處理器上的線程安排方式。如果線程調度在同一個處理器內核上,那麼它們的執行將是交錯的:調度器通常會爲某個線程分配一些量程,向另一個線程分配下一個量程等。如果線程在不同的處理器上調度,量程可以重疊,並且線程實際上可以同時處理指令。

高級語言循環通常會翻譯成依賴於跳轉的機器語言代碼(至少其中一個指向程序中較早的地址)。首先評估一些條件 - 在英特爾架構上,您可能有CMPSUB或真的任何設置適當標誌的指令 - 然後您將得到如JNZ(如果不是零則跳轉)或JG(如果大於則跳轉)在由比較指令設置的標誌上將指令指針更新爲適當的值。一旦指令指針被更新,爲該控制線程獲取的下一條指令來自正確的位置。

當調度程序切換在處理器核心上圍繞控制線程,它所謂上下文切換與正確的值來更新指令指針,寄存器等,從而控制線程看到相同的可觀察到的處理器狀態與上次執行時相同。這需要一些時間,並且代表與時間 - 量子調度方法相關的低效率(例如,當它們不再需要記住狀態時,可以只調度控制線程,或者允許線程在存儲之後明確地產生收益線程可以稍後檢索它的狀態,等等)

這是如何工作的主題計算機架構,所以我會推薦一本好的本科水平的教科書進一步閱讀。