운영체제(OS) - 8. 프로세스 구조

Walker·2021년 10월 17일
0

운영체제(OS)

목록 보기
8/14

1. CODE 영역

컴파일 된 바이너리 Code들이 저장되는 메모리 영역

2. DATA 영역

선언된 (전역)변수들(함수 내 변수는 제외)이 저장되는 메모리 영역

  • 초기화 되지 않은 값(int num;)은 BSS 영역 / 초기화 된 값(int num = 1;)은 DATA 영역

3. STACK 영역

함수(func(1,2))를 실행 후에 그 다음 실행할
함수(print(c))의 주소(return address)를 가장 먼저 메모리에 저장한다.
이후 사용한 (지역)변수들을 저장하고 사용후 메모리에서 지운다.

4. HEAP 영역

동적으로 생성될 필요가 있는 데이터를 저장하는 공간(C의 mallock())

  • 데이터의 주소값은 STACK 영역에 쌓이고 실제 데이터(동적)는 HEAP에 쌓임

  • 변수에 대한 메모리 크기를 미리 할당하고 이후에 실제 데이터를 넣음

[C 코드를 통한 예시]

STACK 영역은 이름 그대로 자료구조 Stack 형태로 실행되므로
가장 늦게 추가된 data를 먼저 처리하고 메모리에서 pop(제거)한다.

<사용 및 제거 순서>
temp > data > 0005h(return 0;) > argv > argc > 0006h(main 다음 종료 default 함수)

Program Counter(PC) : 컴파일 된 코드 한줄한줄의 주소를 가르키는 레지스터
Stack Pointer(SP) : 함수가 실행될 때 STACK의 가장 최상단(다음 실행) 주소를 가르키는 레지스터

C = func(1,2)는 기계어로는
func() : 실행 / c=func() : 실행값 할당 > 2개로 분리됨

함수가 실행되면 일단 함수 실행 후 실행되는 다음 코드에 대한 주소가
return address에 저장되고 이후 들어온 인자 > 지역변수 등의 순서로 stack에 쌓인다

  • EBP : 함수 실행중 문제가 생겼을 때 문제 point를 추적하기 위해
    SP값을 추가로 저장해두는 레지스터

  • EAX : 함수의 return 값을 저장해두는 레지스터

profile
I walk slowly, but I never walk backward. -Abraham Lincoln-

0개의 댓글