[운영체제] 메모리 구조
사용자가 프로그램 실행을 요청하면, 운영체제는 프로그램의 정보를 메모리에 로드합니다. 운영체제는 코드, 데이터, 스택, 힙 영역을 관리하며, 필요에 따라 메모리를 할당하고 해제합니다.
코드 영역
프로그램의 소스 코드가 기계어로 저장되는 공간
CPU가 프로세스를 실행시킬 때 코드 영역의 명령어를 하나씩 실행시킨다.
제어문, 함수, 상수가 포함된다.
함수가 호출되면 내부에 있는 지역변수는 스택영역에 push된다.
데이터 영역
전역변수와 정적변수가 저장되는 공간
낮은 주소에서 부터.. 정적 변수, 초기화된 변수, 초기화되지 않은 변수가 저장된다.
BSS 영역.?
힙 영역
동적으로 할당된 변수들이 저장된다.
사용자에 의해 관리되기 때문에 사용 후 따로 해제를 시켜줘야한다.
런타임에 할당될 영역의 크기가 결정된다.
낮은 주소에서 높은 주소 방형으로 할당된다.
스택 영역
코드 영역에서 함수 호출 시 지역변수, 매개변수가 push되는 공간
함수가 종료되면 해당 공간에서 pop된다.
컴파일 타임에 할당될 영역의 크기가 결정된다.
정리
컴파일 타임에 코드 영역, 데이터 영역에 메모리가 할당되며, 힙 영역을 제외한 나머지 영역의 크기가 결정된다.
런타임에 힙 영역의 크기가 결정되며, 힙 영역과 스택 영역에 메모리가 할당된다.
다른 메모리 영역을 접근하려 할 때, cpu가 예외처리를 발생시켜 프로세스를 종료시킨다.
스택 영역에서는 함수 호출을 통해 변수들을 저장합니다. 함수 독립적으로 실행시키기 위해. 리턴 주소가 꼬일 수 있다.
레지스터 따로 사용 -> 스레드 문맥 교환시 사용하기 때문에