본문 바로가기
컴퓨터공학기초 개념/운영체제

14. 프로세스 구조(2) - Stack

by devraphy 2021. 4. 13.

 

- 이전 포스팅에서 배운 프로세스 구조에 대해 복습해보자. 

 

프로세스 구조

  • text(= code): 소스코드가 올라가는 영역
  • data: 전역변수, 초기화된 데이터가 올라가는 영역 (프로그램이 종료되면 소멸)
  • stack(= stack frame): 임시 데이터(함수 호출, 로컬변수 등 호출이 완료되면 소멸)
  • heap: 코드에서 동적으로 만들어지는 데이터 (동적 메모리 할당 - 개발자가 직접 할당)

 

 


1. 스택에 대한 이해

  • 프로세스에 대한 구조를 이해하기 위해서 필수적으로 이해해야 하는 부분 중 하나는 Stack 자료구조다.
  • 스택은 프로세스의 메모리 영역 중 하나로, 복잡한 함수 호출과정을 효과적으로 처리 및 관리하는 역할을 한다.
  • 스택의 특징은 LIFO(= Last In, First Out)인데, 데이터가 밑에서부터 쌓이는 형식으로 가장 나중에 들어온 데이터가 가장 먼저 나가는 형식이다.  

 

잠깐! 그래서 왜 Stack이 사용되는가? 

  • 스택이 복잡한 함수 호출과정을 효과적으로 처리하는 역할을 하기 때문에 사용한다고 했다.
  • 하지만, 정확하게 어떤 의미인지 이해가 가지 않는다. 왜 그럴까?

ex) function 1번 안에 function 2번이 있고, function 2번 안에 function 3번이 있다고 가정해보자. 

function 1번을 실행하면, 최종적으로 function 3번부터 실행이 완료된 후 function 2번이 실행되고, 가장 나중에 function 1번이 실행될 수 있다. 이 과정을 생각해보면 가장 깊은 곳에 있는 function 3번이 가장 먼저 실행되는 구조를 갖는다. 이 체계를 가장 잘 구현 해놓은 자료구조가 스택이다. 

 

  • 스택의 동작뿐만 아니라 프로세스에서의 전반적인 동작을 이해하기 위해 필요한 컴퓨터 구조 개념들이 있다.

 

 

a) PC(= Program Counter)

  • 다음에 실행할 코드(= 명령어)의 주소를 가리키는 레지스터

 

 

b) EAX(Extended Accumulator Register)

  • 산술(= 사칙연산) 또는 논리연산을 수행하며 함수의 반환값이 저장되는 레지스터
  • 함수의 반환값이 저장되기 때문에, 함수의 성공/실패 여부를 쉽게 확인할 수 있다.

 

 

c) ECX(Extended Counter Register)

  • 반복문 또는 반복 명령어 사용 시 반복 횟수가 저장되는 레지스터

 

 

d) ESP(Extended Stack Pointer) 또는 SP

  • 스택 또는 스택 프레임 제일 아래의 주소를 가리키는 레지스터
  • 현재 실행되고 있는 함수의 위치(스택의 위치)를 보여준다. (수시로 변동됨) 
  • Push, Pop 명령에 따라 

 

 

e) EBP(Extended Base Pointer)

  • 스택 또는 스택프레임의 최상단 주소를 가리키는 레지스터 (기준점 역할)
  • 함수를 실행하다가 문제가 발생하는 경우, 문제 발생 지점을 쉽게 파악하고 문제가 발생되지 않은 이전단계로 돌아갈 수 있도록 현재 실행되고 있는 함수의 시작위치(=스택의 위치)를 기록한다. 

 

 

f) ESI / EDI (Extended Source / Destination Index)

  • ESI는 데이터를 조작하거나 복사할 때 소스 데이터의 주소가 저장되는 레지스터 (출발지 = 복사가 된 장소)
  • EDI는 데이터를 복사할 때, 목적지의 주소가 저장되는 레지스터 (목적지 = 복사가 될 장소)

 

 

f) 스택과 스택프레임의 차이

  • 스택은 자료구조 전체를 의미하고, 스택 프레임은 스택에 할당된 메모리 블록을 의미한다.

 

 

댓글