中庸
article thumbnail

Context 의 정의

the execution environment of a program.

 

Process Context

프로세스 컨텍스트는 두가지 부분으로 구성됩니다.

 

  • User Context
  • System Context

User Context 는 프로그래머가 작성한 프로그램에 의해 생성되는 Context 입니다. Code 블럭, Data and bss 블럭, 그리고 유저 프로그램에서 호출되는 함수를 위한 User Stack 블럭으로 이루어져있습니다.

 

System Context 는 커널 영역의 Context 입니다. 커널 내부의 함수를 호출하기 위한 Kernel Stack 과 PCB(Process Control Block) 로 이루어져있습니다.

 

다음 예시 코드를 살펴보며 프로세스 컨텍스트에 대해 이해해봅시다.

 

C언어로 작성된 간단한 코드

위 코드에서는 전역변수로 glob, buffer, buf 가 선언되어 있습니다. 이 중 glob 과 buf 는 초기화 되었고 buffer 는 배열의 크기만 지정되고 초기화 되지 않았습니다. 그리고 var, pid 와 같은 main 함수 내에 선언된 local variable 이 있습니다.

 

위 코드를 컴파일 하면 a.out 이라는 실행파일(executable file)이 생성됩니다. 이 실행파일은 당연하게도 binary code 로 이루어져있습니다. 이 실행파일 또한 code, data, bss, stack 블럭으로 이루어져있으며 추가로 실행파일에 대한 정보가 담긴 header 가 존재합니다. 실행파일 내에서는, bss 안의 char[] buffer[2048] 같이 초기화되지 않은 전역변수의 경우 실제 데이터 공간을 2048 바이트만큼 점유하지 않고 선언되었다는 정보만 저장이 됩니다. 이렇게 하는 이유는 실행파일의 크기를 줄여 보조기억 장치를 효율적으로 사용하기 위함입니다.

 

 자, 이제 이 실행파일을 더블 클릭하여 (Command Interpreter 를 통한 실행) 실행시키면 다음과 같이 Virtual Address Space 가 생성됩니다.

 

컴파일 결과 a.out 이 생성되었고 a.out 을 실행시키는 모습

 

생성된 Virtual Address Space 에 실행파일의 code, data, bss, stack 영역이 복사가 됩니다. 이 때, bss 안에 있던 초기화되지 않은 전역변수 char[] buffer[2048]은 Virtual Address Space 로 복사될 때, 이제는 실제로 메모리 상에 2048 bytes 의 공간을 점유합니다. 이렇게 Virtual Address Space 가 생성되면 이 프로세스는 프로세스의 5가지 상태 중 new 상태가 된 것입니다. new 상태의 프로세스는 아직 메인 메모리에 적재되지 않은 상태이므로 CPU 를 할당받아 Running 할 수 없는 상태입니다.

 

Virtual Address Space

Virtual Address Space 의 형태를 자세히 살펴봅시다. 먼저 VAS 의 (4G-1)번지 부터 (3G-1)번지까지는 커널이 위치하고 있습니다. 그리고 커널 밑의 주소부터는 stack 이 자리합니다. 시스템 프로그래밍 시간에 배웠듯 함수 내에서 함수를 호출할 때 stack 이 밑으로 커지고 return address 와 함수 호출 전 레지스터 상태들을 저장한 뒤 함수를 호출합니다.

 

그리고 bss 블럭이 data 블럭보다 윗주소에 위치합니다. 이 이유는 bss 는 초기화되면서 사이즈가 동적으로 조절될 수 있기 때문입니다.

이렇게 동적으로 조절될 필요가 있는 stack 과 bss 사이에는 heap 이라는 공간이 존재합니다.

 

이렇게 VAS 를 생성한 뒤 Ready State 의 프로세스가 되기 위해서는 실제 Main Memory 의 Physical Address 에 이 VAS 에 저장된 Process Context 들을 적재해야 합니다. 다음은 프로세스가 실제 Main Memory 의 물리적 주소에 적재된 모습입니다.

 

 

요약하면, 프로세스 컨텍스트는 두가지 부분으로 나뉩니다.

 

  • User Context (Code, Data and BSS, User Stack)
  • System Context(Kernel Stack, PCB)

소스코드를 컴파일하면, executable file 이 생성되고 이 실행파일에도 각 블럭에 대한 정보가 담겨있음.

실행파일을 실행시키면 VAS 가 생성되고 실행파일 정보가 COPY 됨. -> 5-state process model 의 new 상태

프로세스의 작업을 수행하기 위해서 Main Memory 에 로드함. (from new to ready)

profile

中庸

@짱일모

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!