18、深入理解電腦系統筆記:測配量序執行時間

來源:互聯網
上載者:User

1、人不能夠覺察短於大約100ms的時間段。

2、電腦有一個外部計時器,它周期性地向處理器發送中斷訊號。這些中斷訊號之間的時間被稱為間隔時間(interval time)。

3、從一個進程切換到另一個進程需要幾千個刻度來儲存當前當前進程的狀態。典型的計時器間隔範圍是1~10ms。

4、通過間隔計數(interval counting)來測量時間

OS也用計時器(timer)來記錄每個進程使用的累計時間,這種資訊提供的是對程式執行時間不那麼精確的測量值。這種方法只對長期間(到少1s)的測量有用。

OS維護著每個進程使用的使用者時間量和系統時間量的計數值。

通過如下兩種方法讀進程的計數器

1)shell的命令前加time。

    結果前兩個值為命令進程執行的使用者和系統時間,第三個值為執行經過的總時間。

2)調用函數times來讀進程的計時器。

範例程式碼

#include <sys/times.h>struct tms {clock t tms utime; /* user time */clock t tms stime; /* system time */clock t tms cutime; /* user time of reaped children */clock t tms cstime; /* system time of reaped children */}clock t times(struct tms *buf);Returns: number of clock ticks elapsed since system started#include <time.h>clock t clock(void);Returns: total time used by process

這些時間測量值是以時鐘滴答(clock tick)為單位來表示的。定義的常數CLK_TCK指明每秒的時鐘滴答數。The fields indicating child times give the

accumulated times used by children that have terminated and have been reaped.(意為每個子域給出了我們可能需求的一個子時間項,這些子時間項是由已經終止,且被回收的子進程所累積)。

因此,times不能用來監視任何進行中的子進程所使用的時間。作為傳回值,返回的是從系統啟動開始已經經過的時鐘滴答總數。

3)ANSI C定義了一個clock函數來測量當前進程使用的總時間。要將clock函數報告的時間變成秒數,要除以定義常數CLOCKS_PER_SEC,這個常數不一定與CLK_TCK相同。

5、通過周期計數器來測量時間

CPU上有一個特殊的計時器,每個刻度加1。

本書9.3.1節講述了通過彙編代碼來擷取這個周期計數器的值的過程。可以得到在微觀尺度上很好的測量值。

同時講述了k次最優測量方法。

6、通過gettimeofday函數的測量

gettimeofday函數查詢系統時鐘(system clock)以確定當前的日期和時間。

範例程式碼

#include "time.h"struct timeval {long tv sec; /* Seconds */long tv usec; /* Microseconds */}int gettimeofday(struct timeval *tv, NULL);Returns: 0 for success, -1 for failure

在linux中,第二個參數設定成NULL,因為它指向一個未被實現的執行時區校正的特性。

範例程式碼

#include <stdlib.h>#include <stdio.h>#include <time.h>/* $begin tod */#include <sys/time.h>#include <unistd.h>static struct timeval tstart;/* Record current time */void start_timer(){    gettimeofday(&tstart, NULL);}/* Get number of seconds since last call to start_timer */double get_timer(){    struct timeval tfinish;    long sec, usec;    gettimeofday(&tfinish, NULL);    sec = tfinish.tv_sec - tstart.tv_sec;    usec = tfinish.tv_usec - tstart.tv_usec;    return sec + 1e-6*usec;}/* $end tod */

實現依賴於gettimeofday是如何?的,而gettimeofday的實現隨系統不同而不同。

7、更多關於測量的方法和技巧,參見9.4,9.5,9.6,9.7。

<Computer Systems:A Programmer's Perspective>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.