IT Japan

프로세스와 스레드 본문

IT/Windows

프로세스와 스레드

swhwang 2016. 7. 29. 15:01
반응형

Windows OS의 작동 상태를 확인하는 경우, 일반적으로 "작업 관리자"를 시작하는 것이다 (관련 기사 참조). 이 작은 도구는 현재 Windows 시스템에서 실행중인 프로세스와 서비스의 작동 상황, 메모리 사용량, 시스템 부하 및 동작 상황 자원의 이용 상황 등이 적정한지 여부를 판단하기위한 다양한 정보가 표시되어있다. 이번에는 작업 관리자에서 표시되는 다양한 항목 중 '과정'과 '스레드'에 주목하고 Windows OS 안을 보자.


실제로 모든 프로세스가 항상 "실행"중이라는 것은 아니고 대부분의 경우 "실행"에서 대기하고있는 것이다. 왼쪽 상단에있는 "CPU 사용률"의 표시가 100 %가되거나 심지어 그것이 계속 이어지고있다라고하는 경우는 거의 없을 것이다. Windows OS의 경우, 사용자의 입력을 기다리는거나 장치에 대한 입출력 요청 완료 대기 (트리거링) 이벤트 대기 등으로되어있는 것이 많다.

그럼 왜 이렇게 많은 프로세스가 있는가하면 프로세스가 프로그램의 실행 단위로되어 있기 때문이다. 여러 가지 이유로 인해 하나의 응용 프로그램은 보통 하나 혹은 여러 개의 실행 파일 (프로그램 일반적으로 .EXE 파일)을 조합하여 구성되어있다. 따라서 사용자가 실행중인 응용 프로그램이 증가하거나 시작 메뉴와 서비스로 많은 응용 프로그램을 등록하고 그만큼 실행중인 프로세스의 숫자도 늘어난다. 사용자가 명시 적으로 설치 한 것으로 않고도 응용 프로그램 설치 또는 업데이트 등에 따라 모르게 설치되는 것도 적지 않다. 따라서 오랫동안 Windows 시스템을 사용하면 매우 많은 프로세스가 작동하게된다.


프로그램의 실행 단위 "프로세스"

"프로세스 (process)"는 Windows OS에서 프로그램의 실행 단위이다. 사용자가 어떤 응용 프로그램을 시작하면 그것은 실제로는 하나 이상의 프로세스가 시작된다. 프로세스의 실행 이미지 및 데이터 등은 보통 "~ .EXE"라는 파일에 저장되어있다. 프로세스를 시작하려고하면 .EXE 파일에 저장되어있는 실행 코드와 데이터 리소스 등의 이미지가 메모리에 전개되어 그것을 호출하도록되어있다 (실제 메모리에 어떻게 전개 되는지에 대해서는 다음 설명 예정).

실행중인 프로세스와 실행 파일과 대응이나 각 프로세스 ID 프로세스 설명, 사용중인 메모리 크기, 동작 상태, 우선 순위, 사용중인 리소스 핸들의 수 등의 정보는 작업 관리자의 "프로세스 "탭의 내용을 보면 알 수있다. Windows 8 / Windows Server 2012 이후의 작업 관리자의 경우에는 "프로세스"탭에서는 개요 만 표시되고 자세한 정보는 '자세히'탭에서 확인하도록되어있다.

실제 프로세스의 상태를 다음 화면으로 보여 둔다. 이것은 "프로세스"탭을 선택 후 [보기] 메뉴에서 열 선택에서 실행중인 프로세스에 대한 다양한 정보를 표시시킨 곳이다.


프로세스의 시작 순서

프로세스가 처음에 어떻게 만들어 실행을 시작하거나 그리고 어떻게 끝나는가의 순서는 다음과 같다.

1. 실행 파일의 판정
프로세스는 Win32의 "CreateProcess ~ () '라는 일련의 API를 사용하여 시작된다. 이 API가 호출되면 Windows OS 커널은 .EXE 파일을 열고 그 종류를 판정하여 무엇을 실행할 것인지를 결정한다. 일반적인 .EXE 형식의 프로그램 파일이라면 그대로 실행하지만, 그대로 수행 할 수없는 경우이를 실행하기위한 보조적인 프로그램을 시작하고 처리를 의뢰한다. 다음에 그 예를 적는다.

.BAT / .CMD → cmd.exe에서 처리
.COM / .PIF → ntvdm 처리
.cpl → rundll.exe 처리
64bit Windows에서 Win32 프로그램을 실행하려고하는 경우 → WOW (Windows on Windows)에서 처리
32bit Windows에서 Win16 프로그램을 실행하려고하는 경우 → ntvdm.exe 처리
2. 프로세스의 실행 환경 준비
실행 프로그램 파일의 이미지 (.EXE 파일)이 결정되면 그것을 실행하는 데 필요한 메모리 (코드, 데이터, 힙 등)의 할당 및 프로세스 데이터의 구조 (전술 한 프로세스에 대한 자세한 표에서 나타낸 바와 같은 데이터를 유지하기위한 구조) 할당, 프로그램 이미지의로드 (메모리에 매핑) 등을 실시한다.

3. 스레드의 준비
프로세스는 프로그램의 실행 단위 (프로세스 자원 할당 단위)이지만 실제로 CPU 코어에서 실행되는 것은 후술하는 "스레드"이다. 여기에서는 먼저 실행 스레드 환경 (스레드 컨텍스트)를 작성하여 실행 큐에 스레드를 등록하고 실행의 시작을 기다린다.

CPU 할당 실행 단위 "스레드"

하나의 프로세스에서 하나 또는 여러 개의 스레드가 포함되어 있으며,이 thread가 실제로 CPU에서 실행되는 단위이다. 동일한 프로세스 내 쓰레드는 동일한 코드와 데이터, 힙 DLL 같은 메모리 공간을 공유하고 각 스레드가 그 데이터 등을 참조하면서 함께 작동하도록되어있다.

여러 스레드가 동시에 병행 동작시키는 것이 가능하다. 이렇게하면 전체 응용 프로그램이 원활하게 수행 될뿐만 아니라 CPU가 가지는 멀티 코어 기능을 잘 끌어낼.

예를 들어 워드 프로세싱 응용 프로그램이라면 사용자의 입력을 받아들이고 그것을 내부 편집 버퍼에 반영하고 그 버퍼를 참조하여 화면에 표시하거나 문서를 인쇄하거나 검색과 치환을하거나 파일을 입력 출력하거나 같은 작업 (준비가 있다면) 동시에 진행하는 것이 가능하다 (실제 응용 프로그램에서 더 세밀하게 처리를 분산시키고있다). 또한 대규모 계산 어플리케이션의 경우 CPU 코어의 수만큼 스레드를 동시에 실행하여 계산을 진행하면 CPU가 가지는 계산 능력을 모두 활용할 수있다. 프로세스를 만들 때 먼저 하나 초기 스레드가 생성되지만, 두 번째 이후의 스레드를 사용할지 여부는 응용 프로그램 나름이다.

스레드를 생성하면 해당하고 "스레드 컨텍스트"이 생성된다. 이 중에는 소속 프로세스 정보와 스택 포인터, CPU 레지스터, 예약 정보 등 각 스레드에 필요한 정보가 저장되어있다.

반응형
Comments