1. 메모리상의 데이터 배치
- 메모리에는 명령어와 데이터가 존재한다.
- 데이터는 정적 데이터와 동적 데이터로 구분할 수 있다.
- 정적데이터는 프로그램 만들 때 크기를 알 수 있는 데이터들이고 동적 데이터는 프로그램 실행 전까지는 크기를 알 수 없는 데이터이다.
크기 고정
- text: 실행 코드(명령어들)
- data: 전역변수(정적 데이터들)
동적으로 크기 변경
- heap: 프로그램 실행중 동적으로 할당되는 메모리(동적 데이터)
- stack: 함수를 호출할 때 임시 데이터 저장 장소(함수 매개변수, 복귀 주소 및 지역 변수)
- 힙과 스택을 서로 충돌하지 않게 하는 것이 중요하다.
2. 프로그램 실행
- 어떤 함수는 여러 프로그램에서 쓸 만큼 유용한 경우가 존재한다.
- 이런 함수를 프로그램 만들 때마다 매번 새로 작성하기 보다는 관련 함수를 한데 모아서 라이브러리로 만들면 프로그램 작성시 편하다.
- 또한 프로그램을 전부 한 파일에 저장하기 보다는 여러 파일로 나누는 것이 동시개발을 가능하게 해줘 편하다.
- 링커: 여러 조각으로 나눠진 프로그램 조각들을 하나로 엮는 프로그램.
- 정적 링크: 라이브러리를 파일로 간주하여 프로그램에서 함수를 사용할때마다 각자 직접 연결해 실행파일을 만드는 링크방식.
- 이러한 정적링크 방식은 같은 라이브러리 코드가 여러 실행 파일(프로그램)에 반복적으로 들어가서 귀중한 메모리를 낭비한다는 단점이 존재한다.
- 동적 링크: 공유 라이브러리를 사용하는 링크방식으로 MMU(메모리 관리 장치)가 여러 프로그램이 같은 라이브러리를 공유할 수 있도록 한다.
- 진입점: 프로그램의 첫 번째 명령어가 위치한 주소.
- 런타임 라이브러리: 메모리 설정을 책임지는 라이브러리로 프로그램의 스택과 힙영역을 설정하고 정적 데이터의 초깃값도 설정한다. 프로그램 메모리의 여러가지 환경설정을 하는 라이브러리로 이해하면 된다. 프로그램이 하나로 합쳐질때 자동으로 추가된다.
- 실제 프로그램이 실행될 때는 가장 먼저 실행되는 명령어가 런타임 라이브러리의 명령어이고 그 다음으로 진입점의 명령어가 실행된다.
3. 메모리 전력 소비
- 데이터를 메모리에서 이리저리 옮기려면 전력이 소비된다.
- 전력 소비와 성능 사이의 균형을 잡는 일은 아주 어렵지만 중요한 작업이다.
4. 출처: https://blog.yevgnenll.me/os/process-concepts-process-state-and-managed-in-memory
'CS' 카테고리의 다른 글
락, 트랜잭션과 작업크기, 락대기, 교착상태 (0) | 2022.02.22 |
---|---|
동적 메모리 할당, 더 효율적인 메모리 할당, 가비지 컬렉션, 이중 연결 리스트 (0) | 2022.02.16 |
파동에 올라타라, 범용직렬버스, 네트워킹 (0) | 2022.02.09 |
시간표현과 상태기억 (0) | 2022.01.29 |
문자를 사용한 수 표현, 색을 표현하는 방법 (0) | 2022.01.21 |