操作系統(tǒng)第一次實驗報告_第1頁
操作系統(tǒng)第一次實驗報告_第2頁
操作系統(tǒng)第一次實驗報告_第3頁
操作系統(tǒng)第一次實驗報告_第4頁
免費預覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、本文格式為word版,下載可任意編輯操作系統(tǒng)第一次實驗報告 操作 系統(tǒng) 試驗報告 試驗名稱: 線程 掌握試驗 計算機科學與技術學院 名目 一、試驗目的和要求 2 二、試驗內(nèi)容 2 三、試驗步驟 2 四、試驗結(jié)果與分析 3 1單線程 3 2單線程(睡眠 4s) 3 3多線程 4 4多線程(每個子線程睡眠 1s) 4 5單線程與多線程對比 5 五、程序源代碼 5 1單線程試驗代碼 5 2單線程試驗代碼 6 六、試驗體會 7 一、試驗目的和要求 通過本試驗把握在 linux 操作系統(tǒng)中遵循 posix線程標準接口進行多線程程序編程,嫻熟把握線程的創(chuàng)建 pthread_create(),線程的終止 p

2、thread_exit(),等待線程合并 pthread_join()等線程掌握操作,利用信號量或者互斥鎖實現(xiàn)線程建的同步。 二、試驗內(nèi)容 問題:求 1000000 個浮點數(shù)(精確到小數(shù)點后 4 位)的平均值(和,最大值,最小值),詳細的問題描述流程圖如下圖圖 1 所示: 三 、 試驗 步驟 1、隨機生成 1000000個浮點數(shù); 2、創(chuàng)建 4個子線程,分別求 250000個浮點數(shù)之和; 3、完成 1000000 個浮點數(shù)之和并打印結(jié)果; 4、統(tǒng)計多線程并發(fā)執(zhí)行完成計算的時間; 5、寫一個單線程程序,同樣完成 1000000 個隨機數(shù)求和的計算,統(tǒng)計計算時間,并和前面結(jié)果進行對比; 6、讓單線

3、程程序睡眠四秒鐘、多線程程序各子程序睡一秒的條件下(兩個程序總的睡眠時間相同),對比執(zhí)行結(jié)果; 7、分析兩次對比結(jié)果的差異,寫出自己的見解。 四、試驗結(jié)果與分析 1、單線程完成 1000000 個浮點數(shù)的求和運算所用的時間狀況如下圖圖 2 所示: 圖 圖 2 單線程計算 時間 分析:試驗中每次隨機產(chǎn)生一個 0 到 1 之間的浮點數(shù),1000000 個這樣的數(shù)相加的話的平總和也許就在 500000 左右(根據(jù)隨機數(shù)的平均值原理),試驗中 sum=,明顯結(jié)果正確,整個計算運行時間為。 2、單線程完成 1000000 個浮點數(shù)的求和運算,單線程中睡眠 4 秒鐘,所用的時間狀況如下圖圖3 所示: 圖

4、圖 3 單線程計算 時間( 睡眠 4 秒) 分析:依據(jù)上一次單線程的執(zhí)行狀況來看,這一次讓單線程睡眠 4 秒鐘,最終執(zhí)行時間剛好就是4 秒加上計算時間。也就是說計算 1000000 個浮點數(shù)的總和平均時間約為。 3、四個子線程共同完成 1000000 個浮點數(shù)的求和計算所用時間狀況如下圖圖 4所示: 圖 圖 4 多線程計算時間 分析:由于這次是 4 個子線程并發(fā)運行,每個子線程只需計算 250000個浮點數(shù)的總和,抱負狀況下這時候的運行時間應當是這單線程中計算時間的四分之一。從圖中可以看到執(zhí)行時間是,很明顯這個時間約為單線程求 1000000 個浮點數(shù)之和的時間()的四分之一,符合預期的結(jié)果。

