Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

BÖLÜM 5 THREADS. İçerik Giriş Multithreading User/Kernel Thread Windows Threads Linux Threads.

Benzer bir sunumlar


... konulu sunumlar: "BÖLÜM 5 THREADS. İçerik Giriş Multithreading User/Kernel Thread Windows Threads Linux Threads."— Sunum transkripti:

1 BÖLÜM 5 THREADS

2 İçerik Giriş Multithreading User/Kernel Thread Windows Threads Linux Threads

3 Giriş Eğer bir proses birden çok thread e sahip ise belirli bir zamanda birden çok görevi yürütebilir. Her thread aynı prosese ait diğer threadler ile prosesin kod kısmını data kısmını ve diğer işletim sistemi kaynaklarını (açık dosyalar, signals) paylaşır. Bir proses tekil bir thread kontrolü ile işletilen bir programdır.(heavyweight proses ) Thread = light weight process – thread ID – bir program counter – bir register seti – ve yığın içerir.

4 Single & MultiThreaded Process

5 Faydaları Cevap verebilirlik: Örneğin bir web browserda bir imaj yüklenirken başka bir tred kullanıcının başka işlemleri aynı anda yapmasına izin verir. Kaynak Paylaşımı: Varsayılan olarak, tredler ait oldukları prosesin kaynaklarının ve belleğini paylaşır. Ekonomi: Proses yaratmak tred yaratmaya göre daha maliyetli bir iştir. Proses yaratmak, tred yaratmaktan daha uzun sürer. Tred yaratmak ve aralarında geçiş yapmak daha az maliyetlidir. Çok işlemci Yapılarının Verimliliği: Bir çok işlemci mimarisinde, multitred yapıların faydaları kat kat artırılabilir.

6 MultiCore Programming On a system with a single computing core, concurrency merely means that the execution of the threads will be interleaved over time, because the processing core is capable of executing only one thread at a time. On a system with multiple cores, however, concurrency means that the threads can run in parallel, because the system can assign a separate thread to each core

7 MultiCore Programming

8 Kullanıcı Tredleri Tred yönetimi, kullanıcı seviyesinde bir tred kütüphanesi tarafından gerçekleştirilir. Çekirdek, kullanıcı tredlerinin farkında değildir. Yaratılması ve yönetilmesi hızlıdır. 3 Temel tred kütüphanesi – POSIX Pthreads – Win32 threads – Java threads

9 Çekirdek Tredleri İşletim sistemi tarafından desteklenirler. Thread’ler üzerindeki tüm işlemler kernel’da gerçekleşir. Örnek: – Windows – Solaris – Linux – UNIX – Mac OS X

10 Kullanıcı ve Çekirdek Tredleri

11 Thread States 5 durumda bulunabilirler: – init: The thread is being created – ready: The thread is waiting to be assigned to a CPU – running: The thread’s instructions are being executed – waiting: The thread is waiting for some event to occur – terminated: The thread has finished execution init ready waiting running terminated scheduler dispatch waiting for I/O or event I/O or event completion interrupt quantum expired admittedexit

12 Proses Verisi Her proses, – Sanal adres alanı (program kodu, global değişkenler, tred yığınları içerir) – Prosesler birbirlerinin adres alanına yanlışlıkla da olsa erişemezler. – Working Set – Access Token – Kernel nesneleri için Handle Table gibi veriler içerir.

13 Struct Proc 2050 enum procstate { UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE }; 2051 2052 // Per−process state 2053 struct proc { 2054 uint sz; // Size of process memory (bytes) 2055 pde_t* pgdir; // Page table 2056 char *kstack; // Bottom of kernel stack for this process 2057 enum procstate state; // Process state 2058 volatile int pid; // Process ID 2059 struct proc *parent; // Parent process 2060 struct trapframe *tf; // Trap frame for current syscall 2061 struct context *context; // swtch() here to run process 2062void *chan; // If non−zero, sleeping on chan 2063 int killed; // If non−zero, have been killed 2064 struct file *ofile[NOFILE]; // Open files 2065 struct inode *cwd; // Current directory 2066 char name[16]; // Process name (debugging) 2067 }; 2068 2069 // Process memory is laid out contiguously, low addresses first: 2070 // text 2071 // original data and bss 2072 // fixed−size stack 2073 // expandable heap

