태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
Blog | Tag | Local | Media | Guest | Login  RSS
분류 전체보기에 해당되는 글 27건
2007.11.07 :: 숙제 2번째

튜닝 두번째 시간으로 이번에는 메모리 구조에 대해 살펴보도록 하겠다. 메모리 튜닝을 알려면 적어도 Windows 메모리 구조에 대하며 미리 알아야 하는데... 또 Memory 구조를 이해하기 위해서는 먼저 Windows Architecture를 이해하는것이 선행작업(?)으로 이루어 져야 할 것이다. 고로... Windows Architecture에 대하여 언제나 그랬듯이 간단히 짚고 넘어가도록 하겠다.

image

위의 그림은 지금 스터디 하고 있는 Windows Internals에서 빌려온 그림이다.^^ 쓰면서 설명하면 무지 편하지만 지면상으로 표현해야 하는 한계가 있으므로 쭉 서술하겠다. 꼭 이그림을 외운다기 보다는 전체적인 흐름을 파악하는 것이 중요하다. Windows는 크게 User Mode와 Kernel Mode로 구성되어 있다. 먼저User Mode는 크게 System Process 부분과 Services, Application, Enviroment Subsystem으로 구성되어 있다. Kernal Mode는 HAL, Kernel, I/O, Memory Manager와 같은 구조로 이루어져 있다. 왜 이러한 구조를 설명하려는 것일까? 위에 설명된 일종의 Image들이 바로 Memory에 상주되어 Windows System을 움직이기 때문이다. 즉 Windows에서 말하는 메모리 구조도 User 모드에서 사용하는 영역과 Kernel Mode에서 사용하는 부분으로 나눌 수 있다. 위에서는 간단히 메모리 설명을 하려고 정의한 부분이였고 지금부터가 Windows 튜닝 메모리 시간으로 접어드는 아주 중요한 시기이다!!! 자 Gogo~~

● Memory 용어 정리

Memory에 관련된 용어 정리를 하려고 하는데... 나는 Windows Internals을 보는 순간 한숨이 나온다. 어떻게 이렇게 많은 양의 내용을 이해해야 하며, 내가 과연 이 내용으로 발표를 할 수 있을까 하는 내용이다. 그러나 언제나 그랬듯이 필자는 간단히 Memory 용어 정리를 넘어가려고 한다..ㅋ

image

Application에서 VAD를 거쳐(그림에 표시되지는 않았지만 VAD는 가상의 메모리 공간으로 Physical Memory값을 찾을 수 있는 주소값을 가지고 있다) Physical Memory로 Data를 찾으려고 한다. 이 경우 Physical Memory에 원하는 Data가 있는 경우를 우리는 "Memory Hit"되었다고 말한다. 만약 원하는 Data가 없는 경우에는 Virtual Memory Cache에 Access하고 없을 경우 Virtual Memory(Disk공간에 있는 것)을 Scan하게 되는데 이 과정을 "Page Fault"라고 한다. 즉 Page Fault는 Virtual Memory를 이용하는 것이라고 생각하면 좋을 듯 하다. 이럴 경우는 상식적으로 생각해보면 좀 더 기억하기가 쉬울 것이다. Physical Memory가 작거나, Virtual Memory가 클 경우 Page Fault는 좀더 자주 발생할 것이다. Page Fault과정중에서 2가지 중요한 개념이 나오는데 이는 "Paged Pool"과 "Non Paged Pool"이라는 개념이다. 그림에서 설명한다면 Paged Pool은 Virtual Memory를 통해 Access하는것을 말하고 Non Paged Pool은 Virtual Memory Cache영역까지 Access하는것을 말한다. 필자가 너무 쉽게 설명한듯 하여 좀더 업무에 효율적으로 쓸 수 있는 문장으로 위 2개의 개념을 바꾸어 보았다. "Paged Pool"영역은 크게 2 부분으로 나눌수 있는데 Kernel 쪽에서 사용하는 부분(특정 API함수들이 호출에서 Kernel영역의 App사용)과 Disk Paging이 이루어 지는 공간으로 구성되어 있다. "Non Paged Pool"영역은 System Booting시에 메모리에 로드되어 Shutdown시까지 메모리에 상주되어 있는 공간을 의미한다. 그림에서 보면 Virtual Memory Cache영역까지만 접근하는 것을 말하는 것이다.

