📌 메모리(기억장치)의 종류

- 메모리 구조는 I/O Bottleneck을 해소하기 위해 계층구조를 가지게 됨
- 레지스터
- HW(CPU)가 관리
- 컴퓨터의 프로세서 내에서 자료를 보관하는 아주 빠른 기억 장소
- 일반적으로 현재 계산을 수행중인 값을 저장하는 데 사용
- 캐시
- HW가 관리
- 데이터나 값을 미리 복사해 놓는 임시 장소
- 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용
- 메인 메모리
- SW(OS)가 관리
- 메인메모리 = 주기억장치 = RAM (Random Access Memory)
- RAM은 DRAM과 SRAM이 있는데 주기억장치는 주로 DRAM을 의미 (SRAM은 캐시나 레지스트리)
- 컴퓨터의 CPU가 현재 처리중인 데이터나 명령만을 일시적으로 저장하는 휘발성 메모리
- 보조기억장치
- SW가 관리
- 사용자가 사용하고자 하는 데이터와 프로그램을 저장
- 전원을 끄더라도 저장된 데이터나 정보가 날아가지 않는 비휘발성 메모리
- 하드디스크, SSD 등
- 메모리(기억장치) 계층구조

📌Address Binding

- Compile time binding
- 프로세스가 메모리에 적재될 위치를 컴파일러가 알 수 있는 경우
- 위치가 변하지 않음
- 프로그램 전체가 메모리에 올라가야 함
- Load time binding
- 메모리 적재 위치를 컴파일 시점에서 모르면, 대체 가능한 상대 주소를 생성
- 적재 시점(Load time)에 시작 주소를 반영하여 사용자 코드 상의 주소를 재설정
- 프로그램 전체가 메모리에 올라가야 함

- Run time binding
- Address binding을 수행시간까지 연기
- 프로세스가 수행 도중 다른 메모리 위치로 이동할 수 있음
- HW의 도움이 필요
- MMU(Memory Management Unit)
- 대부분의 OS가 사용

📌 Dynamic Loading
📌 Swapping
- 프로세서 할당이 끝나고 수행 완료 된 프로세스는 swap-device로 보내고 (Swap-out)
- 새롭게 시작하는 프로세스는 메모리에 적재 (Swap-in)

✨ Fragmentation (단편화)
- Internal Fragmentation (내부 단편화)
- Partition의 크기가 Process의 크기보다 클 때 메모리 낭비


- External fragmentation (외부 단편화)
- 남은 메모리의 크기가 프로세스의 크기보다 크지만, 연속된 공간이 아니여서 메모리가 낭비

📌 Memory Allocation
- Continuous Memory Allocation (연속할당)
: 프로세스 (Context)를 하나의 연속된 메모리 공간에 할당하는 정책
ex. 프로그램, 데이터, 스택 등
- 메모리 구성 정책에서 고려해야 할 요소
- 메모리에 동시에 올라갈 수 있는 프로세스 수 (Multiprogramming degree)
- 각 프로세스에게 할당되는 메모리 공간 크기
- 메모리 분할 방법
- Uni-programming
- 하나의 프로세스만 메모리에 존재(Multiprogramming degree = 1)
- 가장 간단한 메모리 관리 기법
- 문제점 1
- 프로그램의 크기가 메모리 크기보다 클 경우에는?
- 해결법
- Overlay structure
- 메모리에 현재 필요한 영역만 적재
- 사용자가 프로그램의 흐름 및 자료구조를 모두 알고 있어야 함
- 문제점 2
- 커널 보호
- 해결방법
- 경계 레지스터 (boundary register 사용)

- Uni-Programming은 Low system resource utilzation과 Low system performance의 문제점을 가지게 됨.
이를 해결하기 위해 Multi-programming이 존재
- Fixed Partition (Multi Programming)
- 메모리 공간을 고정된 크기로 분할, 미리 분할되어 있음
- 각 프로세스는 하나의 partition(분할)에 존재
(Process : Partition = 1 : 1)
- Partition의 수 = K (Multiprogramming degree = K)
- 자료구조의 예

- 커널 및 사용자 영역 보호

- Summary
- 고정된 크기로 메모리에 미리 분할
- 메모리 관리가 간편함 (Low Overhead)
- 시스템 자원이 낭비 될 수 있음
- Internal/External Fragmentation
- Variable Partition (Multi Programming)
- 초기에는 전체가 하나의 영역
- 프로세스를 처리하는 과정에서 메모리 공간이 동적으로 분할
- 내부단편화가 발생하지 않음
- 배치 전략 (Placement strategies)
1. First-fit (최초 적합)
- 충분한 크기를 가진 첫 번째 Partition을 선택
- Simple and low overhead
- 공간 활용률이 떨어질 수 있음
2. Best-fit (최적 적합)
- Process가 들어갈 수 있는 partition 중 가장 작은 곳을 선택
- 탐색 시간이 오래 걸림 (모든 partition을 살펴봐야 함)
- 크기가 큰 partition을 유지 할 수 있음
- 활용하기에 너무 작은 크기의 partition이 많이 발생
3. Worst-fit (최악 적합)
- Process가 들어갈 수 있는 Partition중 가장 큰 곳 선택
- 탐색 시간이 오래 걸림 (모든 partition을 살펴봐야 함)
- 작은 크기의 partition 발생을 줄일 수 있음
- 큰 프로세스에게 필요한 큰 크기의 partition 확보가 어려움
4. Next-fit (순차 최초 적합)
- 최초 적합 전략(First-fit)과 유사
- State table에서 마지막으로 탐색한 위치부터 탐색
- 메모리 영역의 사용 빈도 균등화
- Low overhead
- 공간 통합 (Coalescing holes)
- 외부 단편화를 해결하기 위한 방법으로, 인접한 빈 영역을 하나의 partition으로 통합
- 프로세스가 메모리를 release하고 나가면 수행
- Low overhead

- 메모리 압축 (Storage Compaction)
- 외부 단편화를 해결하기 위한 방법으로, 모든 빈 공간을 하나로 통합
- 프로세스 처리에 필요한 적재 공간 확보가 필요할 때 수행
- High overhead를 가지게 되는데 그 요인으로는,
1. 모든 Process를 중지하고, 재배치한다.
2. 많은 시스템 자원을 소비한다.

- Non-Continuous Memory Allocation (비연속할당)