Soft Ware/Windows 구조와 원리 14

비동기 프로시저 콜 < APC > 에 대해서 ~~

IRQL 중에 APC LEVEL이 있습니다. 그 녀석에 대해 알아 보겠습니다 APC 은 비동기 프로시저 호출을 처리할때 재 진입을 제어 하기 위해 커널 모드 루틴에 의해 사용된다고 하네요. 간단한 예를 들어서 알아 보겠습니다. 프로세서 A라는 녀석이 파일 I/O 를 처리 하기 위해 함수를 호출 하였습니다. I/O 관리자는 경로를 찾기 위해 오브젝트 관리자를 호출하여 해당 볼륨을 찾습니다. 그런 다음 I/O 관리자는 IRP를 생성하여 파일 시스템 드라이버를 호출합니다. 파일 시스템 드라이버는 캐싱 관리자를 호출하여 해당 파일이 캐싱 되어 있으면 시스템 버퍼에 메모리를 복사 하던지 맵핑 합니다 . 자 그럼 다시 돌아와서 프로세서 A는 그동안 무엇을 하고 있을까요? 비동기 프로시저 라는 의미는 파일 입출력 하..

인터럽트 처리 방법 및 인터럽트 오브젝트 !!!

오늘은 다른분의 블러그를 참조하고 글을 올리네요 ^^ 책을 보다가 인터럽트 오브젝트라는 놈을 보게 되었는데요.. 궁금한 나머지 인터넷을 조사 +.+ 자 소개 해 보겠습니다 ~~ ㅎㅎ 인터럽트 란 외부 장치 등에서 발생된 신호를 cpu에게 알리기 위한 수단입니다 ^^ 자 cpu에게 알려줬으니깐 cpu가 작동하겠죠? ㅎㅎㅎㅎ cpu는 인터럽트 서비스 루틴인 ISR을 등록하기 위해 IoConnectInterrupt DDK 함수를 호출하는데요 여기서 호출할때 인터럽트 오브젝트를 생성한다고 하네요 ^^ 인터럽트 오브젝트는 디바이스 ISR의주소와 특정 레벨의 인터럽트를 서로 연관시키는 모든 정보가 들어있다고 하네요 ^^ CPU는 인터럽트 컨트롤러에게 방금 접수된 인터럽트의 IRQ를 질의하여 해당 IRQ를 파악하여 ..

캐시 인터페이스

캐시 관리자는 파일 시스템이 파일 데이터의 캐싱을 원할때 사용할수 있도록 복사 , 고정, MDL(Memory Descriptor List) 이 라는 세 가지 종류의 인터페이스를 제공 (1) 복사 인터페이스 1. 파일 시스템이 데이터에 대해 처음으로 발생하는 파일 액세스로 판단하면 파일 캐싱을 초기화한다. ↓ 2. 이때 캐시 관리자는 공유된 캐시 맵을 생성한다. ↓ 3. 파일 시스템은 캐시 관리자가 제공하는 복사 인터페이스인 CcCopyRead()함수를 호출 ↓ 4. CcCopyRead() 함수는 파일의 공유된 캐시 맵 구조체를 조사 ↓ 5. 캐시 관리자는 'Active'로 표시되지 않은 VACB(Virtual Address Control Blocks)를 찾으며 이를 'Active' 상태로 표시하고, 다른..

캐시 관리자

애플리케이션 --> 파일 시스템 드라이버 --> 캐시 --> 디스크 애플리케이션 --> 캐시 --> 파일 시스템 드라이버 --> 디스크 1. 논리적 블록 캐싱에서 운영체제는 I/O 동작이 발생하는 섹터와 관련된 메모리가 디스크의 동작을 요구하는 것보다는 디스크 I/O 요청을 만족시키기 위하여 메모리로 섹터에 있는 데이터를 캐시한다. --> 즉 여기서 중요한것은 메모리로 섹터에 있는 데이터를 캐시한다게 중요하다. 2. 가상 블록 캐싱은 디스크 레벨 보다 파일 시스템 레벨에서 데이터를 캐시한다. 3. 애플리케이션이 파일에 저장된 데이터를 액세스할 때, 파일 시스템은 데이터가 캐시에 있는지 검사 3-1. 디스크 I/O 요청을 발생 시킨다. 3-2. 파일 시스템은 캐시에 있는 데이터에 대해서만 단순히 동작 4...

스레드

- 스택 메모리 공간 생성시 스레드가 생성되는 단계에서 함께 만들게 된다. - 스레드 생성시 디폴트로 1Mbyte의 메모리를 예약 -- > 이중 4Kbyte만을 실제로 메모리와 매핑시켜놓음으로써 사용가능하게 하고 ---> 또 하나의 메모리는 가드페이지라는 형태로 - 첫 페이지는 4kByte 영역은 커미드 영역 프로그램에서 바로 스택영역으로 사용 되어 질수 있는 영역 그 아랫부분은 한페이지인 4KByte 영역은 가드페이지 라는 형태로 윈도우에 의해 페이지 보호가 이루어 지고 있는 상태 --> 스레드에서 커미드 되어진 영역을 초과하여 스택을 사용했을때 가드 페이지 부분에 대한 접근이 이루어 질것이고 Windows 운영체제에서는 가드 페이지 영역을 커미드 영역으로 바꾸고 그 아래 가드 페이지를 생성 스택을 더..

스택 백트레싱

스택 백트레싱이란 ... ---> 리턴주소와 그전의 EBP값을 가지고 다시 그전 프로시저로 가서 오류를 확인하는 것 프로젝젝트 셋팅 에서 C/C++ 메뉴에서 프로젝트 옵션에서 /Oy 컴파일 옵션을 통하여 강제적으로 스택 프레임 구성을 생략 위의 경우에 스택 백트레싱이 불가능 하게 되며 , 디버거 의 경우 심벌 파일에 FPO(Frame Pointer Omission) 라는 정보를 포함 시킴으로써 스택 백트레이싱을 가능

함수 호출

1. __cdecl --> 프로시저에서 다른 프로시저를 호출시 파라미터는 오른쪽에서 왼쪽으로 스택에 쌓이고 호출하는 쪽에서 파라미터 스택 해제 2. __stdcall --> 프로시저에서 다른 프로스저 호출시 파라미터는 오른쪽에서 왼쪽으로 스택에 쌓이고 호출 받는 쪽에서 파라미터 스택 해제 3. __fastcall --> 파라미터 2개는 스택을 사용하지 않고 EDX , ECX 를 사용 , 2개이상부터는 파라미터 에 쌓인다. 스택 해제는 __stdcall과 같다. 4. Naked 함수 - 모든 스택 프레임에 대한 규정과 해제를 프로그래머가 직접 신경 써줘야 한다. 여기서 __LOCAL_SIZE는 이 Naked 형식의 함수에서 정의한 로컬 변수의 사이즈를 컴파일러에서 자동으로 계산하여 넣어주는 심벌 만약에 심..