이러한 개념들을 배우는 이유는 바로 Memory 튜닝시 반드시 알아두어야 할 용어이기 때문이다. 만약 System 운영 시 Page Fault Count가 Web Server일 경우 150 ~ 200, 일반 Application Server 일 경우 80 ~ 100정도가 되었을때는 Memory가 부족하다고 판단할 때 이용된다. 또 Windows 서버 운영시 Paged Pool영역의 문제로 Event가 발생하였다면 2019로 표시되며, Non Paged Pool영역의 문제가 일어났다면 Event ID는 2022로 표시 될 것이다. 또 Non Paged Pool 영역이 Full 이 된다면 System은 HANG상태가 되어 장애를 유발할 수 있기 때문에 이러한 임계치를 인지하고 있는 것은 시스템 튜닝의 기초내용이라 생각된다.

image

휴~~ 생각나는 데로 쓰다 보니 용어 정리하고 해놓구선.... 중요 단어만 열거한거 같다. 非중요단어에 대해서는 개념만 집고 넘어가도록 하겠다. Virtual Memory의 도입 배경은 예를들어 설명하겠다. 만약 Windows상에 Icon을 눌러 실행파일을 실행할 경우 일단 Disk에서 Memory로 실행파일의 Image를 올려야 한다. 그러나 만약 올릴수 있는 Memory 단위가 1M라는 제약조건이 있다고 가정하자. 실행파일의 Image가 2M라고 하면 이 파일을 실행 될 수 없을 것이다. 그래서 나온 개념이 Virtual Memory라는 개념이라고 한다. Paging은 Swap이라고도 하는데 Unix에서 Swap이라는 개념이 NT에서는 Paging이란 개념으로 불리는거 같다. 즉 프로그램 중 자주 사용되지 않는 부분의 작업 메모리를 물리적 Memory에서 Disk로 옮기는 방식, 즉 Memory의 가용공간을 증가시키는 방법중 하나이다.

● Memory 관련 Option

   ▶ PAE (Physical Address Extention)

Windows 32 Bit System일 경우에는 OS상에서 인식 할 수 있는 Memory의 용량이 4G로 제한된다. 일반 Application 서버나 Web Server일 경우에는 이러한 운영이 가능하겠지만 SQL서버나 File 서버를 운영할 경우 4G이상의 Memory를 사용하게 되는 경우가 빈번하다. 이럴경우 Boot.ini File에서 PAE Option을 활성화 해야만 확장된 Memory 사용을 할 수 있게 된다. /PAE Option에 대한 설명은 Windows Internal에 너무나 자세히 나와 있는데 여기서는 항상 강조하는 것이지만 간단히 살펴보고 Windows Internal 내용은 다시 다루도록 하겠다.

image

4G 이상일 경우 Boot.ini에 /PAE Option을 추가하면 위의 그림과 같이 메모리 영역 부분이 추가된다. 이렇게 추가 할당된 Memory영역은 바로 User 부분에서 사용할 수 있는것이 아니다. 확장된 영역은 Paging공간으로 사용된다. 추가된 부분을 User 부분에서 사용할 수 있으려면 /AWE (Address Windowing Extensions)사용해야 한다. Windows Internals에 나오는 /PAE와 /AWE부분은 3편에서 다루기로 하겠다.

● Memory 분석을 위한 Counter 설정

   1. Available MBytes

      - 모든 프로세스들에 의해  사용되고 남은 Memory를 확인하는 Counter로 시스템의 안정적 운영을 위해서는 Physical Memory양의 약 20~25%를 유지하는 것이 적절하다고 한다.

   2. Page Reads/sec or Paged Writes/sec

      - Physical Paging으로 인해 Disk로 초당 읽어 오는 수를 의미하는 것으로 Hard page와 Soft page로 구분이 된다. Hard page는 찾고자 하는 Data가 메모리에 없어 Disk으로 부터 fetch하는 것을 말하고 Soft page는 메모리에서 바로 가져오는 것을 말한다. 보통 이값이 150이 넘을 경우 Memory상에 Bottleneck이 있다고 판단한다.

   3. Pool Nonpaged Bytes / Pool Nonpaged Peak / Pool Nonpaged Failures

      - 앞의 내용을 보면 32Bit운영체제에서는 값이 약 265M정도로 할당이 되어 있는데, 이 값이 MAX가 될경우 Server의 Resource를 이용할 수 없게 된다.(Server Hang상태)

   4. % Usage Peak

      - Paging File이 주어진 시간내에 처리하는 %를 나타낸 값으로 이 값이 90%를 넘을 경우 Memory Bottleneck이 있다고 생각할 수 있다.

