版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第10章時(shí)間管理內(nèi)容提要事件概述時(shí)間的度量睡眠定時(shí)器定時(shí)器文件10.1時(shí)間管理概述時(shí)間管理概述
時(shí)間管理作為操作系統(tǒng)的重要組成部分,無論對(duì)于內(nèi)核和應(yīng)用程序,均需利用時(shí)鐘提供各種形式的時(shí)間服務(wù),例如,超時(shí)、睡眠和定時(shí)器等。
為了滿足在不同應(yīng)環(huán)境下,應(yīng)用程序?qū)r(shí)間的要求,Linux系統(tǒng)為用戶提供了各種形式的時(shí)間服務(wù)。內(nèi)容包括:1.系統(tǒng)時(shí)間和進(jìn)程時(shí)間2.睡眠(延遲執(zhí)行)3.定時(shí)器應(yīng)用編程接口分類API功能描述時(shí)間系統(tǒng)時(shí)間time/stime獲取/設(shè)置系統(tǒng)時(shí)間gettimeofday/settimeofday獲取/設(shè)置系統(tǒng)時(shí)間和時(shí)區(qū)clock_getres獲取時(shí)鐘精度clock_gettime/clock_settime獲取/設(shè)置時(shí)鐘進(jìn)程時(shí)間times獲取進(jìn)程時(shí)間時(shí)間格式轉(zhuǎn)換localtime日歷型轉(zhuǎn)換為分解型strftime分解型轉(zhuǎn)換為可打印格式延遲/睡眠sleep低分辨率睡眠nanosleep/clock_nanosleep高分辨率睡眠alarm設(shè)置鬧鐘定時(shí)器定時(shí)器getitimer/setitimer獲得/設(shè)置定時(shí)器POSIX定時(shí)器timer_create創(chuàng)建POSIX定時(shí)器timer_gettime/timer_settime獲取/設(shè)置POSIX定時(shí)器timer_delete刪除POSIX定時(shí)器文件通知定時(shí)器timerfd_create創(chuàng)建定時(shí)器文件timerfd_gettime獲取定時(shí)器的當(dāng)前狀態(tài)timerfd_settime設(shè)置定時(shí)器10.2時(shí)間的度量系統(tǒng)時(shí)鐘1.硬件時(shí)鐘
硬件時(shí)鐘有時(shí)也稱為實(shí)時(shí)時(shí)鐘,依靠電池供電,它是軟件時(shí)鐘的基礎(chǔ)。2.軟件時(shí)鐘軟件時(shí)鐘提供一種周期性觸發(fā)中斷機(jī)制,用于度量流逝的時(shí)間。時(shí)鐘中斷的頻率通常為100HZ,每秒產(chǎn)生100次,每隔10毫秒1次。系統(tǒng)時(shí)鐘(續(xù))3.時(shí)鐘精度軟件時(shí)鐘可滿足一般應(yīng)用要求,高精度計(jì)時(shí)器自內(nèi)核2.6.21版引入,通常,精度至少可達(dá)微秒級(jí)。4.到期延遲計(jì)時(shí)器到期事件的處理通常會(huì)延遲一段時(shí)間,時(shí)間的長(zhǎng)短取決于時(shí)鐘精度等因素,高精度計(jì)時(shí)器能減少延遲,要達(dá)到完全準(zhǔn)確仍有一定的距離。系統(tǒng)時(shí)間和進(jìn)程時(shí)間1.系統(tǒng)時(shí)間自Epoch(1970-01-0100:00:00)至今所經(jīng)歷的時(shí)間稱為系統(tǒng)時(shí)間,單位為秒,顯示的時(shí)間與系統(tǒng)所在的時(shí)區(qū)有關(guān)。2.進(jìn)程時(shí)間進(jìn)程時(shí)間是指進(jìn)程運(yùn)行所消耗的時(shí)間,根據(jù)所在空間的不同,進(jìn)程時(shí)間可進(jìn)一步劃分為用戶時(shí)間和內(nèi)核時(shí)間。進(jìn)程在用戶態(tài)消耗的時(shí)間稱為用戶時(shí)間,在內(nèi)核態(tài)消耗的時(shí)間則稱為系統(tǒng)時(shí)間。獲取/設(shè)置系統(tǒng)時(shí)間
頭文件
#include<time.h>函數(shù)原型
time_t
time(time_t*tloc);
int
stime(const
time_t*tloc);功能 獲取/設(shè)置系統(tǒng)時(shí)間。參數(shù)
tloc:系統(tǒng)時(shí)間。返回值
time函數(shù)成功返回系統(tǒng)時(shí)間,失敗返回-1。
stime函數(shù)成功返回0,失敗返回-1。獲取/設(shè)置系統(tǒng)時(shí)間和市區(qū)頭文件
#include<sys/time.h>函數(shù)原型
int
gettimeofday(struct
timeval*tv,struct
timezone*tz);
int
settimeofday(const
struct
timeval*tv,conststruct
timezone*tz);功能 獲取/設(shè)置系統(tǒng)時(shí)間和時(shí)區(qū)。參數(shù)
tv:系統(tǒng)時(shí)間。
tz:時(shí)區(qū)。返回值 成功返回0,失敗返回-1。時(shí)間類型的轉(zhuǎn)換1.日歷日歷記錄自1970年1月1日零時(shí)至今的秒數(shù)。2.分解時(shí)間
分解時(shí)間類型是將時(shí)間拆分成若干細(xì)小部分,便于用戶提取,其格式如下所示。structtm{
int
tm_sec;//秒
int
tm_min;//分
int
tm_hour;//時(shí)
int
tm_mday;//日
int
tm_mon;//月
int
tm_year;//年
int
tm_wday;//星期幾,0表示星期天
int
tm_yday;//一年中的第幾天
int
tm_isdst;//夏令時(shí)標(biāo)識(shí),0為標(biāo)準(zhǔn)時(shí),大于0為夏令時(shí)};3.打印格式
時(shí)間的打印格式是指以NULL結(jié)尾的字符串,例如,"WedJun3021:49:081993"。時(shí)間類型頭文件
#include<time.h>函數(shù)原型
structtm*localtime(const
time_t*timep);
size_t
strftime(char*s,size_tmax,constchar*format,const
structtm*tm);功能 時(shí)間格式轉(zhuǎn)換。參數(shù)
timep:日歷時(shí)間。
s:可打印時(shí)間地址。
max:最大字節(jié)數(shù)。
format:時(shí)間格式。
tm:分解時(shí)間。返回值
localtime函數(shù)返回分解型時(shí)間。
strftime函數(shù)返回字符串長(zhǎng)度。時(shí)間類型的轉(zhuǎn)換頭文件
#include<time.h>函數(shù)原型
structtm*localtime(const
time_t*timep);
size_t
strftime(char*s,size_tmax,constchar*format,const
structtm*tm);功能 時(shí)間格式轉(zhuǎn)換。參數(shù)
timep:日歷時(shí)間。
s:可打印時(shí)間地址。
max:最大字節(jié)數(shù)。
format:時(shí)間格式。
tm:分解時(shí)間。返回值
localtime函數(shù)返回分解型時(shí)間。
10.3睡眠延遲執(zhí)行
進(jìn)程有時(shí)需要掛起一段時(shí)間后繼續(xù)運(yùn)行,為此,Linux提供了兩種面向不同精度的延遲,它們分別為低分辨率和高分辨率延遲。低精度延遲sleep函數(shù)頭文件
#include<unistd.h>函數(shù)原型
unsignedint
sleep(unsigned
intseconds);功能 睡眠一段時(shí)間。參數(shù)
seconds:睡眠時(shí)間(秒)。返回值 若被信號(hào)中斷,則返回剩余時(shí)間,否則返回0。高精度延遲nanosleep函數(shù)頭文件
#include<time.h>函數(shù)原型
int
nanosleep(const
struct
timespec*req,struct
timespec*rem);功能 睡眠一段時(shí)間。參數(shù)
req:請(qǐng)求睡眠時(shí)間。
rem:剩余時(shí)間。返回值 成功返回0,失敗返回-1。高精度延遲(續(xù))3.clock_nanosleep函數(shù)頭文件
#include<time.h>函數(shù)原型
int
clock_nanosleep(clockid_t
clock_id,int
flags,const
struct
timespec*request,struct
timespec*remain);功能 睡眠一段時(shí)間。參數(shù)
clock_id:時(shí)間度量方式。
flags:時(shí)間的參照坐標(biāo)。
request:請(qǐng)求睡眠時(shí)間。
remain:剩余時(shí)間。返回值 成功返回0,失敗返回-1。鬧鐘alarm函數(shù)頭文件
#include<unistd.h>函數(shù)原型
unsignedint
alarm(unsigned
intseconds);功能 設(shè)置鬧鐘。參數(shù)
seconds:到期時(shí)間。返回值10.4定時(shí)器內(nèi)容提要定時(shí)器概述傳統(tǒng)的定時(shí)器POSIX定時(shí)器定時(shí)器概述
定時(shí)器有時(shí)也稱為間隔定時(shí)器或間隔計(jì)時(shí)器,它是一種按固定時(shí)間間隔產(chǎn)生到期事件的計(jì)時(shí)方式,到期事件通常以信號(hào)的形式通知使用者。與alarm函數(shù)僅產(chǎn)生一次到期事件不同,定時(shí)器可連續(xù)產(chǎn)生到期事件。
Linux內(nèi)核提供了兩種定時(shí)器,一種是傳統(tǒng)Unix使用的定時(shí)器,另一種是POSIX定時(shí)器。時(shí)間度量的方式1.真實(shí)時(shí)間真實(shí)時(shí)間是指系統(tǒng)真正流失的時(shí)間,無論進(jìn)程處于何種狀態(tài),所有狀態(tài)的時(shí)間都計(jì)算在內(nèi)。2.虛擬時(shí)間虛擬時(shí)間是指進(jìn)程處于用戶態(tài)時(shí)間段之和。3.實(shí)用時(shí)間實(shí)用時(shí)間是指進(jìn)程占有CPU的時(shí)間段之和,即用戶時(shí)間與內(nèi)核時(shí)間之和。時(shí)間度量的方式t6用戶態(tài):執(zhí)行用戶指令+=真實(shí)時(shí)間內(nèi)核態(tài):執(zhí)行內(nèi)核指令+睡眠:等待被重新調(diào)度+=實(shí)用時(shí)間時(shí)間t1t4t7t2t5t8t3t9用戶態(tài)核心態(tài)休眠態(tài)傳統(tǒng)定時(shí)器getitimer/setitimer函數(shù)頭文件
#include<sys/time.h>函數(shù)原型
int
getitimer(intwhich,struct
itimerval*curr_value);
int
setitimer(intwhich,conststruct
itimerval*new_value,struct
itimerval*old_value);功能 獲取/設(shè)置定時(shí)器。參數(shù)
which:計(jì)時(shí)器類型。
curr_value:指向當(dāng)前間隔時(shí)間。
new_value:指向新間隔時(shí)間。
old_value:指向原間隔時(shí)間。返回值 成功返回0,否則返回?1。傳統(tǒng)定時(shí)器(續(xù))
struct
itimerval{
struct
timeval
it_interval; //間隔時(shí)間
struct
timeval
it_value; //首次到期時(shí)間,若為9,定時(shí)器禁止
};struct
timeval{longtv_sec; //秒
longtv_usec; //微妙};參數(shù)which含義ITIMER_REAL面向真實(shí)時(shí)間的定時(shí)器,若間隔時(shí)間到期,產(chǎn)生SIGALRM信號(hào)ITIMER_VIRTUAL面向虛擬時(shí)間的定時(shí)器,若間隔時(shí)間到期,產(chǎn)生SIGVTALRM信號(hào)ITIMER_PROF面向?qū)嵱脮r(shí)間的定時(shí)器,若間隔時(shí)間到期,產(chǎn)生SIGPRT信號(hào)POSIX定時(shí)器
由于傳統(tǒng)定時(shí)器僅支持標(biāo)準(zhǔn)信號(hào),每類定時(shí)器僅能在進(jìn)程中創(chuàng)建一個(gè),加之支持的精度較低,為此,POSIX定義了功能更強(qiáng)精度更高的定時(shí)器,可支持實(shí)時(shí)信號(hào),時(shí)間精度可達(dá)納秒級(jí)。創(chuàng)建/刪除POSIX定時(shí)器1.timer_create/timer_delete函數(shù)頭文件
#include<signal.h> #include<time.h>函數(shù)原型
int
timer_create(clockid_t
clockid,struct
sigevent*sevp,timer_t*timerid);
int
timer_delete(timer_t
timerid);功能 創(chuàng)建/刪除POSIX定時(shí)器。參數(shù)
clockid:定時(shí)器類型。
sevp:到期通知方式。
timerid:定時(shí)器ID。返回值 成功返回0,失敗返回-1。創(chuàng)建/刪除POSIX定時(shí)器(續(xù))struct
sigevent{
int
sigev_notify;//通知方式
int
sigev_signo;//通知信號(hào)
unionsigval
sigev_value;//傳遞的數(shù)據(jù)
void(*sigev_notify_function)(unionsigval);//線程運(yùn)行函數(shù)
void*sigev_notify_attributes;//通知線程屬性
pid_t
sigev_notify_thread_id;//線程ID};sigev_notify成員變量含義SIGEV_NONE不通知SIGEV_SIGNAL以信號(hào)方式通知SIGEV_THREAD創(chuàng)建線程實(shí)例獲取/設(shè)置POSIX定時(shí)器2.timer_gettime/timer_gettime函數(shù)頭文件
#include<time.h>函數(shù)原型
int
timer_gettime(timer_t
timerid,struct
itimerspec*curr_value);
int
timer_settime(timer_t
timerid,int
flags,const
struct
itimerspec*new_value,struct
itimerspec*old_value);功能 獲取/設(shè)置POSIX定時(shí)器。參數(shù)
timerid:POSIX定時(shí)器ID。
curr_value:指向當(dāng)前間隔時(shí)間。
flags:首次到期時(shí)間的參照坐標(biāo)。
new_value:指向新間隔時(shí)間。
old_value:指向原間隔時(shí)間。返回值 成功返回0,失敗返回-1。struct
itimerspec{
struct
timespec
it_interval;//間隔時(shí)間
struct
timespec
it_value;//首次到期時(shí)間};10.5定時(shí)期文件定時(shí)器文件概述
Linux將定時(shí)器產(chǎn)生的間隔到期事件看做字節(jié)流,將定時(shí)器抽象為文件。Linux自內(nèi)核2.6起引入定時(shí)器文件。
創(chuàng)建定時(shí)器文件1.timerfd_create函數(shù)頭文件
#include<sys/timerfd.h>函數(shù)原型
int
timerfd_create(int
clockid,intflags);功能 創(chuàng)建定時(shí)器文件。參數(shù)
clockid:定時(shí)器類型。
flags:操作方式。返回值 成功返回文件描述符,失敗返回-1。實(shí)例分析int
main(int
argc,char*ar
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 勤儉節(jié)約為主題的國(guó)旗下講話稿范文(12篇)
- 辦公之技術(shù)宇宙提升工作效率的探索
- 辦公環(huán)境中的學(xué)生團(tuán)隊(duì)建設(shè)與協(xié)作
- 公共建筑綠色照明設(shè)計(jì)與實(shí)踐案例分享
- 農(nóng)房功能化打造現(xiàn)代舒適的農(nóng)村住宅
- 信息工程學(xué)院師資隊(duì)伍的信息安全與數(shù)據(jù)科學(xué)教育
- 辦公室中兒童教育綜合評(píng)價(jià)的實(shí)踐與思考
- 從辦公室到星際探索站的跨越
- 2025醫(yī)生、護(hù)士、技師等醫(yī)院醫(yī)務(wù)人員聘用合同
- Triz物場(chǎng)分析與辦公環(huán)境的舒適度提升
- 2024屆紅河哈尼族彝族自治州綠春縣小升初語文檢測(cè)卷含答案
- GB/T 43700-2024滑雪場(chǎng)所的運(yùn)行和管理規(guī)范
- 《3-6歲兒童學(xué)習(xí)與發(fā)展指南》知識(shí)競(jìng)賽參考題庫500題(含答案)
- 水電站廠房設(shè)計(jì)-畢業(yè)設(shè)計(jì)
- 幼兒園園長(zhǎng)的園里園外融合教育
- 綜合金融服務(wù)方案課件
- 《鎮(zhèn)原民俗》課件
- 新型電力系統(tǒng)簡(jiǎn)介
- 施工安全管理體系及安全保證措施樣本
- 護(hù)理科普工作總結(jié)以及計(jì)劃
- 葡萄糖耐量試驗(yàn)課件
評(píng)論
0/150
提交評(píng)論