2015/07/16 245

인스택 큐드 스핀락(InStack Queued SpinLock)

인스택 큐드 스핀락(InStack Queued SpinLock) Windows Server 2008 인스택 큐드 스핀락은 서드파티 개발자들이 스핀락을 사용할 수 있도록 한다. KeAcquireInstackQueuedSpinLock과 KeReleaseInstackQueuedSponLock 함수로 동적으로 할당되는 큐드 스핀락을 사용한다. 전역 정적 큐드 스핀락이 낭비라고 판단되는 경우 캐시 관리자와 익스큐티브 풀 관리자, NTFS 등의 여러 구성 요소가 이들 락 유형을 이용한다. KeAcquireInstackQueuedSpinLockdms 인자로 스핀락 데이터 구조체의 포인터와 스핀락 큐 핸들을 가진다. 커널은 이 데이터 구조체에 락 소유권과 락이 이용가능하기를 기다리는 프로세서의 큐 등의 락 상태 정보를..

Windows , IIS 2015.07.16

큐드 스핀락(Queued SpinLock)

큐드 스핀락(Queued SpinLock) Windows Server 2008 스핀락의 확장성을 증대 시키기 위해 대부분의 상황에서 표준 스핀락이 아닌 큐드 스핀락(Queued Spinlock)형식이 사용된다. 스핀락 : http://sqlmvp.kr/140201377685 큐드 스핀락은 프로세서가 현재 소유된 큐드 스핀락을 획득하고자 할 때 프로세스는 스핀락 과 연관된 큐에 자신의 식별자를 둔다. 스핀락을 소유중인 프로세서가 스핀락을 해제할 때 프로세서는 큐에 지정도니 첫 번째 프로세서에게 락을 넘겨준다. 이 동안에 비지 스핀락을 대기하는 프로세서는 스핀락 자체의 상태가 아닌 프로세서마다의 플래그 상태를 검사한다. 큐드 스핀락은 전역 스핀락이 아닌 프로세서마다의 플래그 검사를 위해 스핀하기 때문에 두 ..

Windows , IIS 2015.07.16

스핀락(SpinLock)

스핀락(SpinLock) Windows Server 2008 스핀락은 멀티프로세서 상호배제를 달성하기 위해 커널이 사용하는 메커니즘이다. 어느 한쪽 임계 영역으로 진입하기 전에 커널은 보호 DPC 큐와 관련된 스핀락을 획득해야 한다. 스핀락이 프리(free) 상태가 아니라면 커널은 획득에 성공할 때까지 계속 시도한다. 스핀락의 이름은 커널이 락을 얻을 때까지 돌면서(spinning) 대기하는 것에서 유래 했다. 스핀락은 자신이 보호하는 데이터 구조체처럼 시스템 주소 공간에 매핑된 넌페이지드 메모리에 존재한다. 스핀락을 획득하고 해제하는 코드는 속도 측면과 하부의 프로세서 아키텍처가 제공하는 락 메커니즘을 이용하기 위해 어셈블리로 작성 된다. 스핀락은 운영체제의 스케줄링 지원을 받지 않기 때문에 해당 스레..

Windows , IIS 2015.07.16

객체구조 – 객체 유지

객체구조 – 객체 유지 Windows Server 2008 객체 유형에는 임시 객체와 영구 객체가 있다. 임시객체는 사용중인 동안만 존재하며 더 이상 필요가 없을 때 해제 된다. 영구 객체는 명시적으로 해제 될 때까지 존재한다. 대부분의 객체는 임시 객체이다. 객체에 접근하는 모든 유저 모드 프로세스는 먼저 객체에 대한 핸들을 오픈 해야 하므로 객체 관리자는 얼마나 많은 유저모드 프로세스가 객체를 사용하고 있는지 쉽게 추적할 수 있다. 추적에는 2단계가 있다. 첫 단계는 존재하는 객체에 대한 오픈 핸들 수로 제어한다. 오픈 할 때 카운터를 증가하고 닫을 때 카운터를 감소하여 0이되면 객체관리자는 자신의 전역 이름공간에서 해당 객체의 이름을 삭제한다. 두 번째 단계는 객체가 더 이상 사용되지 않을 대 객체..

Windows , IIS 2015.07.16

객체구조 – 객체 보안

객체구조 – 객체 보안 Windows Server 2008 파일을 오픈 할 때 읽기 용도인지 쓰기 용도인지 지정해야 한다. 읽기 접근 권한으로 오픈 된 파일에 쓰려고 하면 오류가 발생한다. 유사하게 익스큐티브에서 프로세스가 객체를 생성하거나 기존 객체에 대한 핸들을 오픈 할 때 프로세스는 요구 접근 권한의 집합을 지정해야 한다. 이 접근 권한은 모든 객체 유형에 적용되는 표준 접근 권한(읽기와 쓰기, 실행)이나 객체 유형마다 다른 특정 접근 권한을 요청한다. 프로세스가 객체에 대한 핸들을 오픈 할 때 객체 관리자는 프로세스의 요구 접근 권한을 전달하면서 보안 시스템의 커널 모드 부분인 보안 참조 모니터를 호출 한다. 보안 참조 모니터는 프로세스가 요청하는 접근 유형을 허용하는지 객체 보안 디스크립터가 검..

Windows , IIS 2015.07.16