지금까지 메모리 튜닝에 필요한 기초 지식 및 성능 Counter에 대해 알아보았다. 시스템 튜닝은 어느 한 부분 보다는 종합적으로 접근해서 처리해야 하는 경우가 많기 때문에 앞으로 남은 Disk관련, PCI관련, 운영되고 있는 서비스 관련 Point에 대한 부분을 다루고 다시 이 부분을 다룰려고 한다. 2번째 시간을 마치면서 아쉬운 부분이 있기 때문에 2-1편의 의미로 Windows Internals 7장에 있는 Memory 부분을 언급하고 넘어가기로 하자.


 태그 : 
Name
Password
Homepage
비밀글 (Secret)

이번부터 Windows 서버 튜닝에 대한 간단한 소개를 하고자 한다. 내가 생각하는 Tuning 시점은 시스템 구축에서 부터 운영이후 폐기할때 까지 신경 써야 하는 부분이라고 생각한다. 아직 미약한 실력이지만 Tuning을 할 수 있는 기본적인 용어에서부터 관리 기법까지 알기 쉽고 편하게 접근하려고 한다.

[Processor]

현재 Quad Core CPU가 탑재된 서버 제품이 나와 있지만 아직까지 대부분의 Site에서 운영되고 있는 CPU 기술은 Dual Core나 Hyper-Threading 기술을 기반으로 운영되고 있는 서벅가 많을 것이다. 물론 간헐적으로 64Bit System을 사용하고 있는 Site가 있지만 여기서의 설명은 주로 Dual Core나 SMP방식의 서버를 대상으로 논할것이다.

CPU는 크게 Core, 레지스터, Cache 3가지로 분류할 수 있다. 또 L1 Cache가 어떤 방식으로 동작하느냐에 따라서 RISK or CISK장비로 구별이 된다. 여담으로 RISK와 CISK구별방법을 살펴보자. 이방 법을 알려면 L1 Cache구조는 간단하다. L1 Cache는 CPU명령 집합(Instruction) + 최근,자주사용하는 명령어 Set을 가지고 있는 두가지 구조의 합으로 이루어져있다. RISK와 CISK의 차이는 CPU 명령어 집합을 어더한 방식으로 가지고 있느냐에 따라서 결정이 된다.

image

흠... 여기까지 설명하고 나니 다시 지식의 한계에 도달했기 때문에 여담을 접고...^^

CPU에서 또 확인 할 것이 Scalability, 즉 확장성에 대한 구조도 확인해야 한다. 여기서 구조를 설명하는 이유는 간단하다. 기본적인 구조를 알아야 Tuning시에 Bottleneck 구간을 찾아내는데 도움이 되기 때문이다. 에궁... 다시 본론으로 들어가면 CPU Scalability는 H/W 측면과 S/W 측면이 있는데 일단 H/W 측면부터 알아보겠다. H/W측면은 현재 운영서버에 많이 구축되어 있는 SMP방식이냐 아니면 NUMA방식으로 되어 있느냐를 고려하는 관점이다. SMP방식은 뭐 많이 들으셨으리라 생각하지만 NUMA방식은 다소 모르시는 분이 있을 수도 있다는 생각에 잠깐 언급하고 넘어가겠다.

image

NUMA란 Non Uniform Memory Access란 말로 다른 Node 를 통합하여 사용하는 방법을 말한다. 만약 8Way 장비를 16 Way 처럼 사용하고 싶다면 두개의 8Way 장비를 물리적으로 연결하는 방법을 말한다. NUMA의 핵심 내용은 특정 CPU가 여러개의 Memory에 Access 할 수 있게 하는 기술이다.

여기까지 H/W 기본적인 구성에 대한 설명을 마치고 Bottleneck Check에 Point가 되는 FSB에 대해 말해보고자 한다. CPU연산은 통상 Memory 연산보다 빠르다. 만약 SMP구조에서 동시에 CPU가 여러 요청을 할 경우 모두 Memory에 연산을 위한 요청을 할텐데 이경우 FSB에 병목현상이 발생된다. 이럴경우 FSB 수치에 대한 개념이 필요한데 위에서 그랬듯이 간단한 설명으로 개념만 잡고 넘어 가려고 한다. 왜냐하면 아직 갈길이 멀기 때문에....쿡쿡

