프로세스 구조 Process

2020. 2. 19. 22:02컴퓨터공학기초 및 이론/운영체제

Process 구조 > STACK, HEAP, DATA, CODE 로 크게 나뉘어져있다

CODE : 프로그래밍 코드 텍스트가 들어가는 메모리 영역(컴파일 된 결과물)

DATA: 변수의 메모리 영역이 저장되는 공간 (코드에서 함수 선언시에 변수가 가리키는 메모리 공간), 전역변수, 초기화 된 데이터

DATA 는 BSS와 DATA로 나뉜다. 

BSS segment : 초기화 되지 않은 전역변수

DATA segment: 초기 값이 있는 전역변수

STACK: 함수 내 지역변수(재선언 및 재할당이 되는)혹은 인자의 메모리 주소가 위치하는 공간, Return Address값을 STACK에 저장한다. 임시 데이터. (stack frame) 

데이터가 STACK에 추가 될수록 STACK의 주소값은 점점 작아진다.

HEAP: 동적 메모리 할당(C의 malloc, Node나 JVM의 힙메모리), 코드에서 동적으로 만들어지는 데이터

STACK 자료구조의 원리 => 선입 후출, 들어간 순서의 반대로 나간다.  함수 안에서 함수를 호출할 때, return이 일어나는 동기식 함수에 대해 STACK과 같은 원리로 실행된다. 따라서, PROCESS의 STACK 메모리에서는 return address와 함수를 실행하며 STACK에 쌓인 메모리를 저장된 순서의 반대로 실행하고 비워진다.

SP(Stack Pointer) : stack frame 메모리 주소를 가리키는 포인터, 레지스터의 메모리 공간에는 stack의 최상단 메모리 주소를 갖고있으며 stack pointer는 해당 메모리 주소를 가져다 쓴다. STACK에서 새로운 항목이 추가되거나 데이터가 제거되면 PUSH와 POP을 통해 주소값이 증가하거나 감소한다.

EAX 레지스터 : 함수의 반환 '값'을 보관한다.

PC(Program Counter): TEXT(CODE)가 선언된 메모리 주소에서 SP 의 return address에 맞춰서 해당 주소값으로 프로그램 코드를 진행하게 하는 것. 정확히는 중앙 처리 장치 내부의 레지스터 중 하나로 다음에 실행될 명령어의 주소를 가지고 있어 실행할 기계어 코드의 위치를 지정한다. 명령어 포인터라고 표현하기도 한다.