객체구조 – 객체 핸들과 프로세스 핸들 테이블

객체구조 – 객체 핸들과 프로세스 핸들 테이블 Windows Server 2008 프로세스는 이름을 사용하여 객체를 생성하거나 오픈 할 때 객체에 대한 자신의 접근을 나타내는 핸들을 받는다. 객체 관리자는 이름 찾기 과정을 생략하고 객체를 직접 찾을 수 있기 때문에 객체 이름보다 객체의 핸들로써 객체를 참조하는 것이 좀더 빠르다. 프로세스는 프로세스 생성 시점에서 핸들을 상속받거나 또는 다른 프로세스로부터 복사된 핸들을 받음으로써 객체에 대한 핸들을 구할 수 있다. 익스큐티브 구성 요소와 디바이스 드라이버는 커널모드에서 실행해 시스템 메모리에 있는 객체 구조체에 접근할 수 있기 때문에 직접 객체에 접근한다. 객체 핸들은 추가적인 이점이 있다. 객체 핸들은 자신들이 참조하는 대상을 제외하면 파일 핸들과 이..

Windows , IIS 2015.07.16

객체구조 – 객체 메소드

객체구조 – 객체 메소드 Windows Server 2008 객체 유형이 사용되는 방법에 따라 어떤 객체 유형은 메소드를 명시하는 반면 메소드를 명시하지 않는 객체 유형도 있다. 익스큐티브 구성 요소가 새로운 객체 유형을 생성할 때 하나 이상의 메소드를 객체 관리자에 등록할 수 있다. 이후부터 객체 관리자는 메소드가 등록된 유형의 객체 수명 동안에 잘 정의된 시점(일반적으로 객체가 생성될 때나 어떤 식으로든지 변경될 때)에 메소드를 호출 한다. 다음 표는 객체 메소드와 호출 시점에 대한 내용이다. 메소드메소드가 호출되는 시점Open객체 핸들이 오픈 될 때Close객체 핸들이 닫힐 때Delete객체 관리자가 객체를 삭제하기 전Query Name스레드가 보조(secondary)객체 이름 공간에 존재하는 객체..

Windows , IIS 2015.07.16

객체구조 – 형식 객체

객체구조 – 형식 객체 Windows Server 2008 객체 헤더는 모든 객체에 공통적인 데이터를 포함하지만 객체 각 인스턴스마다 다른 값을 가질 수 있다. 예를 들어 각 객체는 고유한 이름을 가지며 고유한 보안 디스크립터를 가질 수 있다. 하지만 객체는 특정 유형의 모든 객체에 대해서는 항상 변하지 않는 값을 가지기도 한다. 어떤 유형의 객체 핸들을 오픈 할 때 접근 권한 집합에서 이 객체 유형에 고유한 권한을 선택할 수 있다. 익스큐티브는 스레드 객체의 경우 여러 접근 권한 중에 종료와 서스펜드 접근 권한을 제공하고 파일 객체의 경우에는 읽기와 쓰기, 추가, 삭제 접근 권한을 제공한다. 객체 관리자는 메모리 절약을 위해 이들 정적이며 객체 유형 특정적인 속성을 새로운 객체 유형을 생성할 때 한번만..

Windows , IIS 2015.07.16

객체구조 – 객체 헤더와 본체

객체구조 – 객체 헤더와 본체 Windows Server 2008 객체는 객체 헤더와 객체 본체를 가진다. 객체 관리자는 객체 헤더를 제어하고 객체를 소유하는 익스큐티브 구성요소는 자신들이 생성하는 객체 유형의 객체 본체를 제어한다. 각 객체 헤더는 객체의 각 인스턴스에 공통적인 정보를 포함하는 형식객체로 불리는 특별한 객체를 가리킨다. 그리고 옵션으로 4개까지의 서브헤더(이름 정보 헤더, 쿼터 정보 헤더, 핸들정보 헤더, 생성자 정보헤더)가 존재 한다. 객체 관리자는 객체의 유형에 관계 없이 객체를 관리하기 위해 객체 헤더에 저장된 데이터를 사용한다. 다음 표는 객체 헤더 필드 이다. 필드목적핸들 카운트객체에 대한 현재 오픈 되어 있는 핸들의 수를 관리한다.포인터 카운트각 핸들에 대해 하나의 참조를 포..

Windows , IIS 2015.07.16

익스큐티브 객체

익스큐티브 객체 Windows Server 2008 익스큐티브 객체는 일반적으로 사용자 애플리케이션을 위해 환경 서브시스템에 의해 생성되거나 다양한 운영체제 구성 요소의 통상적인 동작으로 인해 생성 된다. 예를 들어 파일을 생성하기 위해 윈도우 애플리케이션은 윈도우 서브시스템 DLL인 Kernel32.dll 에 구현된 윈도우 CreateFile 함수를 호출한다. CreateFile은 일부 유효성 검사와 초기화 이후에 익스큐티브 파일 객체를 생성하기 위해 네이티브 윈도우 서비스 NtCraeteFile을 호출 한다. 윈도우 서브시스템은 자신의 객체 집합(이 중의 많은 객체가 익스큐티브 객체와 직접적으로 대응된다.)을 익스포트 하기 위해 익스큐티브 객체를 사용한다. 예를 들어 윈도우 뮤텍스와 세마포어는 익스큐..

Windows , IIS 2015.07.16