- 운영체제는 메모리를 관리하고, 메모리 관리 전략에는 연속 메모리 할당, 분할 메모리 할당 방식이 있다
- 가상 메모리
- 실제 이용 가능한 메모리 자원을 추상화하여, 사용자들에게 매우 큰 메모리로 보이게 하는 것
- 페이징 방식, 세그먼테이션 방식 2가지가 있다.
- 연속 메모리 할당
- 프로세스별로 연속된 한 덩어리의 메모리 할당
- 외부 단편화 문제가 발생함
- 분할 메모리 할당
- 프로세스를 여러 덩어리로 나누어 메모리 할당
- 고정 크기 할당 → 페이징(일정한 크기의 페이지로 분할)
- 가변 크기 할당 → 세그먼테이션(논리적인 기준으로 프로세스를 분할하여 크기가 일정하지 않음)
메모리 계층 구조

- 레지스터 → 캐시메모리 → 메인메모리 → 보조기억장치(하드)
- 속도와 비용을 절충하며 계층화 구조를 유지한다
- 참조의 지역성(데이터가 짧은 시간 내에 다시 사용되는 특성) 때문
- 스와핑(swapping)
- 프로세스가 실행에 따라 메인 메모리와 보조기억장치에서 교체되는것
메모리 관리
- 운영체제에 의해 메모리 관리가 필요한 이유
- 각각의 프로세스는 독립된 메모리 공간을 갖고, 운영체제 혹은 다른 프로세스의 메모리 공간에 접근할 수 없는 제한이 걸려 있다.
- 운영체제만이 메모리 영역의 접근에 제약을 받지 않기 때문에, 운영체제에서 메모리를 관리한다.
- 멀티프로세스 환경으로 변화하면서 한정된 메모리를 효율적으로 사용해야 했고, 운영체제가 이를 관리하는 방법이 중요해졌다.

- 메모리 할당 기법
- 연속 메모리 할당
- 프로세스별로 연속된 한 덩어리의 메모리 할당
- 각 프로세스 영역을 연속된 메모리 공간에 배치
- 초기 운영체제에 사용 → 현재는 분할 메모리 할당을 사용한다.
- 외부 단편화 문제가 발생한다
- 고정 크기 할당
- 메모리를 고정 크기의 파티션으로 나누고 프로세스 당 하나의 파티션 할당
- 가변 크기 할당
- 메모리를 가변 크기의 파티션으로 나누고 프로세스 당 하나의 파티션 할당
- 분할(불연속) 메모리 할당
- 프로세스를 여러 덩어리로 나누어 메모리 할당
- 고정 크기 할당
- 고정 크기의 동일한 덩어리 메모리의 분산 할당. 대표 방법 - Paging 기법
- 가변 크기 할당
- 가변 크기의 덩어리 메모리를 분산 할당. 대표 방법 -
Segmentation
기법


- 단편화(Fragmentation)
- 프로세스들이 메모리에 적재되고 제거되는 일이 반복되면, 프로세스들이 차지하는 메모리 틈 사이에 사용하지 못하게 되는 작은 공간들이 늘어나게 되는게, 이것이 단편화이다.
Process A | free | Process B | free | Process C | free | Process D |
- 외부 단편화와 내부 단편화
- 외부 단편화
- 이 경우, 연속 메모리 할당 방법은 40MB만큼의 공간(Hole)이 없기 때문에 프로세스를 실행시킬 수 없다.
- 이렇게 Hole의 크기가 프로세스 크기보다 작다는 이유로 할당되지 못하는 문제를 외부 단편화라고 한다.
- 반면 분할 메모리 할당 방법은 프로세스를 분할하여 프로세스를 실행시킬 수 있다.
- 페이징(Paging), 세그먼테이션(Segmentation)
- 내부 단편화
- 메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어 메모리 공간이 낭비되는 상황

- 가상 메모리
- 컴퓨터 시스템에 실제로 이용 가능한 기억 자원을 이상적으로 추상화하여, 사용자에게 매우 큰 메모리로 보이게 만드는 것을 말한다.
- 50GB짜리 게임을 16GB RAM에서 실행시킬 수 있는 이유?
- 모든 데이터를 주 기억장치에 올리지 않고, 가상 메모리 기법으로 필요한 부분만 올려서 실행시킨다.
- 메모리 관리 장치(MMU, Memory Management Unit)
- 가상 메모리의 주소와 실제 메모리 주소는 일치하지 않는다.
- MMU는 가상 메모리 주소를 실제 메모리 주소로 변환시켜주는 하드웨어이다.
- MMU는 메모리를 일정 단위로 쪼개서 관리하는데, 쪼개는 방법에 따라 페이징 기법, 세그멘테이션 기법으로 나뉜다.

- 페이징(Paging)
- 프로세스를 일정한 크기의 페이지로 분할해서 메모리에 적재하는 방식
- 이러한 분할 정보는 페이징 테이블에 저장되어 있으며, 메인 메모리에 적재되어 있는 페이지 번호와 해당 페이지가 위치한 메인 메모리의 시작 주소가 있다.
- 장점
- 외부 단편화 문제의 해소
- 단점
- 내부 단편화 문제가 발생할 수 있다. (페이지 단위가 너무 작아지면, 페이징 매핑 과정이 복잡해져 오히려 비효율적임)
- 세그먼테이션(Segmentation)
- 메모리를 서로 크기가 다른 논리적 단위로 분할한 것
- 프로세스를 논리적 단위인 세그먼트로 분할해서 메모리에 적재하는 방식
- 논리적 기준 분할이기 때문에, 크기가 일정하지 않다.
- 세그먼테이션도 페이징과 마찬가지로 세그먼트 테이블이 존재한다.
- 장점
- 내부 단편화 문제의 해소
- 프로그램의 중요한 부분과 중요하지 않은 부분을 분리하여 저장할 수 있음
- 단점
- 외부 단편화 문제가 생길 수 있다.

### 페이징과 세그먼테이션
### 단순 페이지
- 각 프로세스는 프레임과 같은 길이를 가진 균등 페이지로 나뉨
- 외부 단편화가 생기지 않음
- 내부 단편화가 존재할 수 있음
### 단순 세그먼테이션
- 각 프로세스는 여러 세그먼트로 나뉨
- 내부 단편화가 생기지 않음
- 메모리 효율을 개선함
- 동적 분할을 통한 오버헤드가 감소함
- 외부 단편화가 존재할 수 있음
### 가상 메모리 페이징
- 단순 페이징과 비교해 프로세스 페이지 전부를 로드할 필요가 없음
- 필요한 페이지가 있으면 나중에 자동으로 불러들임
- 외부 단편화가 생기지 않음
- 복잡한 메모리 관리로 오버헤드가 발생할 수 있음
### 가상 메모리 세그먼테이션
- 필요하지 않은 세그먼트들은 로드되지 않음
- 필요한 세그먼트가 있을 때 나중에 자동으로 불러들임
- 내부 단편화가 생기지 않음
- 복잡한 메모리 관리로 오버헤드가 발생할 수 있음
Share article