14 Tred Verisi Her tred, – User-mod stack (trede aktarılmış parametreler, çağrılan frameler vs.) – Kernel-mod stack (sistem çağrıları için) – Tred Local Storage (TLS) verisinin yerleşimini gösteren işaretçi dizisi – State (wait, ready, running vs.) ve öncelik – Donanım içeriği (Program counter, stack pointer, register değerleri, güncel erişim modu(user ya da kernel mod))

15 Kernel tred/user tred Bir prosesin kernel state’inin en önemli kısımları: – Page table’ı ve işaret ettiği fiziksel bellek – Kernel stack’i – ve run state’i Thread bir işletim gerçekleştirir, durdurulabilir ve sonlandırılabilir. Proses bir sistem çağrısı yaptığında: – CPU, prosesi işletmekten prosese ait kernel thread’i işletmeye anahtarlar. Prosese ait kernel thread, sistem çağrısı uygulamasını (örn: read file) işletir ve sonra prosese geri döner. Kernel thread state’i (yerel parametreler), kernel thread stack’inde depolanır. Her prosesin kernel stack’i, user stack’ten ayrıdır. Bu şekilde bir proses iki thread işletimine sahiptir: user thread ve kernel thread.

16 Process-Related Performance Counters Object: CounterFunction Process:%PrivilegedTimePercentage of time that the threads in the process have run in kernel Process:%ProcessorTimePercentage of CPU time that threads have used during specified interval Process:%UserTimePercentage of time that the threads in the process have run in user m. Process: ElapsedTimeTotal lifetime of process in seconds Process: ID ProcessPID – process IDs Process: ThreadCountNumber of threads in a process

17 Thread-Related Performance Counters Object: CounterFunction Process: Priority BaseBase priority of process: starting priority for thread within process Thread:%PrivilegedTimePercentage of time that the thread was run in kernel mode Thread:%ProcessorTimePercentage of CPU time that the threads has used during specified interval Thread:%UserTimePercentage of time that the thread has run in user mode Thread: ElapsedTimeTotal lifetime of process in seconds Thread: ID ProcessPID – process IDs Thread: ID ThreadThread ID

18 Thread-Related Performance Counters (contd.) Object: CounterFunction Thread: Priority BaseBase priority of thread: may differ from the thread‘s starting priority Thread: Priority CurrentThe thread‘s current dynamic priority Thread: Start AddressThe thread‘s starting virtual address (the same for most threads) Thread: Thread StateValue from 0 through 7 – current state of thread Thread: Thread Wait ReasonValue from 0 through 19 – reason why the thread is in wait state

19 Multithreading Modelleri Many-to-One One-to-One Many-to-Many

20 Many-to-One Bir çok kullanıcı tredini tek bir kernel tredine map eder. Tred yönetimi kullanıcı alanında yapılır. Kullanıcı-seviyeli tred kütüphaneleri, kernel tredlerini desteklemeyen many-to-one modelini kullanan işletim sistemi üzerinde gerçekleştirilirler.

21 Many-to-One

22 One-to-One Her kullanıcı tredini bir kernel tredine map eder. Many-to-one modeline göre daha fazla eş zamanlılık sağlar. Birden çok tredin çoklu işlemciler üzerinde çalışabilmesine olanak tanır. Bu modelde, bir kullanıcı tredi yaratmak, uygun kernel tredin yaratılması ile gerçekleşir.

23 One-to-One

24 Many-to-Many Birden çok kullanıcı tredini eşit sayıda ya da daha az sayıda kernel tredine çoklar. Uygulama geliştiriciye istediği kadar tred yaratma şansı verir. Eş zamanlılık doğru olarak uygulanmış olmaz. Çünkü kernel belirli bir zamanda yalnızca bir tredi düzenleyebilir. – One-to-one model daha iyi bir eş zamanlılık sağlarken, kullanıcı bir uygulamada çok fazla sayıda tred yaratmamalıdır. – Many-to-many modeli ise tüm bu kısıtlamalardan kurtulmuştur. Uygulama geliştiriciler istedikleri kadar kullanıcı prosesi yaratabilirler. Aynı zamanda ne zaman bir tred blok sistem çağrısı gerçekleştirirse, kernel işletim için başka bir tred düzenleyebilir

25 Many-to-Many

