- 이전 포스팅에서 배운 프로세스 구조에 대해 복습해보자.
프로세스 구조
- 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) 스택과 스택프레임의 차이
- 스택은 자료구조 전체를 의미하고, 스택 프레임은 스택에 할당된 메모리 블록을 의미한다.
'컴퓨터공학기초 개념 > 운영체제' 카테고리의 다른 글
16. 프로세스 구조(4) - BSS와 Data (0) | 2021.04.15 |
---|---|
15. 프로세스 구조(3) - Heap (0) | 2021.04.14 |
13. 프로세스 구조(1) (0) | 2021.04.09 |
12. 인터럽트 동작방식 (0) | 2021.04.08 |
11. 인터럽트의 종류 (0) | 2021.04.07 |
댓글