[시스템 아키텍처] 윈도우 운영체제 모델
대부분의 멀티유저 운영체제에서 애플리케이션은 OS와 분리되어 있다. OS 커널 코드는 특권이 있는 프로세서 모드에서 시스템 데이터와 하드웨어에 접근하며 실행된다. 애플리케이션 코드는 특권이 없는 프로세서 모드에서 실행되며, 제한된 인터페이스와 시스템 데이터에 대한 제한된 접근만이 가능하고 하드웨어에 직접 접근은 불가능하다...
대부분의 멀티유저 운영체제에서 애플리케이션은 OS와 분리되어 있다. OS 커널 코드는 특권이 있는 프로세서 모드에서 시스템 데이터와 하드웨어에 접근하며 실행된다. 애플리케이션 코드는 특권이 없는 프로세서 모드에서 실행되며, 제한된 인터페이스와 시스템 데이터에 대한 제한된 접근만이 가능하고 하드웨어에 직접 접근은 불가능하다...
kdnet(Kernel Debugger over Network)은 커널 디버깅을 할 때 사용하는 네트워크 기반 디버깅 프로토콜이다. Windows 가상머신을 설치한 후, WinDbg를 이용해 커널 디버깅을 할 수 있다. Windows SDK를 설치할 때 함께 설치된다. kdnet의 경로는 아래와 같다. C:\\...
WinDbg에서는 심볼 파일이 저장될 경로와, 심볼 파일을 다운로드할 서버의 주소를 직접 지정할 수 있다. 이 글에서는 WinDbg Classic이 아닌 최신의 WinDbg를 기준으로 설명합니다. WinDbg를 실행한 후, 파일 - Settings - Debugging Settings 탭으로 들어간다. 기본적으로는...
WinDbg 설치 방법에는 크게 3가지가 있다. (더 있나?) Windows SDK를 이용한 설치(WinDbg Classic) Microsoft에서 제공하는 Windows SDK를 설치하면 WinDbg Classic을 설치할 수 있다. Google에 “Windows SDK”를 검색하거나, 아래 링크에 접속한다. (Windows 11 기준)...
윈도우의 프로세스는 EPROCESS(Executive Process) 구조체로 표현된다. 여러 가지 속성뿐만 아니라 연관된 여러 가지 다른 구조체들을 가리키는 포인터를 갖는다. 예를 들어, ETHREAD(Executive Thread) 구조체로 표현되는 하나 또는 그 이상의 스레드를 가지고 있다. EPR...
윈도우 API는 프로세스 생성을 위한 여러 함수를 제공한다. 프로세스를 생성하는 프로세스와 동일한 접근 토큰으로 프로세스의 생성을 시도하는 CreateProcess 다른 토큰이 필요한 경우 사용하는 CreateProcessAsUser 이외 CreateProcessWithToken, CreateProcessAsL...
상호 배타적인 집합을 효율적으로 표현하기 위한 자료구조?이다. 서로 다른 두 개의 집합을 병합하는 union_find + 원소가 어떤 집합에 속해 있는지 판단하는 find로 구성된다. parent 배열에는 각 원소의 최상위 부모를 표현한다. Basic find 함수 int find(int parent[], int k) { ...
에라토스테네스의 체는 고대 그리스의 수학자 에라토스테네스가 만들어 낸 소수를 찾는 방법으로, 체로 치듯이 수를 걸러낸다고 하여 ‘에라토스테네스의 체’라고 부른다. 방법 1부터 원하는 숫자 범위까지 숫자를 쓴다. 소수도 합성수도 아닌 1을 지운다. 다음에 만나는 2를 제외한 2의 모든 배수들을 지운다. 4,6,8,… 다음에 만나는 3...
일반적인 큐는 연산의 결과로 먼저 들어간 데이터가 먼저 나오는 선입선출 구조이지만, 우선순위 큐는 들어간 순서에 상관없이 우선순위가 높은 데이터가 먼저 나온다. 두 가지 연산을 가진다. enqueue: 우선순위 큐에 데이터를 삽입하는 행위 dequeue: 우선순위 큐에서 데이터를 꺼내는 행위 배열로 ...
피보나치 수를 K로 나눈 나머지는 항상 주기를 갖는다. 주기의 길이를 P라고 하면, N번째 피보나치를 M으로 나눈 나머지는 N%P번째 피보나치 수를 M으로 나눈 것과 같다. 주기는 \( M=10^k (k>2) \)일 때 항상 \( 15*10^{k-1} \) 이다. \( n(n\le1,000,000,000,000,000,0...