Download presentation
Presentation is loading. Please wait.
1
2017 Operating Systems 作業系統實習 助教:陳主恩、林欣穎 實驗室:720A Lab7
2
目錄 Contents thread 介紹 Beaglebone thread 範例 Beaglebone 實作 Beaglebone
3
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的狀態。
4
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都有機會執行。
5
thread 範例 補充: 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 代表失敗
6
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 代表失敗
7
thread 範例 2-2 thread 程式碼 gcc thread1.c –lpthread –o thread1
8
實作 將附件程式碼空白處填上正確的程式碼,並執行結果。
9
實作 補充資料: 多執行緒:
10
Thanks 作業系統實習 Operating Systems
Similar presentations