# 7.[os] 물리 메모리 관리

### 메모리 관리의 복잡성

- 과거의 일괄 처리 시스템에서는 한 번에 한 가지 작업만 처리했기 때문에 메모리 관리가 어 
렵지 않았다. 그러나 오늘날의 시분할 시스템에서는 운영체제를 포함한 모든 응용 프로그램
이 메모리에 올라와 실행되기 때문에 메모리 관리가 복잡하다.

### 컴파일러
- 컴파일러는소스코드를 컴퓨터가 실행할 수 있는 기계어로 번역한 후 한꺼번에 실행할 수 있 
도록 해주는 언어 번역 프로그램이다. **오류를 발견**하고 코드를 **최적화**하기 위해 컴파일러를 사용한다. 사용자가 소스코드를 작성하면 컴파일러는 컴파일->목적 코드와 라이브러리 연 
결->동적 라이브러리를 포함하여 최종 실행의 순서로 작동한다.


### 메모리 관리자의 정책
- **가져오기 정책**: 프로세스가 필요로 하는 데이터를 **언제** 메모리로 가져올지 결정하는 정책 
- **배치 정책**: 가져온 프로세스를 메모리의 **어떤 위치**에 올려놓을지 결정하는 정책
- 재배치 정책: 메모리가 꽉 찼을 때 메모리 내에 있는 어떤 프로세스를 **내보낼지** 결정하는 
정책

### 절대 주소와 상대 주소
- **절대주소**: 실제 물리 주소를 가리키며 **메모리 관리자** 입장에서 바라본 주소
- 상대주소: **사용자** 영역이 시작되는 주소를 **0번지**로 변경하여 사용하는 주소

### 5. 메모리 오버레이
- 프로세스의 크기가 실제 메모리(물리 메모리)보다 클 때 전체 프로세스를 메모리에 가져오는 
대신 **적당한 크기로 잘라서 가져오는** 기법이다.

### 스왑
- 메모리가 모자라서 **쫓겨난 프로세스**를 **저장**장치의 특별한 **공간**, 즉 스왑 영역에 모아두는 기법
- 스왑 영역에서 **메모리로** 데이터를 가져오는 작업은 스왑인, 메모리에서 **스왑 영역으로** 데이터를 내보내는 작업은 스왑아웃이라고 한다.

### 메모리 분할 방식
- 가변 분할 방식: 프로세스의 크기에 따라 메모리를 나누는 것
- 고정 분할 방식: 프로세스의 크기와 상관없이 메모리를 같은 크기로 나누는 것

### 외부 단편화와 내부 단편화

- 외부 단편화: 할당할 프로세스의 크기보다 **메모리에 남아 있는 조각이 작아서 할당이 불가 
능한 현상**을 말한다.

- 내부 단편화: **각 메모리 조각에 프로세스를 배치하고 공간이 남는 현상**을 말한다.

### 가변 분할 방식의 메모리 배치 방식

- 최초 배치: 메모리에서 적재 가능한 공간을 순서대로 찾다가 **첫 번째로 발견한 공간**에 프로세스를 배치하는 방법이다.
- 최적 배치: 메모리의 빈 공간을 모두 확인한 후 **적당한 크기 가운데 가장 작은 공간**에 프로세스를 배치하는 방법이다.
- 최악 배치: 최적 배치와 정반대로, 빈 공간을 모두 확인한 후 **가장 큰 공간에 프로세스를 배치**하는 방법이다.

### 조각 모음
- 단편화가 발생하면 이미 배치된 프로세스를 옆으로 옮겨 **빈 공간들을 하나의 큰 덩어리로 만드는** 것을 밀한다.


---

1. 소스코드를 한 번에 번역하지 않고 한 행씩 번역하여 실행하는 방식을 무엇이라 하는가?
  - 인터프리터 방식

2. 프로그래머가 C 나 자바로 소스코드를 작성하여 컴파일하면 일차적으로 만들어지는 코드는 
무엇인가?
  - 목적 코드

3. 컴파일할 때 코드에 라이브러리를 연결하지 않고 **코드를 실행할 때 라이브러리를 가져와 실행**하는 방식을 무엇이라 하는가?
  - 동적 라이브러리 (DLL)

4. 메모리 관리 정책 중 메모리가 꽉 찼을 때 메모리에 있는 **어떤 프로세스를 내보낼지** 결정하는 것은 무엇인가?

  - 재배치 정책

5. 32bit CPU를 사용하는 컴퓨터가 가질 수 있는 물리 메모리의 최대 크기는 얼마인가?
  - 4GB

6. 절대 주소는 실제 물리 주소로, 메모리 관리자 입장에서 바라본 주소이다. 절대 주소와 관계 
없이 사용자 입장에서 항상 0번지부터 시작하는 주소는 무엇인가?
  - 상대 주소

7. **상대 주소를 절대 주소로 변환할 때 사용하는 레지스터**는 무엇인가?
  - 재배치 레지스터

8. **프로세스의 크기가 물리 메모리보다 클 때** 전체 프로세스를 메모리로 가져오는 대신 **적당한 크기로 잘라서 가져오는 기법**은 무엇인가?
  - 메모리 오버레이

9. **메모리 영역이 부족해서 쫓겨난** 프로세스를 보관하는 **저장**장치의 특별한 **공간**은 무엇인가?
  - 스왑 영역

10. 가변 분할 방식에서 사용하지 못하는 작은 메모리 공간이 발생하는 현상을 무엇이라 하는가?
  - 외부 단편화

11. 고정 분할 방식에서 똑같이 나누어진 메모리 공간에 작은 조각이 발생하는 현상을 무엇이라 하는가?
  - 내부 단편화

12. 가변 분할 방식의 메모리 배치 방식 중 프로세스를 배치하기에 **적당한 공간 가운데 가장 작은** 공간에 배치하는 방식은 무엇인가?
  - 최적 배치

13. 가변 분할 방식의 메모리 배치 방식 중 **첫 번째**로 발견한 빈 공간에 프로세스를 배치하는 방 
식은 무엇인가?
  - 최초 배치

14. 가변 분할 방식의 메모리 배치 방식 중 **가장 큰** 공간에 프로세스를 배치하는 방식은 무엇인가?
  - 최악 배치

15. 가변 분할 방식에서 **서로 떨어진 여러 개의 빈 공간을 합치는 작업**을 무엇이라 하는가?
  - 조각모음


16. 메모리 분할 방식 중 프**로세스의 크기에 맞도록 1/2 크기로 잘라가면서 메모리를 나누어주는** 방식은 무엇인가?
  - 버디 시스템
