-
프로그램이 실행된 후 메모리의 상태
- 커널, 스택, 여유 공간, 힙, 데이터, 코드 등의 영역이 존재한다.
- 스택: 메모리의 상위 영역에 위치하며, 함수 호출 시 사용되는 지역 변수, 함수의 인자, 함수의 반환 주소 등이 저장된다.
- 힙: 메모리의 하위 영역에 위치하며, 동적 할당된 메모리가 저장된다.
- 데이터: 전역 변수, 정적 변수, 문자열 등이 저장된다.
- 코드: 프로그램 코드가 저장된다.
-
모든 프로그램은 예외 없이, 코드 영역의 시작주소가 0x400000이다. 이는 동시에 여러 프로그램을 실행해도 동일하다.
- 이는 운영체제의
가상 메모리를 사용하기 때문으로, 모든 프로그램은 자신이 전체 메모리를 독점하는것 처럼 착각하게 된다.
-
이로인해 링커는 실제 데이터가 물리 메모리의 어디에 위치하는지 알 필요가 없어진다.
-
운영체제는 이러한 가상메모리 관리를 위해 메모리 페이지(memory page) 단위로 매핑한다.
- 이렇게 기록된 자료를 페이지 테이블(page table)이라고 한다.
-
다시 정리하자면,
- 모든 프로세스의 가상 메모리는 표준화되어있고, 동일한 크기를 가진다.
- 가상 메모리의 각 영역의 크기는 다를 수 있어도, 배치되는 순서는 동일하다(스택, 힙, 데이터, 코드).
- 실제 물리 메모리와 가상 메모리의 크기는 무관하다.
- 물리 메모리에는 스택, 힙, 데이터, 코드 등이 구분되지 않는다.
- 모든 프로세스는 자신만의 페이지 테이블을 가진다.