14
Thread 와 Thread 와와와 Thread 와 Thread Scheduling Thread Synchronization( 와와와 )

Thread 와 Thread 동기화

  • Upload
    glenys

  • View
    93

  • Download
    0

Embed Size (px)

DESCRIPTION

Thread 와 Thread 동기화. Thread 와 Thread Scheduling Thread Synchronization( 동기화 ). 목 차. 지난 시간 리뷰. 문제들. 핸들 참조를 할 때 인덱스를 3 개로 나눈 이유는 무엇인가 ? 메모리를 효율적으로 사용하기 위함 . SEH 를 최초로 인지하는 존재는 누구인가 ? 0 으로 나누거나 Access 금지된 메모리 영역을 Access 하려고 하면 소프트웨어 인터럽트 (CPU 가 연산도중 발생시키는 인터럽트 ) 가 발생함 . - PowerPoint PPT Presentation

Citation preview

Page 1: Thread 와  Thread 동기화

Thread 와 Thread 동기화

Thread 와 Thread SchedulingThread Synchronization( 동기화 )

Page 2: Thread 와  Thread 동기화

목차Process와

Thread 리뷰•Process와 Thread 개념도•남은 문제들

Thread Scheduling•Thread 상태•우선순위 알고리즘•Process와 Thread 우선순위의 관계•Preemptive Scheduling

Thread Synchronization•필요성•Critical Section•Mutex•Semaphore•Event

Page 3: Thread 와  Thread 동기화

지난 시간 리뷰

Page 4: Thread 와  Thread 동기화

문제들• 핸들 참조를 할 때 인덱스를 3 개로 나눈 이유는

무엇인가 ?– 메모리를 효율적으로 사용하기 위함 .

• SEH 를 최초로 인지하는 존재는 누구인가 ?– 0 으로 나누거나 Access 금지된 메모리 영역을 Ac-

cess 하려고 하면 소프트웨어 인터럽트 (CPU 가 연산도중 발생시키는 인터럽트 ) 가 발생함 .

• 핸들 카운트가 증가하고 감소하는 것을 확인해 봤는가 ?– 내 문서 /VS2008/Proj/CH5/DuplicateHandle

Page 5: Thread 와  Thread 동기화

Thread 의 상태

Page 6: Thread 와  Thread 동기화

우선순위 알고리즘

• 각각의 Thread 에 특정한 범위의 우선순위 값이 주어지고 , 스케줄러 루틴은 실행 대기중인 Thread 중에서 우선순위 값이 가장 높은 Thread 를 선택하여 실행– 내문서 /VS2008/Proj/CH6/TwoThreadPriority

(With WinDbg)

KiReadySummary

Page 7: Thread 와  Thread 동기화

Process 와 Thread 의 우선순위 관계

• Thread 의 우선순위 값은 그 Thread 를 포함하고 있는 프로세스의 우선순위에 기반하여 상대적으로 결정됨 .

• Thread 의 우선순위는 런타임 우선순위값과 베이스 우선순위의 두 가지 우선순위 값으로 구성되어짐 .– 베이스 우선순위 값 : 유저레벨의 사용자가 API 를

사용하여 결정하는 우선순위 .– 런타임 우선순위 값 : 베이스 우선순위 값에 기준하여 더

높은 값으로 시스템에 의해 임시로 바뀌어지는 우선순위 .

내문서 /VS2008/Proj/CH6/ThreadPriorityTester

Page 8: Thread 와  Thread 동기화

Preemptive Scheduling

• 어떤 Thread 가 CPU 를 사용하고 있는 동안 다른 Thread 에 의해 CPU 사용을 선점 당할 수 있는 스케줄링 방식 .

• 다른 Thread 에 의해 선점 되는 경우– Quantum 시간이 종료된 경우 .– 높은 우선순위에 의해 선점된 경우 .

내문서 /VS2008/Proj/CH6/ThreadPreemp-tiveExample

Page 9: Thread 와  Thread 동기화

Thread Synchronization 필요성

• Multi Threading 방식에서는 각 Thread들이 어떤 순서로 실행되는지 예측할 수 없다 .

내문서 /VS2008/Proj/CH6/CriticalSection

Thread 가 할당받은 시간

Thread 코드 실행 H/W InterruptDPC 큐 루틴

Page 10: Thread 와  Thread 동기화

Critical Section

• Kernel 객체를 바로 사용하지 않는 유저레벨의 동기화 방법 .

• 동일한 Process 내에서만 사용할 수 있음 .• Kernel 객체를 사용하지 않기 때문에

핸들을 사용하지 않고 CRITICAL_SECTION 타입을 정의하여 사용 .

• CriticalSection( 임계영역 ) 에 중복하여 재 진입하여도 데드락 현상이 발생하지 않음 .

내문서 /VS2008/Proj/CH6/CriticalSec-tionSync, ReEnteredCriticalSection

Page 11: Thread 와  Thread 동기화

Mutex

• Kernel 동기화 객체는 Signaled/ Non signaled 두 가지 상태 중 하나로 존재함 .• WaitForSingleObject()를 사용하여 Kernel 객체가 Signaled 될 때까지 대기• 운영체제는 Mutex가 반환되지 않은 상태에서 Thread가 종료될 경우 그 Mutex

를 강제적으로 Signaled 상태로 변환 .• 동일 Thread가 Mutex를 중복 호출하여도 Deadlock 발생하지 않음 .• Mutex에 이름을 주어 (NamedMutex) 서로 다른 프로세스에 속한 Thread간

동기화에 사용 .

내문서 /VS2008/Proj/CH6/CriticalSectionSyncMutex, Mutex_wait_abandon, NamedMutex

Page 12: Thread 와  Thread 동기화

Semaphore

• 지정한 수만큼의 Thread 가 임계영역에 진입할수 있다 .• 사용 가능한 자원 개수가 0 이 되기 전까지 Signaled

상태를 유지 .• Named Semaphore 가능 .

내문서 /VS2008/Proj/CH6/MyungDongKyoJaSimulate

Page 13: Thread 와  Thread 동기화

Event

• Signaled/Nonsignaled 상태를 원하는 때에 바꿀 수 있는 동기화 객체 .• Named Event 가능 .• Auto Reset모드

– WaitForSingleObject() 를 통해 진입 후 자동으로 Nonsignaled 상태로 변경• Manual Reset 모드

– ResetSignal()을 호출하기 전까지 Signaled 상태를 유지 .

내문서 /VS2008/Proj/CH6/StringEvent2

Page 14: Thread 와  Thread 동기화

Thread 대기블록WaitBlockListWaitListEntry

ThreadObject

NextWaitBlock

WaitListHead

ThreadObject

NextWaitBlock

WaitListEntry

WaitListHead

WaitBlockListWaitListEntry

ThreadObject

NextWaitBlock

KTHREAD #1 KTHREAD #2

동기화 객체 #1 동기화 객체 #2