image

위에 명시된 그림을 보면 FSB라고 검은색 표시가 되어 있다. FSB는 Front-side Bus의 줄임말로 Memory입장에서 봤을때 앞단의 Core로 통신하는 통로이기 때문에 FSB라는 말을 붙였다. 이후 BSB라는 용어가 나오는데 위의 설명처럼 Core에서 L1 Cache로 통신하는 경로이다. Tuning을 하려면 OS상의 Counter수치에 의한 접근도 필요하지만 기본적인 용어 정리가 필수 이기 때문이다. 만약 DB서버일 경우에는 Random한 Data를 수집한다고 했을경우 L1 Cache사용율이 떨어진다. 이러한 현상은 Memory Access 하는 효율 증대가 필요하다는 말로 DB서버 성능저하시 FSB 부분에 Bottleneck현상이 있는지도 확인해야 하는 항목이기 때문에 개념정리 및 용어 정리는 필수이다. 이부분에서 Double Edge Clocking, Netburst, FSB 기본 Stepping Level등의 개념또한 추가적으로 필요하지만 이 부분에 대해서는 뒷쪽에 다루도록 하겠다.

Processor 부분에서 튜닝 포인트로 중요하다는 부분이 바로 L2 Cache의 적절한 설정이다. 이 부분은 BIOS Setting에서 이루어 지며 Admin이나 엔지니어가 초기 설정시 간과하기 쉬운 부분이다. L2 Cache의 처리방법에는 크게 2가지 기술이 있다. Write-Through기술과, Write-Back기술이 있다.                

● Write-Through L2 Cache                                                                                                        - CPU Write to Cache → Cache Write to Memory → Write Ack returned to CPU → CPU ready for next Cycle의 Mechanism으로 처리되는 기술을 말한다. 역쉬 말로 쓰면 무슨말인지 도통... 그리하여 그림으로 간단히 설명하겠다.

image

위 그림을 보면 TCP 전송과 비슷하다는 느낌을 받을것이다. Write-Through 기술은 TCP 전송방식과 비슷하다고 생각하면 된다. 이러한 기술은 Data전송이 Ross율을 줄이는 이점이 있다. 그리하여 Random한 Data를 처리하는 DB서버나 Java 기반의 Application 사용서버, Exchange서버와 같은 Mail서버에  설정하는 적이 대부분 권고하는 사항이다.

● Write-Back L2 Cache                                                                                                           -  CPU write to cache → CPU ready for next Cycle → Cache writes to memory의 Mechanism으로 처리되는 기술을 말한다. 이 Mechanism의 특징은 UDP전송처럼 Ack신호를 보내는 처리가 없다. CPU에서 Cache로 전송하고 바로 다음 처리 신호를 기다리는 형태이다. 이러한 설정을 하는 이유는 Static Data를 처리하는 DNC, AD, Web, File Server서버 구축시 이러한 설정을 하며 Web서버 구축시에는 MS에서 L2 Cache 처리 방법을 Write-Back으로 설정하라고 권고하고 있다.

대부분의 운영 Site에서는 전문화된 NT H/W엔지니어서 설치하는 경우보다는 직접 OS Setting이나 H/W Setting을 하는 경우가 있다. Admin으로써 이정도 사항은 Check하는것이 향후 Performance저하로 튜닝이 필요할 때 Bottleneck 요소를 줄여가는데 도움이 되는 사항 이라고 생각되어 간단하게 내용을 살펴 보았다.

