전체 글 289

윈도우 스레드 스케줄링 그리고 컨텍스트 스위치

스레드 스케줄링에 대해 알아보자. 컴퓨터가 여러개의 프로그램을 한번에 사용가능한 이유가 바로 스케줄링이라는 것이 존재하기 때문이다. 각 스레드의 우선 순위에 따라서 CPU사용 시간을 할당하여 처리하므로 나름 쾌적한? 컴퓨터 이용이 가능한 것이다. 윈도우는 기본적으로 우선 순위 기반의 선점형 스케줄링을 사용한다. 이렇게 처리 우선 순위가 필요한 이유는 말안해도 알겠지만.. 작업마다 중요도가 다르기 때문이다. 예를 들어, 하드웨어에서 요청하는 작업 같은 경우 다른 작업에 비해서 빨리빨리 처리를 해주어야 하므로.. 그리고 만약 우선순위가 낮은 스레드가 cpu를 사용 중인데, 더 중요한 작업의 요청이 올 경우 그 작업 부터 실행하는게 선점형이다. 그럼 이제 우선 순위에 관련된 얘기를 좀 해보자. 스레드 우선순위..

윈도우 ETHREAD와 KTHREAD 구조

커널모드에 있는 ETHREAD와 유저 모드에서 돌아가는 KTHREAD에 대해서 한번 알아보겠다. 스레드 구조체는 ETHREAD에 정의 되어 있는데, Windbg에서 dt _ETHREAD, dt_KTHREAD를 입력하면 구조체에 대한 정보를 알 수 있다. ETHREAD에서 알 수 있는 주요 정보는 아래와 같다. 그럼 이제 Windbg로 전체 구조체를 확인해보자. Tcb : 스레드 동기화 개체 CreateTime : 스레드 생성 시간 ExitTime : 스레드 종료 시간 PostBlockList : 현 스레드가 참조하는 모든 오브젝트 목록 Cid : 프로세스와 스레드 id 확인 가능 IrpList : 현 스레드에서 실행중인 IRP 리스트 StartAddress : 실제 스레드 시작 주소 Win32StartA..

윈도우 EPROCESS와 KPROCESS 구조

EPROCESS 와 KPROCESS 구조체에 대해 한번 공부해봅시다. 프로세스는 무조건 이해해야한다. 우리가 운영체제를 이용하는 이유는 무엇인가.. 작업을 하고자 함이다. 게임을 하든 문서를 작성하든 인터넷을 이용하든 이 모든 것들을 작업이라고 통칭 가능하다. 작업들을 하기 위해서 우리는 응용 프로그램들을 사용한다. 이 응용 프로그램들이 프로세스 그 자체라는 말 프로그램들을 실행시키고 관리하는게 프로세스다. 그리고 프로세스에서 실질적으로 작업하는 것은 스레드라고 했으니, 프로세스와 스레드에 대해서는 개념을 잡고 있는 것이 필요하다. EPROCESS를 통해 알 수 있는 정보들은 참으로 방대하다. 이를 통해 알 수 있는 주요 정보를 한번 알아보자. 그럼.. EPROCESS의 전체 구조체를 한번 보겠다. 필요..

Windbg 명령어 - dt(display type)

Windbg를 쓰다보면 제일 많이 쓰이는 명령이다. 구조체에서 해당 정보를 확인할 때 쓰인다. 지역 변수값, 전역 변수값, 데이터 타입과 구조체 등 많은 정보를 확인할 수 있다. 사용 옵션은 다음 과 같다. dt [-DisplayOpts] [-SearchOpts] Address/[module!]Name [-l List] [-SearchOpts] DisplayOpts은 필수는 아니지만, 출력 내용을 조절할 수 있다. 사용할 수 있는 옵션은 다음과 같다. -a[갯수] : 함께 지정한 구조체에 대한 정보의 표시 갯수를 지정한다. 갯수 지정하지 않을 시 전체를 출력 -b : 하위 구조체가 있으면 그 정보도 같이 출력한다. -c : 하나의 라인으로 구조체를 표시한다. -d : 구조체 이름과 비슷한 구조체를 함께 ..

윈도우 프로세스와 스레드 생성과 동작 원리

위 그림은 위 그림은 커널 동작 과정이다. 첫 과정인 프로세스와 스레드 관련 내용을 알아본다. 프로세스와 스레드는 작업을 처리하는 기본 단위들이다. 프로세스와 스레드의 관계에 대해 짚고 넘어가면, 우리가 실제로 하는 작업을 실행하는 것이 스레드이다. 작업의 주체라 이 말. 그리고 작업의 주체인 스레드를 위해 구성된 하나의 환경을 프로세스라고 보면 된다. 하나의 환경 즉, 프로세스에 작업의 주체인 스레드가 각자의 역할에 맞게 구성되어 있다.. 라고 정리하면 될것 같다. 우리가 윈도우에서 보는 프로세스는 하나의 응용 프로그램. 즉, 하나 이상인 스레드의 집합을 말한다. 이런 프로세스는 종류가 4가지가 있다. 1. 시스템 프로세스 커널에서만 실행되는 시스템 스레드들을 호스팅하는 프로세스로서, Ntoskrnl...

반응형