5、 4、四個子線程共同完成 1000000 個浮點數(shù)的求和計算,其中每個子線程睡眠 1 秒鐘,最終所用時間狀況如下圖圖 5所示: 圖 圖 5 多線程計算時間( 每個 子線程眠 睡眠 1 秒) 分析:這里四個子線程每個子線程睡眠一秒,但由于四個子線程并發(fā)同步的在執(zhí)行,當一個子線程在睡眠時,另外一個子線程卻仍舊在連續(xù)求和計算,因此他們一起合作同步完成1000000個浮點數(shù)的計算所需的時間就是 1 秒加上上圖中不睡眠的時候的計算時間。從圖中可以 看到1s+,所以最終的結(jié)果符合預期值。 5、單線程計算時間(睡眠 4s)與多線程計算時間(每個子線程睡眠 1s)對比效果如下圖圖 6 所示: 圖 圖 6 單線

6、程 ( 睡眠 4s)與 與 多線程 ( 每個眠 子線程睡眠 1s) 計算時間 對比圖 五、程序源代碼 /* *filename: *author: *date:2021/11/22 */ #include #include #include #include #include sys/ #define loop 1000000 float sum=0; void *add() int i; srand(time(null); for(i=0;iloop;i+) sum += (float)(rand()/(float)rand_max); sleep(4); int main() pthrea

7、d_t p; int result; float time; struct timeval start; struct timeval end; gettimeofday(start,null); result=pthread_create(p,null,add,null); if(result!=0) printf(create thread of add failuren); exit(-1); pthread_join(p,null); gettimeofday(end,null); time = (float) - *1000000+(float) - )/1000000; print

8、f(signal_thread_sum:%.4fn,sum); printf(signal_thread_execution_time:%.4fs(sleep 4 sec)n,time); return 0; /* *filename: *author:wangtao *date:2021/11/22 */ #include #include #include #include #include sys/ #define loop 25000 pthread_mutex_t mutex; float sum=0; void add(int * k) int i; srand(time(null

9、); for(i=0;iloop;i+) pthread_mutex_lock(mutex); sum += (float)(float)rand()/rand_max); pthread_mutex_unlock(mutex); printf(pthread%d:%.4fn,*k,sum); sleep(1); int main(void) pthread_t p1,p2,p3,p4; int result1,result2,result3,result4; int k1=1,k2=2,k3=3,k4=4; struct timeval start; struct timeval end;

10、float time; gettimeofday(start,null); pthread_mutex_init(mutex,null); result1=pthread_create(p1,null,(void*)add,k1); result2=pthread_create(p2,null,(void*)add,k2); result3=pthread_create(p3,null,(void*)add,k3); result4=pthread_create(p4,null,(void*)add,k4); if(result1!=0|result2!=0|result3!=0|result

11、4!=0) printf(create child thread failure!n); exit(1); pthread_join(p1,null); pthread_join(p2,null); pthread_join(p3,null); pthread_join(p4,null); gettimeofday(end,null); time = (float) - *1000000 + (float) - )/1000000; printf(sum = %.4fn,sum); printf(multi_thread_time = %.4fs(each child thread sleep

12、 1 sec)n,time); return 0; 六、試驗體會 這是第一次使用多線程編程編寫代碼,第一次直觀感受到這種多線程編程對程序的執(zhí)行速率的影響。雖然說操作系統(tǒng)課程已經(jīng)上了好幾個星期了,課堂上始終在學習多線程編程的算法思想,但是那只是書面上的講授,真正直觀的感受和體會還是得依靠試驗來了解。 由于之前就接觸過 linux 系統(tǒng),所以對于程序的編譯執(zhí)行方面還是問題不大,最主要的就是代碼的編寫問題。一開頭到試驗室完全不知道要做什么,由于根本連試驗內(nèi)容都不知道,直到助教在大屏幕上顯示這個試驗題目,我才開頭了解試驗的題目和要求。這里我就是想建議一下老師您可以應當給我們試驗題目,讓我們在試驗前就了解一下試驗內(nèi)容,不然到了試驗室都不知道究竟要干嘛。讀懂了解題意之后,我就開頭參考所給的一些線程創(chuàng)建函數(shù)說明來編寫多線程同步完成1000000個浮點數(shù)的求和運算。由于對

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論