Processor에서 다룰 내용중의 마지막을 남겨 두고 있다. 바로 Hyper-Threading기술이다. 대부분의 운영Site에서는 성능 저하의 이유로 Hyper-Threading 적용하지 않은 Site도 있을 것이다. 이러한 Hyper-Threading기술은 Single Core일 경우 효과는 뛰어나다고 할 수 있다. (이론적으로 2배로 뻥튀기 하는 기술이기 때문에.... 실질적으로는 2배의 성능이 나오지는 않는다) 그러나 현재 운영되고 있는 Site 서버 기준으로 보면 Single Core는 사용을 안하고 있는 실정이며 대부분 SMP 방식의 CPU 운영을 하고 있기 때문에 이러한 운영 환경속에서는 Hyper-Threading기술이 오히려 필요 악이 되는 경우가 있다. H/W Vendor 사들이 하는 사항으로는 Web서버일 경우 2Way 장비급에는 약 30%정도 성능 향상이 있다는 보고가 있으며 8Way급 이상이 되는 장비에 적용시 오히려 성능 감소 현상을 느낄수도 있다. 요즘 같은 시대에 Hyper-Threading기술을 적용하여 Performance 향상을 꽤하는 사람이 있을까? 하는 생각도 해보면서... 튜닝에 대한 첫번째 부분을 마무리 하고자 한다. 휴~~


 태그 : 
Name
Password
Homepage
비밀글 (Secret)
Active Directory 세미나 자료 올려드립니다.
http://maystyle.tistory.com/199

Name
Password
Homepage
비밀글 (Secret)

Windows 튜닝에 대한 글을 정리하다가 Memory구조에 대해 알 필요가 있다는 생각이 마구마구 든다. 그러나 Windows Internals에 있는 Memory관련 내용들~~ 특히 7장에 대한 내용을 다루어 볼려고 한다.

● PTE (Page-Table-Entries)

clip_image001

PTE는 Memory Manager에서 관리하는 일종의 Object로 VAD에 있는 Mapping정보를 읽어와서 Physical Memory 주소와 Mapping하는 역활을 담당한다. 이 공간은 32Bit체에서 약 1.2GB정도 차지한다. 계산법은 Page 용량이 4KB이니까 MAX 300,000으로 유지 되기 때문에 1.2GB라는 계산이 나오는 것이다. 4G Memory일 경우 3500정도는 유지해야 한다고 하는데 정확한 수치는 어떠한 서비스를 하는 것인지에 따라 다르다고 한다.

● PAE (Physical Address Extension)

이 Option은 32bit System에서 Memory 4G 이상의 메모리를 인식할 수 있게 해주는 옵션이다. 이 옵션에 대해서는 튜닝 두번째 내용에서 다루었기 때문에 여기서는 Windows에서 동작하는 MMU(Memory Management Unit) 의 동작 원리에 대해 알아보고자 한다.

image image

image      /PAE

image /NOPAE

이번 Topic에서는 글보다는 그림이 많은거 같다...ㅋ 여담이고 /PAE Option을 적용하면 부팅시 Ntkrnlpa.exe(Uniprocessor), Ntkrpamp.exe (Multi)라 불리는 Kernel이 Load되어 윗 그림과 같은 구조로 Vitrual Address Mapping 방식이 바뀌게 된다. 즉 /PAE Option이 적용될때는 3분할 방식으로 Vitrual Address영역에 접근하게 되는 것이고 PAE Option이 적용되지 않을 때는 2분할 방식을 이용하게 되는 것이다. /PAE Option을 적용하더라도 Registry Flags 값이나, Non Paged Pool Size, "Well-Known" kernel Address는 변하지 않는다고 한다. /PAE Option이 적용될 경우 다음과 같은 Mechanism으로 인해 Virtual Address에서 Physical Memory 값으로 찾아가게 된다.

1. CR3(Control Registor 3 - 2bit 처리를 하는 레지스터)가 PDPI로 요청을 함

2. 요청된 Index를 PDPE로 검색하여 PDE로 전송

3. PDE내에서 PFN의 Index를 이용하여 PTE에 Mapping한 후 Physical Memory Space에 Mapping

이러한 로직 처리로 Virtual Memory 처리를 한다.


 태그 : 
BlogIcon hotpoto| 2008.08.04 13:53 신고 | PERMALINK | EDIT/DEL | REPLY
http://dongjo.tistory.com
Name
Password
Homepage
비밀글 (Secret)
이 전 과정에서 너무 고생을 해서인지 의외로 이번 세미나는 쉽게 진행됐습니다. 일단 다음 주는 간단하게 Object에 대해서 이야기 하고, Windows 튜닝 방안에 대해 김동조씨기 진행할 예정입니다.

[수업 내용]
예외 디스패칭 :
http://maystyle.tistory.com/119 
Structured Execption Dispatching :
http://maystyle.tistory.com/118
시스템 서비스 디스패칭 : http://maystyle.tistory.com/121
커널 모드 시스템 서비스 디스패칭 : http://maystyle.tistory.com/122

