2017 Operating Systems 作業系統實習 助教:陳主恩、林欣穎 實驗室:720A Lab7
目錄 Contents thread 介紹 Beaglebone thread 範例 Beaglebone 實作 Beaglebone
1-1 thread 介紹 執行緒 (thread) Program 放在二次儲存裝置中,尚沒有被Load到記憶體的一堆Code稱之為「程式」。 Process 已經被Load到記憶體中,任何一行Code隨時會被CPU執行,且其宣告的在記憶體的變數的值會隨著需求而不斷變動。稱之為「程序」。 一個多工作業系統(Multitasking Operating System)可以同時運行多個Process,然而一個CPU一次只能做一件事情,但CPU的數量永遠少於運行中的Process數,因此每個Process使用的時間需要被排程(Scheduling)。 Thread 作業系統能夠進行運算排程的最小單位,被包含在處理序(Process)中,在進代作業系統中,被設計為Process中的實際運作單位。而Thread又由下面兩項組成,Stack(紀錄函數的呼叫路徑,以及這些函數所用到的區域變數)以及目前CPU的狀態。
1-2 thread 介紹 執行緒 (thread) Thread的重點如下: 一個Process可以有多個Thread。 同一個Process內的Thread使用相同的Memory Space,但這些Thread各自擁有其Stack。換句話說,Thread能透過reference存取到相同的object,但是local variable卻是各自獨立的。 現代的作業系統會根據Process的優先權,分別讓各個Process佔據CPU一段時間,以讓各個Process都有機會執行;而Process又會根據Thread的優先權以及已經用掉的CPU時間,在不同的Thread作切換,以讓各個Thread都有機會執行。
thread 範例 補充: http://www.lcis.com.tw/paper_store/paper_store/eCOS%20-%20thread%20and%20sychronous-2014712235755648.pdf 2-1 thread API pthread_create (新增一個 Thread) 標頭檔: 說明: #include <pthread.h> thread:用來儲存 Thread 的代碼,傳入(pthread_t*)的型態 函式宣告: int pthread_create ( pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *), void * arg ); attr:用來描述 Thread 特性的變數,傳入(pthread_attr_t*)的型態,NULL 代表預設性質 start_routine:函式指標,指向不定回傳值,不定輸入參數的 Function 傳回值: arg:傳入 start_routine 的參入,型態為(void*) 傳回 0 代表成功新增,非 0 代表失敗
2-1 thread 範例 thread API pthread_join (等待 Thread 執行終止) pthread_exit (結束thread) 標頭檔: #include <pthread.h> 標頭檔: 函式宣告: #include <pthread.h> int pthread_join ( pthread_t th, void ** thread_return ); 函式宣告: int pthread_exit ( void * retval ); 說明: th:Thread 的代碼,傳入(pthread_t)的型態,辨別欲等待的 Thread 說明: retval:指向傳回值 thread_return:指標的指標因為 Thread 的 Return Type 是(viod*) 傳回值: 傳回 0 代表成功,非 0 代表失敗 傳回值: 傳回 0 代表成功,非 0 代表失敗
thread 範例 2-2 thread 程式碼 gcc thread1.c –lpthread –o thread1
實作 將附件程式碼空白處填上正確的程式碼,並執行結果。
實作 補充資料: http://blog.xuite.net/tzeng015/twblog/113272158-Linux%E7%B3%BB%E7%B5%B1%E4%B8%8B%E7%9A%84%E5%A4%9A%E7%B7%9A%E7%A8%8B%E7%B7%A8%E7%A8%8B%E5%85%A5%E9%96%80 多執行緒: http://sp1.wikidot.com/pthread http://zzzaaa12.pixnet.net/blog/post/31958665-%5Bnote%5D-c-thread-programming-in-linux http://jashliao.pixnet.net/blog/post/191802441-linux-c-thread-03.%E9%87%8D%E9%BB%9E%E5%9C%A8%E6%96%BC%E5%88%A9%E7%94%A8%E5%85%A8%E5%9F%9F%E8%AE%8A%E6%95%B8%E9%81%94%E5%88%B0thread
Thanks 作業系統實習 Operating Systems