꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

운영체제 (OS)

프로세스와 컨텍스트 스위칭 - 프로세스 구조

gold_dragon 2021. 4. 18. 17:10

CODE 영역에 컴파일러된 코드가 저장됩니다. DATA 영역에는 변수로 선언된 데이터가 저장됩니다. STACK 영역에는 함수의 return address 값과 인자, 변수 데이터가 저장됩니다. STACK 부분은 계속 저장돼있지 않고 실행이 완료되면 차례로 삭제된 후 CODE 영역에서 다음 코드를 진행합니다. HEAP 영역은 동적으로 생성되는 데이터들이 저장됩니다.

 

정리를 하면 프로세스는 다음과 같이 구성됩니다.

TEXT(CODE): 코드

DATA: 변수/초기화된 데이터

STACK: 임시 데이터(함수 호출, 로컬 변수 등)

HEAP: 코드에서 동적으로 만들어지는 데이터

 

* stack에는 함수가 실행될 때마다 EBP 레지스터에 저장된 주소값이 상단에 들어가게 되는데, 오류가 났을 때 어느 함수에서 문제가 발생했는지 빠르게 트래킹하기 위해서 EBP 레지스터 주소값을 참조하게 됩니다.

 

* 함수의 return값은 EAX 레지스터에 들어가게 됩니다.