본문 바로가기
운영체제

운영체제 프로세스 구조

by PudgeKim 2020. 11. 25.

프로세스는 Stack, Heap, Data, Code 이렇게 4부분으로 이루어져 있다.

그 중 Stack에 대해 자세히 설명하자면 아래와 같이 간단한 C언어 코드가 있다고 가정해보자.

위 코드로 프로세스의 Stack 부분에서 어떤 과정을 거치는지 알아보자.

우선 Stack은 코드에서 함수에 관한 부분을 처리하는 곳이고 Code는 컴파일한 코드를 처리하는 곳이다. 아래 그림은 Code부분의 일부분이다. (그림은 예시를 위해 C언어 코드로 써져있지만 기계어라고 생각해야한다.)

int res부분은 그저 선언하는 부분이니까 넘어가고 res= add(1,2)부분을 만나면 함수에 관한 처리를 해야하니 Stack부분에서 처리를 하게 된다.

그럼 Stack부분이 아래 그림과 같이 된다. (Stack을 거꾸로 뒤집었다고 생각해야한다.)

대충 위와 같은식이다. eax란 레지스터 종류의 하나로 add(1, 2)의 값을 저장했다가 res변수에 전달해준다.

return address란 main함수에서 코드가 실행되다가 add함수를 만나면 Stack부분에서 처리를 하게되는데 이후에 main함수 어디부터 시작해야되는지를 알아야 하므로 return address가 필요하다.

함수가 끝나면 위와같이 stack상단부터(뒤집은 스택이므로 아래부터) pop되고 return address를 만나게 되면
main 함수로 다시 돌아가서 코드를 마저 실행하게 된다. (stack부분에서 ebp라고 최상단 함수의 주소를 가지고 있는 레지스터도 있지만 생략하였다.)

 

프로세스 구조중의 Data부분은 주로 전역변수가 관리되는 영역인데 초기화되지않은 전역변수는 BSS란 영역에,
초기화된 전역변수는 Data영역에서 관리된다.