⏱️ 2 OS가 메모리를 관리하는 방법
📄 1. OS
설명 | 이미지 |
---|---|
① 전제로 일단 프로세스가 실행될때, 아무곳에나 메모리를 무작정 접근할 수 없다. |
|
② 만약 접근하게 되는 일이 생긴다면 접근을 시도하는 프로세스를 OS에서 Inturrupt를
날리고 강제로 종료한다. 그 메세지는 익히 아는 segment fault (core dumped) |
|
③ 따라서 실행되려면 프로세스가 메모리를 OS에게 요청해야 됨. OS가 Read Write할 수 있는 공간을 할당해준다. |
📄 2. Memory Fragmentation
빈 메모리가 있지만 사용할 수 없어 메모리가 낭비된다는 공통점이 있다.
- 단편화 때문에 새로 할당할 크기에 맞는 메모리를 찾으러 하나하나씩 탐색하는 과정으로 힙 메모리가 느린것에 한몫한다.
- 일반적으로 스택은 높은 주소에서 낮은 주소 방향으로 데이터가 할당/해제 됨에 반해.
힙 메모리를 사용하며 동적으로 메모리를 할당하면서 해제되는데 순서가 없다.
좌 : 외부 단편화, 우 : 내부 단편화
1). External Fragmentation
① RAM 중간 공간에 생기는 빈 공간
- "각기 다른 크기"의 프로세스가 메모리에 "연속적으로 할당" 된다.
- 메모리가 사용되고 해제되는 순서가 달라 "RAM 중간 공간에 빈공간" 이 생긴다.
- 비 연속적으로 메모리가 띄엄 띄엄 할당 되게 된다.
- 새로운 프로세스를 실행될때 작은 공간들로 할당할 수 없게된다.
② 외부 단편화 해결 기법
- 페이징 : 외부 단편화를 해결한다.
블록 명칭 장치 페이지 ("가상 메모리"를 고정된 크기의 블록으로 나눈단위) SSD 보조기억 장치 프레임 (페이지와 같은 크기로 나눈 "메모리") RAM 주 기억 장치 - Stack Frame 의 프레임 또한 RAM 위에 적재된다는 점에서 붙은 이름이다.
- 페이징에서 스왑-인(SSD -> RAM) 스왑-인(RAM -> SSD) 동작을 수행한다.
- 페이지 테이블(페이지번호-프레임번호) 을 통해
프로세스가 굳이 물리적으로 연속적으로 적재될 필요 없이 분산되어 적재되더라도
1(프로세스)-n(페이지) 관계로 논리적으로 연결되어 있도록 해준다.
2). Internal Fragmentation
① 페이징 기법에서 생기는 내부에 생기는 빈 공간
- 페이지 크기가 비록 고정되더라도 프로세스가 딱 나머지만큼 나눠떨어지지 않을 수 있다.
예를 들어 페이지크기10KB 실제프로세스크기101KB101 % 10 != 1
이므로 9KB 낭비된다. - 이때 "페이지 고정크기 단위로 낭비"되는 9KB를 내부 단편화라고 한다
② 내부 단편화 해결 기법
- 세그멘테이션 : 내부 단편화 해결
3). 외부&내부 단편화 해결법
① 매모리 풀 (내부 외부 단편화 해결)
- 미리 할당 받아 놓고 필요할 때마다 사용하고 반납하는 것
- 메모리가 자주 할당되고 해제될때 사용하는 기법이다.
- 특정 크기 단위로 추가할당하여 연속된 메모리 공간을 보장한다.
- buddy system : 2ⁿ 크기 기준으로 할당
- fibonacci heap : 피보나치 수 기준으로 메모리를 할당한다.
② 쓰레기 수집
참조
'CS > OS' 카테고리의 다른 글
| 니앙팽이 - 멀티스레딩 | 5 | 성능 평가 척도 (0) | 2025.01.18 |
---|---|
| 니앙팽이 - 멀티스레딩 | 4 | 프로세스 (0) | 2025.01.18 |
| 니앙팽이 - 멀티스레딩 | 3 | 프로그램을 처리하는 발전 흐름 (0) | 2025.01.18 |
| 니앙팽이 - 멀티스레딩 | 1 | 스택과 힙 (0) | 2025.01.18 |
| 니앙팽이 - 멀티스레딩 | 0 | 하드웨어와 캐시 메모리 (0) | 2025.01.18 |