본문 바로가기

Operating System/OS Basic

리눅스 프로세스 메모리 구조 및 여러 기초정보

(ORANG 참조 )

env , etc , argv , argc 또한 stack의 일부분임.



kernel : 커널영역은 사용자의 접근을 못하도록 할당해 놓았다.

OS의 시스템 코드가 로드되는 부분으로 우리가 건들 수 없다.


Stack : 프로그램에서 사용되는 각종 환경변수 , 파라미터 , 리턴값 , 지역변수 등의 정보를 담고 있다.

user space ( libc ) : 프로그램이 내부에서 사용하는 라이브러리 함수들과 관련된 공유라이브러리 파일이 적재되는 영역


Heap : 동적 할당되는 변수의 데이터가 위치하는 영역


Bss , Data : 프로그램에서 사용하는 전역변수 , 정적변수 등 각종 변수들이 실제로 위치하는 메모리 영역.
                변수가 초기화되면 데이터 영역 , 초기화되지 않으면 bss 영역에 있다.

그리고 그아래에는 Code 영역이 있다.


Code : 실제 실행되는 기계어 명령어들 , 어셈블리 코드가 쌓이는 곳이다.
            프로그램이 실행되면 코드영역에 있는 어셈블리 코드가 한줄씩 해석되며 실행

스택은 위에서 아래로 , 힙은 아래에서 위로 자라며 그 사이에 라이브러리 영역이 존재한다.

* 스택이 메모리의 높은 주소에 쌓이는 이유
   
1. 높은 주소부터 거꾸로 스택을 채워나가면 스택 영역이 커널 영역에 침범할 일이 없어진다.

    2. 힙과 스택이 중간에 공유라이브러리 영역을 두고 효율적으로 메모리 할당을 하기 위해서이다.

SFP : 바로 이전에 호출된 함수의 EBP를 저장해 두었다가 이 함수가 return 되기 전에 SFP를 참조하여 EBP를 복구시킵니다.


함수 프롤로그 & 에필로그


프롤로그


push EBP                -    이전 함수의 Stack Frame 시작점을 백업 ( 함수가 끝나고 이전 함수로 넘어갈 때 base pointer를 복원 ) , push ebp가 우리가 알고있는 SFP의 역할을 한다.


mov EBP , ESP         -     이 함수가 사용할 새로운 Stack Frame 생성


에필로그


mov ESP, EBP         -        Stack pointer를 Caller function의 stack frame 시작주소가 저장되어 있는 곳으로 변경 

pop EBP                -        EBP값을 원래대로 복구

'Operating System > OS Basic' 카테고리의 다른 글

컴퓨터의 작동 과정  (0) 2017.11.16
다양한 시스템  (0) 2017.11.16
시스템의 발전  (0) 2017.11.16
운영체제 개요 보충  (0) 2017.11.16
시분할 처리 시스템 , 분산 처리 시스템  (0) 2017.10.31