26 Thread Libraries thread library: programcıya thread leri yaratma ve yönetmek için bir API sağlar. Bir thread kütüphanesi uygulamanın iki temel yolu vardır. 1) Hiç kernel desteği olmadan kütüphaneyi tümüyle user alanda sağlamak. – Kütüphane için tüm veri yapıları ve kod kullanıcı alanındadır. – Bu şu demek: kütüphane içindeki bir fonksiyonu çağırmak local bir fonksiyon çağrısı ile sonuçlanır, bir sistem çağrısı ile değil. 2) Direk işletim sistemi tarafından desteklenen bir kernel-level library uygulamaktır. – Bu durumda kod ve veri yapıları kernel alanda yer alır. Kütüphane için API deki bir fonksiyonu çağırmak kernel daki bir sistem çağrısı ile sonuçlanır.

27 Thread Libraries Main thread libraries: – POSIX Pthreads – Windows – Java Pthreads: Hem user hem de kernel level library gibi desteklenebilir. Windows thread library: bir kernel-level library dir. Java thread API: thread lerin direk olarak java programları içinden yaratılıp yönetilmesine izin verir. Windows sistemlerde Java thread ler Windows API kullanılarak uygulanır; UNIX ve Linux sistemlerde genelde Pthread leri kullanır.

28 Create MultiThreads Birden çok thread yaratmak için genel stratejiler: Asynchronous threading: parent bir child yarattığında işlemine devam edebilir, eş zamanlı çalışabilirler. Thread ler bağımsız olduklarından paylaşılan veri azdır. Synchronous threading: parent thread bir yada daha çok child yaratır, devam etmek için bütün child thread lerin sonlanmasını bekler. fork-join strategy diye adlandırılır. – Her child thread eş zamanlı olarak çalışabilir, ancak parent bunların sonlanmasını bekler. Her child kendi işini bitirdiğinde terminate olur ve parent thread’e joinlenir. Parent yalnızca tüm child lar joinlendiğinde sonlanabilir.

29 multithreaded program that calculates the summation of a nonnegative integer in a separate thread

30 Windows Threads

31 Java Threads Java thread leri JWM yi destekleyen herhangi bir sistemde Windows, Linux, and Mac OS X gibi çalışabilir. Java thread API: Android uygulamalar için de mevcuttur. Bir java programda thread yaratmak için iki teknik mevcuttur 1) Thread sınıfından türemiş yeni bir sınıf yarat ve onun run() metodunun üzerine yaz. 2) daha sık kullanılan yöntem: Runnable interface’i uygulayan bir sınıf tanımlamak

32

33 Implicit Threading Multi thread organizasyonun neden olduğu zorlukların üstesinden gelmenin multithread uygulamaları daha iyi desteklemenin bir yolu: thread yaratma ve yönetmeyi uygulama programcılarından alıp compiler lara ve run-time library’lere transfer etmektir. Bu strateji implicit threading, olarak bilinir ve günümüzde popüler olan multithread yaklaşımıdır. Implicit threading için 3 yaklaşım: – Thread pools – OpenMP – Grand Central Dispatch

34 Thread Pools Unlimited thread ler CPU zamanı ve bellek gibi sistem kaynaklarını tüketebilirler. Bu problem için bir çözüm thread pool kullanmaktır. Process startup sırasında belirli sayıda thread yaratılır ve bir pool a yerleştirilir. Bu havuda fork edilmeyi beklerler. Ne zaman ki server bir request cevapladı, bu havuzdan bir thread uyandırır- eğer biri uygun ise- ve thread’i request’i servis etmek üzere pas eder. Thread kendi servisini tamamladığında, havuza döner ve diğer işler için bekler. Eğer havuz da hiç uygun thread yok ise, server bir tanesi uygun hale gelene kadar bekler.

35 Win- Threads Win32 API si microsoft işletim sistemleri için birincil API dir. Bir windows uygulaması her prosesin bir yada daha çok tred içerebileceği birbirinden ayrı prosesleri işletir. Windows one-to-one mimarisini kullanır. Her kullanıcı seviyeli tred uygun bir kernel tredine map edilir. Bundan başka windos bir fiber kütüphanesi de sunar. Bu kütüphane many- to-many fonksiyonu sağlar. Bir prosese ait her tred, prosesin sanal adres alanına erişebilir. Tredin genel bileşenleri: – Tred’i belirten tekil bir tred ID – İşlemcinin durumunu belirtir bir register set – Tred kullanıcı modunda çalışırken kullanılan bir kullanıcı yığını. Benzer olarak her tred aynı zamanda bir kernel yığınına sahiptir. Ve bu yığın tred kernel modunda çalışırken kullanılır. – Bir çok run time kütüphane ile kullanılan özel bir depolama alanı ve dinamik link kütüphaneleri (DLL)

