
# 들어가기 전
가상메모리란, 실행중인 프로세스가 가상의 공간을 참조하여 마치 커다란 물리 메모리를 가지고 있는 것처럼 사용할 수 있도록 하는 것
(실제 메모리 주소가 아닌 가상의 메모리 주소를 주는것)
- 가상메모리는 각 프로세스 당 메인메모리와 동일한 크기를 할당받는다.
- 그 공간은 보조기억 장치(HDD, SSD) 이용
- 메모리 관리장치놈에 의해 물리 주소로 변환
- 유저가 모르게 메모리 맵핑 되어 가상메모리 활용
# Segmentation
- 페이징과는 다르게 메모리를 서로다른 크기의 논리적인 단위인 Segment로 분할하고 메모리를 할당하여 물리주소를 논리주소로 변환 하는 것
- 미리 분할 하는것이 아닌 메모리에 적재될 때 빈공간을 찾아 할당
- 서로다른 크기를 가지는 논리적인 블록이 연속적인 공간에 배치 되는 것
- 데이터, 힙, 스택 영역 등 각 영역을 Segment 라고 하며 영역별로 쪼개는 기술을 Segmentation 이라고 한다
- 각 영역들의 기능, 권한, 크기가 다르기 때문에 분할하여 효율적인 메모리 관리가 가능하도록 한 것
# Segment Table
- Segment의 시작주소(base)와 세그먼트의 길이(limit)가 담긴 테이블
- 각각의 Segment를 offset 단위로 관리할 수 있다
- 시작주소와 offset 값으로 실제 물리적 위치로 변환 가능
# 장단점?
- 하나의 세그먼트 단위로 통제가 가능
- 내부 단편화는 없지만 외부 단편화가 발생
내부 단편화
- 메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당 되어 메모리가 낭비되는 상황
외부 단편화
- 메모리가 할당되고 해제되는 작업이 반복될 때 작은 메모리가 중간중간 존재하게 된다. 이때 중간중간 사용하지 않는 메모리가 존재해서 총 메모리는 충분하나 실제로 할당할 수 없는 상황
'잡동사니' 카테고리의 다른 글
Clean Agile #4 - 팀 실천 방법 (2) | 2021.01.28 |
---|---|
2020년 회고 (0) | 2020.12.29 |
Clean Code #2 - 의미 있는 이름 (0) | 2020.09.13 |
Clean Code #1 - 깨끗한 코드 (0) | 2020.09.08 |
List Interface (0) | 2020.07.27 |