[진행]
민성

[참석]
현정과장님, 준규대리님, 민우 형님, 준상씨, 동조씨,

[진도]
p171 ~ p188

[교재 내용]

- 인터럽트

인터럽트는 소프트웨어로 인해 발생합니다. 예외는 커널에서 발생하는데, 일단 예외가 발생하게 되면 먼저 현재 실행 내용을 트랩하여 저장하고, 해당 예외는 먼저 서브 시스템의 디버거 포트에서 처리를 시도합니다. 만약 처리가 되지 않았다면, 다시 예외 처리기는 사용자 모드로 전환하고 현재까지의 실행 내역을 트랩하여 사용자 스택에 복사하고 프레임 기반의 예외 핸들러를 찾기 위한 루틴을 실행합니다. (프로그램이 실행 되게 되면 해당 프레임을 스텍에 차곡 차곡 쌓는데, 에러 이전으로 돌아가기 위한 동작으로 보입니다.) 역시 못찾았다면, 다시 디버거를 호출하고, 이에도 실패하게 되면 최종적으로 커널은 스레드의 프로세스와 연관된 예외 포트에 메세지를 보내고 해당 프로그램을 종료하게 됩니다.

아 그리고 Drwtsn32.exe 와 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug 도 잊지 마시기 바랍니다. SQL Management Studio가 설치되면 자동으로 VS2005가 설치되고 해당 설정이  '0' 으로 변경됩니다. 1로 바꿉시다...^^

- 시스템 서비스 디스패칭

일단 용어 정리 부터합시다. 시스템 서비스랑 사용자 App에서 호출이 가능한 Windows 의 Native 함수를 말합니다.

위 그림으로 설명을 하자면 'NtWriteFile'이 시스템 서비스에 해당 됩니다. 자 사용자의 App가 WriteFile을 호출하면 실제로 Kernel32.dll의 NtWriteFile이 해당 동작을 수행 하게 되는데, 항상 System Call의 경우 idt 의 0x2E 인터럽트가 발생하게 되고, 사용자 동작이 트랩이 된 이후에 KiSystremService 라 불리우는 시스템 서비스 처리 함수가 시스템 서비스 디스패처 테이블을 확인하고, 해당 서비스를 실행하게 됩니다.

그렇다면 이 Table은 어떤 형식으로 시스템 서비스를 실행할까라는 생각이 듭니다.

Windows는 2개의 내장 시스템 서비스 테이블을 가지고 있습니다.확장하면 4개 까지 지원이 가능한데, 일단 KeServiceDescriptorTable 은 핵심 Windows 내장 함수를 KeServiceDescriptorTableShadow 는 서브시스템을 맞게 됩니다. 자 쓰래드는 자신의 시스템 서비스 테이블을 가르키는 System Service number를 가지고 있습니다. 인덱스는 먼저 KeServiceDescriptorTable 인가 KeServiceDescriptorTableShadow 를 가르키게 되고, 일단 누군지 정해지면 0~11 bit로 이루어진 숫자를 기반으로 해당 서비스를 찾아가서 실행 합니다.


Name
Password
Homepage
비밀글 (Secret)
사전 지식이 없었던 만큼 정말 어려웠던 내용이 였습니다.
고생 많으셨습니다.
별로 아는 것도 없으면서 수업을 진행하니 어려움이 많네요...^^

[수업 내용]
http://maystyle.tistory.com/entry/지루한-인터럽트-한방에-알아보자

[진행]
민성

[참석]
준상, 동조, 민우형님, 준규선배, 조현정 과장님

[진도] 
p140 ~ p170

[교제 내용]
전체적으로 살펴 본다면 이렇게 정리 될 수 있습니다.

Windows 는 IRQL 이라는 자체적인 우선 순위를 통해 인터럽트 혹은 여러가지 발생 가능한 요청 사항을 수행하게 됩니다.

이때 상위 레벨의 IRQL을 갖는 인터럽트가 수행된다면, 하위 레벨의 Thread는 컨텍스트 스위칭이 되면서 하위의 모든 IRQL 레벨은 마스킹 되게 됩니다.

그렇다면 프로그램들이 수행 될때 어떻게 IRQL을 이용하는지 설명하겠습니다.
만약 IRQL이 없고 그냥 평등하게 Thread가 수행되게 된다 라고 가정하게 되고 Memory Access 나 Hard Disk Access가 필요하게 되면 어떻게 될까요?

