메모리 관리 전략
각각의 프로세스는 독립된 메모리 공간을 갖고, 운영체제 혹은 다른 프로세스의 메모리 공간에 접근할 수 없는 제한이 걸려있다. 단지, 운영체제 만이 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 제약을 받지 않음
Swapping : 메모리의 관리를 위해 사용되는 기법. 표준 Swapping 방식으론 RR 과 같은 스케줄링의 다중 프로그래밍 환경에서 CPU 할당 시간이 끝난 프로세스의 메모리를 디스크로 보내고 다른 프로세스의 메모리를 불러 들일 수 있음.
단편화 (Fragmentation) : 메모리의 빈 공간 또는 자료가 여러 개의 조각으로 나뉘는 현상을 말한다. 할당한 메모리를 해제하게 되면 그 메모리 공간이 빈 공간이 되고, 그 빈공간의 크기보다 큰 메모리는 사용할 수 없다. 그리하여 이 공간들이 하나 둘 쌓이게 되면 수치상으로는 많은 메모리 공간이 남아있음에도 사용할 수 있는 메모리는 얼마 되지 않는 것을 말한다.
- 내부 단편화 : 분할된 영역이 할당된 프로그램의 크기보다 커서 사용되지 않고 남아있는 빈 공간을 말한다. (페이징 기법에서 발생)
- 외부 단편화 : 분할된 영역이 할당 될 프로그램의 크기보다 작아서 모두 빈 공간으로 남아있는 전체 영역을 말함 (세그멘테이션 기법에서 발생)
- 압축 : 외부 단편화를 해소하기 위해 프로세스가 사용하는 공간들을 한쪽으로 몰아, 자유공간을 확보하는 방법론 (그러나, 작업효율이 좋지 못하다)
Paging(페이징)
- Process의 virtual memory를 동일한 사이즈의 page단위로 나눔
- Virtual Memory의 내용이 page 단위로 non-contiguous하게 저장된
- 일부는 backing storage에, 일부는 physical memory에 저장
Basic Method
- Physical Memory를 동일한 크기의 frame으로 나눔
- Logical Memory를 동일 크기의 page로 나눔 (frame과 같은 크기)
- 모든 가용 frame들을 관리
- Page Table을 사용하여 logical address를 physical address로 변환
- External fragmentation 발생 안함 (같은 크기로 잘라놨기 때문에)
- Internal fragmentation 발생 가능
Segmentation(세그멘테이션)
-
프로그램을 의미 단위인 여러 개의 segment로 구성 (크기가 각자 다름)
- 작게는 프로그램을 구성하는 함수 하나하나를 세그먼트로 정의
- 크게는 프로그램 전체를 하나의 세그먼트로 정의 가능
- 일반적으로는 code, data, stack 부분이 하나씩의 세그먼트로 정의됨
-
세그먼트 테이블에는 각 세그먼트의 기준(시작 물리주소)과 한계(세그먼트의 길이)를 저장
-
단점 : 서로 다른 크기의 세그먼트들이 메모리에 적재되고 제거되는 일이 반복되다 보면, 자유 공간들이 많은 수의 조각들로 나누어져 못 쓰게 될 수 있음 (외부 단편화)
References
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/main/OS#%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B4%80%EB%A6%AC-%EC%A0%84%EB%9E%B5