Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
해당되는 게시물 520건
  인터럽트를 IRQL에 매핑하기 
작성일시 : 2007. 11. 7. 12:47 | 분류 : Windows Server/Kernel

IRQL 로 인터럽트를 맵핑하는 방식은 원문을 인용하도록 하겠다.

IRQL levels aren't the same as the interrupt requests (IRQs) defined by interrupt controllers—the architectures on which Windows runs don't implement the concept of IRQLs in hardware. So how does Windows determine what IRQL to assign to an interrupt? The answer lies in the HAL. In Windows, a type of device driver called a bus driver determines the presence of devices on its bus (PCI, USB, and so on) and what interrupts can be assigned to a device. The bus driver reports this information to the Plug and Play manager, which decides, after taking into account the acceptable interrupt assignments for all other devices, which interrupt will be assigned to each device. Then it calls the HAL function HalpGetSystemInterruptVector, which maps interrupts to IRQLs. (출처 : Windows internals 4th edition)

IRQL 수준들은 인터럽트 컨트롤러 (PIC)에 의해 정의된 IRQ를 사용하지 않고, 버스드라이버가 HAL의 함수 HalpGetSystemInterruptVector를 호출하여 인터럽트들을 IRQL에 매핑한다.

또한 적당한 IRQL에 대한 할당은 PnP 관리자가 결정하게 된다.

