✔️ 메모리 관리
메인 메모리(Main Memory)란?
- CPU가 직접 접근할 수 있는 기억 장치로 주소가 할당된 일련의 바이트들로 구성되어 있음
- 프로세스가 실행되려면 프로그램이 메모리에 올라와야 함
- CPU는 레지스터가 지시하는대로 메모리에 접근하여 다음에 수행할 명령어를 가져오며
명령어 수행 시 메모리에 필요한 데이터가 없으면 해당 데이터를 우선 가져오도록 함 - 메모리 관리를 위해서는 Swapping 기법을 사용해
CPU 할당 시간이 끝난 프로세스의 메모리를 보조 기억장치로 내보내고 다른 프로세스의 메모리를 불러들이도록 함- swap-in : 주기억장치(RAM)으로 불러오는 과정
- swap-out : 보조 기억장치로 내보내는 과정
- MMU(메모리 관리 장치)는 한정된 메모리 공간을 사용하여 더 많은 메모리를 제공하기 위해,
가상 주소에서 실제 데이터가 담겨 있는 곳에 접근하기 위한 논리 주소를 물리 주소로 변환해주며
자신의 공간에만 접근하도록 메모리 보호나 캐시 관리 등 CPU가 메모리에 접근하는 것을 총 관리
- 또한 메인 메모리의 직접 접근은 비효율적이므로, CPU와 메인 메모리 속도를 맞추기 위해 캐시가 존재함
- 실제 메모리의 사이즈보다 더 큰 사이즈의 메모리를 프로세스에 할당하는 메모리 과할당을 막기 위해
페이징 기법과 같은 메모리 관리 기법을 통해 가상 메모리를 이용해서 사용자가 눈치 채지 못하도록 메모리를 할당해주게 됨
단편화란?
- 기억 장치의 빈 공간 또는 자료가 여러 조각으로 나뉘는 현상
- 프로세스들이 메모리에 적재되고 제거되는 일이 반복되다보면
프로세스들이 차지하는 메모리 틈 사이에 사용하지 못할 만큼의 작은 자유공간들이 늘어나게 됨 - 단편화(외부 단편화)를 해소하기 위해 프로세스가 사용하는 공간들을 한쪽으로 몰아, 자유공간을 확보는 압축이 존재
- 외부 단편화 : 메모리 공간 중 사용하지 못하게 되는 일부분
- 메모리 사이사이 남는 공간들을 모두 합치면 충분한 공간이 되는 부분들이 분산되어 있을 때 발생
- 내부 단편화 : 프로세스가 사용하는 메모리 공간에 포함된 남는 부분
메모리 관리 기법
- 연속 메모리 관리 : 프로그램 전체가 하나의 커다란 공간에 연속적으로 할당되어야 함
- 고정 분할 기법 : 주기억장치가 고정된 파이션으로 분할되므로 내부 단편화 발생
- 동적 분할 기법 : 파티션들이 동적 생성되며 자신의 크기와 같은 파티션에 적재되므로 외부 단편화 발생
- 불연속 메모리 관리 : 프로그램의 일부가 서로 다른 주소 공간에 할당될 수 있음
- 페이징 : 고정 사이즈(고정 크기)의 작은 프로세스 조각인 페이지가 할당되게 됨
- 세그먼테이션 : 서로 다른 크기(가변 크기)를 가진 논리적 블록인 세그먼트가 할당되게 됨
페이징이란?
- 하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없애는 메모리 관리 방법
- 물리 메모리는 프레임이라는 고정 크기로 분리되어 있고, 논리 메모리는 페이지라고 불리는 고정 크기의 블록으로 분리됨
- 단순 페이징 : 각 프로세스는 프레임들과 같은 길이를 가진 균등 페이지로 나뉘게 되어 소량의 내부 단편화만 발생
- 가상 메모리 페이징 : 복잡한 메모리 관리로 오버헤드가 발생하지만 프로세스 페이지 전부를 로드시킬 필요 없음
- 논리 메모리는 물리 메모리에 저장될 때, 연속되어 저장될 필요가 없이 남는 프레임에 적절히 배치되어 외부 단편화를 해결
- 하나의 프로세스가 사용하는 공간은 여러 개의 페이지로 나뉘어서 관리되고,
개별 페이지는 순서에 상관없이 물리 메모리에 있는 프레임에 맵핑되어 저장되게 됨 - 프로세스를 정상적으로 사용하기 위해 MMU의 페이지 테이블을 사용해 각 페이지의 실제 주소로 변경
세그먼테이션이란?
- 하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없애는 메모리 관리 방법
- 논리 메모리와 물리 메모리를 같은 크기 블록이 아닌, 서로 다른 크기의 논리적 단위인 세그먼트로 분할하여 내부 단편화를 해결
- 단순 세그먼테이션 : 각 프로세스는 여러 세그먼트들로 나뉘게 되어 메모리 사용 효율이 개선되지만 외부 단편화가 발생
- 가상 메모리 세그먼테이션 : 복잡한 메모리 관리로 오버헤드가 발생하지만 필요하지 않은 세그먼트들은 로드시킬 필요 없음
- 세그먼트 테이블에는 각 세그먼트의 시작 물리 주소(base)와 세그먼트의 길이(limit)를 저장
- 프로세스를 정상적으로 사용하기 위해 MMU의 세그먼트 테이블을 사용해 각 페이지의 실제 주소로 변경
'Tech Interview > Operating System' 카테고리의 다른 글
[Operating System] 캐시 (0) | 2023.12.25 |
---|---|
[Operating System] 가상 메모리 (0) | 2023.12.19 |
[Operating System] 동기와 비동기 (0) | 2023.12.16 |
[Operating System] 프로세스 동기화 (0) | 2023.12.15 |
[Operating System] CPU 스케줄링 (0) | 2023.12.14 |