메모리상의 데이터 배치
프로그램 실행
메모리 전력 소비
메모리에 명령어와 데이터를 담는 것을 알게 되었습니다.
이러한 데이터를 정적데이터라고 하는데,
정적 이라는 뜻은 프로그램을 작성 할 때, 얼마나 많은 메모리가 필요한지 알고 있다는 뜻입니다.
프로그램을 실행 할 때 스택을 위한 메모리가 필요합니다.
따라서 이런 여러 데이터 영역을 충돌하지 않게 배치되어야 합니다.
메모리 관리장치(MMU)가 없을 때의 메모리 배치
이 두 배치도의 차이점은 하버드 구조에서 명령어가 별도의 메모리에 존재한다는 점입니다.
대부분의 프로그램은 동적 데이터를 다룹니다.
동적이란 프로그램을 실행하기 전까지 크기를 알 수 없는 데이터를 말합니다.
서버에서 실시간으로 변환되어 적용되어지는 데이터를 동적 데이터라고 합니다.
메모리 관리 장치(MMU)가 없는 경우
일부 프로세서는 메모리의 시작 부분이나 끝부분에 인터럽트 벡터를 저장하는 영역이나 온침 I/Q장치를 제어하기 위한 레지스터를 확보해두기도 합니다.
메모리 관리 장치(MMU)가 있는 경우
명령, 데이터, 스택이 각기 다른 물리적 메모리 페이지에 매핑되고, 필요에 따라 할당 된 크기를 변경됩니다.
하지만 여전히 가상 메모리는 같은 메모리 배치를 사용합니다.
라이브러리는 도서관을 뜻합니다. 영어의 의미로는 책들이 쌓여 있는 공간이라는 것에 초첨이 맞춰져 있습니다.
프로그래밍에서 말하는 라이브러리(library)는 책들의 집합이구나 라고 생각하시면 이해하기 쉽습니다.
이러한 책들은 각각 함수를 의미합니다.
프로그램을 여러 파일로 조각내어 작업하는 방법도 있습니다.
가장 큰 장점은 여러 사람이 한 프로그램의 여러 부분은 동시에 할 수 있다는 점입니다.
각 프로그램을 하나로 만들기 위해서는 프로그램을 링크하기 편한 형식의 매개파일(intermediate file) 로 나누고, 링커(Linker) 라는 특별한 프로그램을 사용해 여러 조각을 하나로 연결해 실행합니다.
현재 가장 유명한 매개 파일 형식은 실행과 링크가 가능한 형식(ELF,Executable and Linkable format) 입니다.
공유라이브러리를 동적 라이브러리라고 하는데, 프로그램 시작할 때 같이 로딩되어 프로그램 종료 할 때 메모리에서 해제되는 방식으로 메모리를 절약하고 스와핑을 줄여줍니다.
공유 라이브러리에서 가지고 온 명령어는 해당 라이브러리를 사용하는 모든 프로그램에서 공통적입니다.
진입점(entry point)과 런타임 라이브러리(runtime library)
진입점은 프로그램의 첫 번째 명령어가 위치한 주소를 뜻합니다.
이것이 프로그램이 실행될 때 가장 먼저 실행되는 명령어라는 뜻을 의미하지 않습니다.
런타임 라이브러리
런타임 라이브러리는 사용자 프로그램이 제대로 작동하기 위해 필요한 코드 모음입니다.
프로그램을 이루는 모든 부분이 하나로 합쳐져서 실행파일을 이룰때 런타임 라이브러리가 추가 됩니다.
이 런타임 라이브러리가 먼저 실행되고 나중에 진입점의 명령어가 실행됩니다.
[Linking]링커/링킹이란 무엇인
가(정적링킹)
동적링킹
공유라이브러리분석
정적라이브러리와 동적라이브러리