1 / 14

Thread 와 Thread 동기화

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

glenys
Download Presentation

Thread 와 Thread 동기화

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Thread와 Thread동기화 Thread와 Thread Scheduling Thread Synchronization(동기화)

  2. 목차

  3. 지난 시간 리뷰

  4. 문제들 • 핸들 참조를 할 때 인덱스를 3개로 나눈 이유는 무엇인가? • 메모리를 효율적으로 사용하기 위함. • SEH를 최초로 인지하는 존재는 누구인가? • 0으로 나누거나 Access 금지된 메모리 영역을 Access 하려고 하면 소프트웨어 인터럽트(CPU가 연산도중 발생시키는 인터럽트)가 발생함. • 핸들 카운트가 증가하고 감소하는 것을 확인해 봤는가? • 내 문서/VS2008/Proj/CH5/DuplicateHandle

  5. Thread의 상태

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

  7. Process와 Thread의 우선순위 관계 • Thread의 우선순위 값은 그 Thread를 포함하고 있는 프로세스의 우선순위에 기반하여 상대적으로 결정됨. • Thread의 우선순위는 런타임 우선순위값과 베이스 우선순위의 두 가지 우선순위 값으로 구성되어짐. • 베이스 우선순위 값 : 유저레벨의 사용자가 API를 사용하여 결정하는 우선순위. • 런타임 우선순위 값 : 베이스 우선순위 값에 기준하여 더 높은 값으로 시스템에 의해 임시로 바뀌어지는 우선순위. 내문서/VS2008/Proj/CH6/ThreadPriorityTester

  8. Preemptive Scheduling • 어떤 Thread가 CPU를 사용하고 있는 동안 다른 Thread에 의해 CPU사용을 선점 당할 수 있는 스케줄링 방식. • 다른 Thread에 의해 선점 되는 경우 • Quantum 시간이 종료된 경우. • 높은 우선순위에 의해 선점된 경우. 내문서/VS2008/Proj/CH6/ThreadPreemptiveExample

  9. Thread Synchronization 필요성 Thread가 할당받은 시간 • Multi Threading 방식에서는 각 Thread들이 어떤 순서로 실행되는지 예측할 수 없다. 내문서/VS2008/Proj/CH6/CriticalSection Thread 코드 실행 H/W Interrupt DPC큐 루틴

  10. Critical Section • Kernel 객체를 바로 사용하지 않는 유저레벨의 동기화 방법. • 동일한 Process 내에서만 사용할 수 있음. • Kernel 객체를 사용하지 않기 때문에 핸들을 사용하지 않고 CRITICAL_SECTION 타입을 정의하여 사용. • CriticalSection(임계영역)에 중복하여 재 진입하여도 데드락 현상이 발생하지 않음. 내문서/VS2008/Proj/CH6/CriticalSectionSync, ReEnteredCriticalSection

  11. 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

  12. Semaphore • 지정한 수만큼의 Thread가 임계영역에 진입할수 있다. • 사용 가능한 자원 개수가 0이 되기 전까지 Signaled 상태를 유지. • Named Semaphore 가능. 내문서/VS2008/Proj/CH6/MyungDongKyoJaSimulate

  13. Event • Signaled/Nonsignaled상태를 원하는 때에 바꿀 수 있는 동기화 객체. • Named Event 가능. • Auto Reset모드 • WaitForSingleObject() 를 통해 진입 후 자동으로 Nonsignaled상태로 변경 • Manual Reset 모드 • ResetSignal()을 호출하기 전까지 Signaled 상태를 유지. 내문서/VS2008/Proj/CH6/StringEvent2

  14. Thread 대기블록 KTHREAD #2 KTHREAD #1 WaitBlockList WaitBlockList WaitListEntry WaitListEntry Thread Thread Object Object NextWaitBlock NextWaitBlock WaitListEntry Thread Object NextWaitBlock 동기화 객체 #2 동기화 객체 #1 WaitListHead WaitListHead

More Related