HAL은 정방향 변환을 수행하므로, 인터럽트 벡터의 IRQL은 27에서 인터럽트 벡터를 빼서 계산된다. (0~27까지 IRQL에서 할당 받을 수 있다고 되어 있다. 물론 추측이다.)즉 장치가 인터럽트 벡터 5를 사용한다면 ISR은 IRQL 22에서 실행된다. 이전 포스트( http://maystyle.tistory.com/entry/IDT-살펴-보기 )에서 본 것 처럼 IDT의 인덱스를 통해서 인터럽트를 수행한다.

매핑되지 APIC의 경우 200여개 이상의 인터럽트 백터가 존제하게 되는데 이경우 라운드 로빈 방식으로 인터럽트 벡터들을 할당한다. 그리고 x64및 IA64 시스템들의 경우 HAL에서 16으로 벡터를 나누어 주어진 IRQ에 대한 IRQL을 계산한다.

이전 포스트 ( http://maystyle.tistory.com/entry/IRQL ) 에서 해당 IRQL의 각 레벨에 대해 다시 한번 애기하도록 하겠다.

. 커널은 KeBugCheckEx로 시스템을 멈추고 인터럽트를 마스킹할때만 High 수준을 사용한다.

. IPI 는 다른 프로세서가 특정 스레드를 실행하도록 스케줄링 하기 위해 DISPATCH_LEVEL 인터럽트를  대기열에 넣는 작업 및 프로세서의 변환 참조 버퍼 (TLB) 갱신 또는, 시스템 종료, 시스템 충돌과 같은 동작을 수행하도록 요청하기 위해 사용된다.

|
  Virtual Server 및 PC 상의 Windows Server Debugging 
작성일시 : 2007. 11. 7. 09:03 | 분류 : Windows Server/Kernel

현재 진행 되고 있는 MSEasy 스터디를 위하여 Virtual Server를 Debuging 하는 방법을 공유합니다.

http://support.microsoft.com/kb/871171/
http://support.microsoft.com/kb/871170/

|
  Programmable Interrupt Controller 
작성일시 : 2007. 11. 7. 08:45 | 분류 : Windows Server/Kernel

PIC (Programmable Interrupt Controller) : IBM PC 에서 유래 15개의 인터럽트를 지원
APIC (Advanced Programmable Interrupt Controller) : PIC의 개량된 형태로 멀티 프로세서 시스템을 지원하고 256개의 인터럽트를 지원
SAPIC (Streamlined Advanced Programmable Interrupt Controller) : APIC 버스를 통해 인터럽트가 전달 되지 않고, I/O와 시스템 버스를 traverse 해서 전달되며, 인터럽트 라우팅 및 로드 밸런싱이 APIC 버스가 아닌 펌웨어로 프로그래밍 되어 있음

|
  Windows Edition 별 지원 CPU / Memory 스팩 
작성일시 : 2007. 11. 6. 18:07 | 분류 : Windows Server/ETC

MS에서 받은 자료도 서로 제 각각이기 입니다만, MS의 자료를 바탕으로 하였습니다.

|
  IDT 살펴 보기 
작성일시 : 2007. 11. 6. 16:20 | 분류 : Windows Server/Kernel

!idt 명령을 이용하면 인터럽트 디스패치 테이블(interrupt dispatch table) 을 볼 수 있다.

83 : 255까지 지원되는 인터럽트 서비스 루틴 (ISR) 번호, 디버깅 시 bugcheck 번호
ff517e04 : 해당 인터럽트를 실행할 핸들러가 있는 메모리 위치(ISR) 이다.

(이전 포스트 IRQLException 과 Interrupt 에서 참조)
ISR 번호를 보면 crash 시 어떤 일이 있었는지 알 수 있다.
즉 버그 check 코드가 50이 발생 했다면 해당 머신은 exception 혹은 interrupt에 의해 hal!HalpApicRebootService를 실행하게 된다.

항상 말하지만 내 스스로 쓴 글은 혼자 공부하고 유추한 내용이 있을 수 있다.
주위 바란다.

|
  IRQL 
작성일시 : 2007. 11. 6. 15:49 | 분류 : Windows Server/Kernel

인터럽트의 우선순위는 인터럽트 요구 레벨 (IRQL)의 의해서 정의 된다.

구체적으로 IRQL=5인 인터럽트가 실행 되고 있을 경우 CPU는 IROL이0~5인 인터럽트를 보류시키고 5 인터럽트를 처리한 다음 0으로 내려가 보류중인 인터럽트를 처리한다.

그림 3-3의 High는 모든 인터럽트의 금지 맨 아래의 Passive는 일반 프로그램을 실행하는 상태를 나타내며, 특정 인터럽트는 아니다. Power Fail (전원 장애) 레벨은 사용되지 않으며, Inter-processor interrupt 는 여러 개의 CPU를 탑재한 머신에서 다른 CPU에 셧다운을 요구할 때 쓰인다. Clock은 시스템 클럽에 대한 인터렙트, 'profile'은 Windows 의 각 컴포넌트 (Exe/Dll)안에서 경과된 시간의 비율을 계산하는 프로파일링 실행 중에 실시간 클럭에서 사용하는 인터럽트다.

DPC/dispatch 는 지연 프로시저 호출 (Delayed Procedure Call)과 스레드 전환 (스레드 디스페치)를 위한 소프트웨어 인터럽트다. 지연 프로시저 호출은 I/O 접근 완료 통지 처럼 곧바로 실행하지 않아도 되는 처리를 Windows에서 실행 할 때 쓰인다. 'APC'는 비동기 프로시저 호출을 하기 위한 소프트웨어 인터럽트다 이는 특정 스레드의 컨텍스트로 함수를 실행하기위해 이용한다.

DPC와 APC는 인터럽트를 처리할 때 중요한 역활을 수행한다.인터럽트를 제대로 처리하는데 시간이 걸릴 경우 인터럽트 처리기 안에서 모든 처리를 한다면 그 사이 다른 인터럽트를 처리하지 못할 가능성이 있다. 그래서 곧바로 실행해야 하는 처리만 핸들러 안에서 실행하고, 나머지 처리는 DPC를 이용해 다음에 실행하도록 한다. DPC의 IRQL은 Passive 보다 상위이므로 다른 인터럽트 처리가 모두 끝난 후에 실행될 것을 보장해 준다.

마찬가지로 어플리케이션이 준비한 버퍼에 데이터를 써넣는 처리에서는 그 프로세스의 가상 주소 공간에 접근할 수 있어야 한다. 이런 경우 APC를 이용해 그 프로세스의 스레드로 데이터를 써 넣을 수 있도록 한다.

출처 : API로 배우는 Windows 구조와 원리

|
  Exception 과 Interrupt 
작성일시 : 2007. 11. 6. 13:41 | 분류 : Windows Server/Kernel

Trap : exception 및 interrupt 발생시 실행 thread 를 잡아 정해진 위치의 제어에 전달하는 프로세스 메카니즘, Windows 에서는 특정 interrupt나 exception을 처리하는 함수 Trap handler로 제어 전달


Interrupt : 프로세서의 실행과 관계 없는 비동기 이벤트 (I/O 장치, 프로세스 클럭등...)
Exception : 특정 명령 실행으로 인한 동기적 조건 (메모리 엑세스 위반, 특정 디버거 실행, 0으로 나누기 `1등...)

구체 적으로 인터럽트란 이벤트가 발생했음을 하드웨어에 알려 일시적으로 다른 코드를 처리한다. 즉 인터럽트가 발생하면 특정 주소의 명령어를 실행하고 실행이 끝나면 다시 이전에 처리하던 프로그램을 처리하게 된다.

하드웨어는 인터럽트의 종류를 식별하기 위해 '인터럽트 번호'를 할당하고, 실제 인터럽트가 발생했을때 해당 번호에 대응하는 인터럽트 처리기의 실행을 시작한다.

CPU가 각각의 인터럽트 처리기의 주소를 얻어올 때는 메모리에 있는 IDT (인터럽트 디스크립터 테이블)이라는 영역을 참조한다.여기에는 인터럽트 처리기가 존재하는 주소를 나타내는 셀렉터 값과 오프셋 속성을 저장한 인터럽트 디스크립터가 인터럽트 번호 순서 대로 나열 되어 있다.

운영체제는 시작 시 이 테이블을 생성해서 선두 주소를 IDTR 레지스터에 저장해 두고, 인터럽트가 발생하면 CPU는 이 레지스터를 참조해 인터럽트 디스크립터 테이블 주소를 얻고, 인터럽트 번호에 대응하는 엔트리에서 인터럽트 처리기 주소를 구한다.

Exception : 특정 명령 실행으로 인한 동기적 조건 (메모리 엑세스 위반, 특정 디버거 실행, 0으로 나누기 `1등...) 소프트웨어에 의해 발생한다.

|
  Key System Components 
작성일시 : 2007. 11. 5. 19:51 | 분류 : 카테고리 없음

Windows Subsystem
Windows의 주 Subsystem은 Windows 이기 때문에 POSIX, OS/2의 경우사실상 Windows의 Subsystem을 호출하는 경우가 많다.

Environment subsystem process (Csrss.exe)

. Console (text) windows
. Creating and deleting processes and threads
. Portions of the support for 16-bit virtual DOS machine (VDM) processes
. Other miscellaneous functions, such as GetTempFile, DefineDosDevice, ExitWindowsEx, and several natural language support functions

The kernel-mode device driver (Win32k.sys)

. The window manager, which controls window displays; manages screen output; collects input from keyboard, mouse, and other devices; and passes user messages to applications.
. The Graphics Device Interface (GDI), which is a library of functions for graphics output devices. It includes functions for line, text, and figure drawing and for graphics manipulation.

Subsystem DLLs (such as Kernel32.dll, Advapi32.dll, User32.dll, and Gdi32.dll) translate documented Windows API functions into the appropriate and mostly undocumented kernel-mode system service calls to Ntoskrnl.exe and Win32k.sys.

Graphics device drivers are hardware-dependent graphics display drivers, printer drivers, and video miniport drivers.

|
 Prev   1   ···   54   55   56   57   58   59   60   ···   65   Next