36 Processes & Threads Internal Data Structures Process Object Handle Table VAD object Virtual Address Space Descriptors Access Token Thread... Access Token

37 Kernel: Thread Priority Levels 16 “real-time” levels 15 variable levels Used by zero page thread Used by idle thread(s) 31 16 0 i 15 1

38 Windows Kernel Priorities

39 Windows Process and Thread Internals Her process/thread için Data Structures: Executive process block (EPROCESS) Executive thread block (ETHREAD) TEB (Thread environment block)

40 executive thread block ETHREAD ( executive thread block ) Create and Exit Time Process ID Thread Start Address Impersonation Information LPC Message Information EPROCESS Access Token KTHREAD Timer Information Pending I/O Requests Total User Time Total Kernel Time Thread Scheduling Information Synchronization Information Timer Block and Wait Blocks List of Objects Being Waiting On System Service Table TEB (Enviroment Block) KTHREAD (Kernel Thread Block) Thread Local Storage Kernel Stack Information Dispatcher Header Trap Frame Thread Block

41 Thread Block (!thread) THREAD 83160f60 Cid 9f.3d Teb: 7ffdc000 Win32Thread: e153d2c8 WAIT: (WrUserRequest) UserMode Non-Alertable 808e9d60 SynchronizationEvent Not impersonating Owning Process 81b44880 WaitTime (seconds) 953945 Context Switch Count 2697 LargeStack UserTime 0:00:00.0289 KernelTime 0:00:04.0664 Start Address kernel32!BaseProcessStart (0x77e8f268) Win32 Start Address 0x020d9d98 Stack Init f7818000 Current f7817bb0 Base f7818000 Limit f7812000 Call 0 Priority 14 BasePriority 8 PriorityDecrement 6 DecrementCount 13 Kernel stack not resident. ChildEBP RetAddr Args to Child f7817bb0 8008f430 00000001 00000000 00000000 ntoskrnl!KiSwapThreadExit f7817c50 de0119ec 00000001 00000000 00000000 ntoskrnl!KeWaitForSingleObject+0x2a0 f7817cc0 de0123f4 00000001 00000000 00000000 win32k!xxxSleepThread+0x23c f7817d10 de01f2f0 00000001 00000000 00000000 win32k!xxxInternalGetMessage+0x504 f7817d80 800bab58 00000001 00000000 00000000 win32k!NtUserGetMessage+0x58 f7817df0 77d887d0 00000001 00000000 00000000 ntoskrnl!KiSystemServiceEndAddress+0x4 0012fef0 00000000 00000001 00000000 00000000 user32!GetMessageW+0x30 Address of ETHREAD Thread ID Address of thread environment block Objects being waited on Thread state Address of system service dispatch table Priority Information Actual thread start address Stack trace Address of user thread function Process ID

42 Thread lifetime Tred işletim sistemine dönene kadar ExitThread tred tarafından çağrılana kadar TerminateThread tred de işletilene kadar ExitProcess çağrısı yapılana kadar

43 Linux Threads Proses yaratmak  fork() Tred yaratmak  clone sistem çağrısı Clone, fork() fonksiyonu gibi iş yapmaktadır, yalnızca prosesin kopyasını yaratmak yerine, ilgili prosesin adres alanını kullanan ayrı bir proses yaratır. Sistemdeki her proses için tekil bir kernel veri yapısı (struct task_struct) mevcuttur. Bu veri yapısı task için veri depolamak yerine diğer veri yapılarına pointer içerir (örn open file list data structure, virtual memory data structure gibi) Fork() çağrıldığında, parent prosesin tüm veri yapılarının bir kopyası ile yeni bir task yaratılır Linux tredler ve prosesler arasında ayrım yapmaz. Clone() çağrısı ile parent ve child arasında paylaşılan veri yapıları aşağıdaki parametrelerin geçirilmesi ile sağlanır.


"BÖLÜM 5 THREADS. İçerik Giriş Multithreading User/Kernel Thread Windows Threads Linux Threads." indir ppt

Benzer bir sunumlar


Google Reklamları