Process와 Thread

2020. 5. 3. 01:40OS/Windows

Windows의 Process와 Thread에 대해서 알아보도록 하겠습니다.

 

먼저 Process에 대해 알아보도록 하겠습니다.

 

Process란 우리가 흔히 말하는 프로그램이 실행되었을 때, 프로그램과 관련된 정보들을 담고 있는 컨테이너라고 볼 수 있습니다.

 

Process가 담고 있는 정보들은 다음과 같습니다.

1. 가상 주소 공간 : Process가 사용할 수 있는 가상 메모리 주소 공간.

   1-1. Process 별로 가상 주소 공간을 가지고 있습니다.

   1-2. x86은 4GB, x64는 16TB 크기를 가집니다.

 

2. 실행 가능한 프로그램 : 코드와 데이터로 이루어져 있으며, 이 정보들은 실행되는 순간에 Process의 가상 주소 공간에 매핑.

   2-1. 프로그램(확장자 exe)을 PE View로 열어 보시면 알아보기 힘든 문자들로 이루어진 것을 보실 수가 있는데, 이 정보들이 메모리에 매핑이 되고, CPU는 이 정보들 중 코드 영역의 정보들을 가져가서 프로그램을 실행시킵니다.

 

3. Handle List(Resource) : 뮤텍스, 세마포어, 파일 등 Process에서 사용하기 위해 오픈한 Object들에 대한 Handle 값들.

   3-1. Process의 모든 Thread들이 내부에서 이 Object들에 접근하여 동기화 처리도 하고, 파일 정보도 읽어오는 등의 작업을 합니다.

 

4. Access Token : 해당 Process와 연관되어 있는 사용자와 보안 그룹, 특권, UAC, 세션 등의 정보들.

 

5. PID : Process ID라고 부르며, Process를 고유하게 식별하기 위해 사용.

 

6. Thread : 실제로 프로그램을 구동시키는 주체.

   6-1. Process는 최소 한 개의 Thread가 있어야 동작합니다.

 

다음으로 Thread에 대해 알아보도록 하겠습니다.

 

Thread란 프로그램을 실행시켰을 때, 실제로 일을 하는 주체입니다. Windows에서 스케줄링 시에 Thread들을 스케줄링합니다.

 

Thread가 담고 있는 정보들은 다음과 같습니다.

1. CPU 레지스터 정보 : 프로세서의 상태를 나타내는 레지스터 정보.

   1-1. CPU는 레지스터 정보를 보고 어느 부분을 실행시켜야 하는지, 관련된 정보들은 무엇인지 알 수 있게 됩니다.

 

2. 스택 정보 : 유저 스택과 커널 스택 정보.

   2-1. 유저 스택은 유저 모드에서 사용되며, 커널 스택은 커널(OS, Driver)에서 사용됩니다.

 

3. TID : Thread ID라고 부르며, Thread를 고유하게 식별하기 위해 사용.

 

4. Access Token : Thread도 Process와 마찬가지로 보안과 관련된 컨텍스트를 가짐.

 

Windows에서 스케줄링이 일어날 시에 컨텍스트 스위칭이 일어나는데, 이것을 Thread Context가 변경이 되었다고 합니다.

 

Thread Context에는 다음 정보들이 포함되어 있습니다.

1. CPU 레지스터, 스택, 저장 영역.

 

위에서 설명드린 Process와 Thread는 Windows에서 구조체로 관리하고 있습니다.

 

이상으로 Process와 Thread에 대해 알아보았습니다.

'OS > Windows' 카테고리의 다른 글

PE File Format Header 요약  (0) 2020.05.09