당연히 Access를 통해 Data를 로드하는 시점에서 해당 Thread는 멈춰야 합니다. 이를 보장하기 위해 보통 사용자 Thread가 수행되는 Passive 레벨 윗단에 APC라는 Memory를 Access 하기 위한 인터럽트를 두고 해당 인터럽트 발생시 유저 Thread는 실행을 멈추고, APC 단의 Thread 수행을 기다리게 됩니다. 이를 통해 한 Thread가 커널단... 즉 실제 memory 나 paging memory에 접근하는 로직을 수행할 수 있습니다.

그리고 윗단 DPC 이상은 예를 들면 IO 및 인터럽트가 발생하는 레벨인데, 이전에 설명했듯이 특정 IO가 발생할 경우 HAL은 해당 IO의 IRQL을 결정해 주고,  해당 IRQL에 맞춰 CPU는 인터럽트를 처리합니다. 그렇다면 DPC/Dispatch 는 뭘까요?

책에서 보듯이 해당 레벨은 소프트웨어적으로 발생하는 인터럽트입니다.
제가 설명드렸다 시피 IDT 테이블에는 연관되 일어나는 여러 인터럽트들이 정의 되어 있을 수 있습니다. 이때 한 인터럽트가 완전히 수행 될때 까지 다음 인터럽트가 기다린다거나, 조금 늦게 수행 되도 되는 인터럽트가 존제 한다거나, 기타 Thread의 수행 시간이 너무 길어질 경우 CPU의 점유 현상이 나타나고 이를 방지 하기 위해 일단 늦게 수행되도 괜찮은 경우 DPC 큐에 넣어 수행을 지연시킵니다. 그리고 윗단의 인터럽트가 종료 되면 DPC레벨에서 해당 인터럽트를 꺼내 수행하게 됩니다.


Name
Password
Homepage
비밀글 (Secret)

[3장의 주요내용]

   ● 실행부, 커널, 장치 드라이버와 같은 커널 모드 구성요소가 사용하는 메카니즘

[Trap Dispatching]

   ● 인터럽트(Interrupt), 예외 (Exception)은 정상적인 제어 흐름에서 벗어나

      다른 코드로 전환하게 되는 운영체제의 특수한 경우이다.

   - Trap은 인터럽트나 예외가 발생하였을 때 실행 Thread를 잡아서 운영체제의

     정해진 위치에 제어를 전달하는 메카니즘을 말하는 것으로 여기서 제어를 전달하여

     처리하는 함수를 Trap Handler라고 한다.


image

위에 명시된 그림은 Trap Handler를 활성화 하는 조건을 나타낸 것이다.

커널은 Interrupt와 Exception을 구별할 수 있는 구별 방법은 비동기 이벤트이냐,

동기식 이벤트이냐를 판별해서 구분한다. 즉 Interrupt는 I/O장치, 프로세스 클럭,

타이머 등에 대해 어느때나 발생하지만 Exception은 특정한 명령의 실행으로 발생하는

운영체제의 특수한 경우이다.

만약 장치 인터럽트가 발생하였다면 Kernel Trap Handler는 ISR에 제어를 전달한다.

ISR은 장치 드라이버가 인터럽트를 일으키는 장치를 위해 제공하는

Service Routine이다.


   ● Interrupt Dispatching

1. H/W Interrupt Processing

   - H/W Platform I/O Interrupt → Interrupt Controller → Processor 통지 →

     IRQ획득 → Interrupt Controller에서 IRQ를 Interrupt Num으로 변환 →

     IDT

     에 인덱스를 사용하여 Interrupt Dispatch Routine에 전달

2. x86 Interrupt Controller

   - 종류 : i8259A PIC(유니프로세서 시스템에서 동작),

                i82489 APIC(멀티프로세서 시스템에서 동작, 256개 Interrupt지원)

3. IRQL (Software Interrupt Request Levels)

image

  - Interrupt는 IRQL의 우선순위 순서에 따라 서비스 되며, 더 높은

    우선순위  Interrupt가 낮은 우선순위 Interrupt의 서비스를 선점한다.

    IRQL은 각 프로세서별로 설정하는데 이는 프로세서가 어떤 인터럽트를

    받을 수 있는지 결정하며 커널 모드 데이터 구조에 대한 액세스를 동기화

    를 위해 사용된다. 커널은 프로세스처리를 위하여 IRQL의 순위를 조절하

    는데 이때 PIC를 엑세스하여 처리할 경우 Data 처리 속도가 지연되기 때

    문에 지연 IRQL이라는 성능 최적화 방법을 구현하여 프로세서의

    인터럽트를 처리한다.

  - Interrupt를 IRQL에 Mapping

     Windows는 하드웨어에서 IRQL들의 개념을 구현하지 않는다. 그러한

    이유로 HAL에서 버스 드라이버(PCI, USB)는 자신들의 존재가 어떠한

    인터럽트 장치에 할당될 수 있을까를 결정하는데 이러한 역활을 하는

    플러그 앤 플레이 관리자는 인터럽트 할당을 고려한 후

    HalpGetSystemInterruptVector를 호출하여 매핑 한다.

  - Predefined IRQLs

     ▶ High : KeBugCheckEx로 인한 System Halting이 있을경우나 모든 인터

                  럽트들이 Masking할때

     ▶ Power Fail : Power Fail이 있을 경우 사용되지만 IRQL은 사용되지 않음

     ▶ Inter-processor Interrupt

        다른 프로세서가 특정 Thread를 실행하고자 할때 DISPATCH_LEVEL

        인터럽트가 요청될경우, 프로세서의 TLB가 Update 될경우,

        System Crash나 Shutdown이 요청될경우

     ▶ Clock  : Kernel의 날짜 유지 및 Thread에 대한 CPU 시간 측정 및 할당

     ▶ Dispatch : S/W에서 사용할 수 있는 가장 상위값

     ▶ APC : 드라이버는 사용 불가, I/O Manager가 사용

- Interrupt Objects (Kernel Control Object)

   커널에서 Interrupt 요청이 있을 경우 장치 드라이버를 ISR에 등록할 때 사용

   Interrupt Object는 ISR주소와, 장치 인터럽트의 IRQL을 포함한다.

   Interrupt에 대한 자세한 내용을 알려고 노력했지만... 도통 무슨말인지

   쉽게 이해가지 않아 아래 그림을 첨부하였다. 아래그림에서 알수 있는것은

   어떤 처리를 위한 구조체 정도로 생각해야 되는것은 아닌지....^^

   이후에 나오는 DPC, APC Object모두 프로세스간의 동기화를 위해 사용된다

   는 것만 명심하자!!!

   image

  4. Software Interrupts

       - DPC Interrupts (Dispatch or Deferred Procedure Call)

image

    높은 Interrupt Level에서 낮은 Interrupt Level로 지연처리될 때 사용

      ▶ Driver queues request

      ▶ CPU당 queue가 존재할 경우


 태그 : 
Name
Password
Homepage
비밀글 (Secret)

Windows 스터디를 시작한 후 처음 발표한 자료 내용

장애 복구 하면서 만든자료라 부끄럽기 짝이 없지만 더 열심히 매진하기 위해서 문서를 올린다^^

그러나...

누가 이 문서를 보고 이해를 해줄지...ㅋ

Name
Password
Homepage
비밀글 (Secret)
이 번주에는 3장 188page 까지 진도가 나가겠습니다.
꼭 예습 해오셔야 합니다.

정말 3장 부터는 장난이 아니네요...;; 이제 153Page까지 이해 했습니다.
제발 부탁드립니다.
꼭 이 번주 188 페이지 까지 예습 해오세요.
같이 세미나 하면서 궁금한점은 풀고 서로 도와가면서 해야겠죠...^^

Name
Password
Homepage
비밀글 (Secret)
숙제 2번째
숙제 2번째 입니다.

뭘할지 고민고민...-_-;

이번엔 간단하게 구구단을 하겠습니다.

처음에 단을 입력받고
출력을 다음 형식으로 나올수 있도록 해주세요

계산할 단을 입력해주세요 > 9

9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81

계속하시겠습니까 (y/n)

-> y를 누르면 다시 계산할 단을 입력해주세요
    n를 누르면 수고하셧습니다. 출력

해당 내용으로 진행하겠습니다.^^

제출은 kwonjoonsang@lgcns.com 으로 해주시고
컴파일 후 결과 나오는거 까지 확인하고 올려주심 감사할듯 ^^

Name
Password
Homepage
비밀글 (Secret)