앞으로 이어질 글들의 개요에 대해서 설명하겠습니다~ 🤓
프로그램을 실행는 중요한 작업 공간
다중 프로그래밍 환경을 생각해봅시다. 한정된 메모리를 여러 프로세스가 함께 사용하게 됩니다. 따라서, 효율적으로 관리하는 방법은 필수입니다! 이 관리의 주체는 메모리 관리자인데요, OS의 관리모듈과 메모리관리장치(Memory Management Unit)가 협업하여 관리합니다~
메모리는 관점에 따라 두가지 로 나뉠 수 있습니다!
프로그래머는 프로래밍 시 논리적 관점의 논리적 주소로 메모리를 바라봅니다.
이는 가상주소라고도 불리며, object code가 저장된 공간과 프로그램에서 사용하는 자료구조 등에 해당됩니다.
실제 데이터나 프로그램을 저장하는 공간으로 논리적 주소에 대응하여 적재하는 실제주소를 의미합니다!
그럼 논리적주소 -> 물리적주소 간의 변환(매핑, 바인딩)은 어디서 담당하게 될까요? 위에서 언급한 MMU에서 담당하게 됩니다 !!
CPU가 메모리에 접근하는 것을 관리하는 컴퓨터 하드웨어 부품으로 논리적 주소를 실제 메모리주소로 변환 등을 담당
MMU의 변환 방법은 위 그림과 같이 고정분할, 동적분할, Paging, Segmentation 등이 있습니다! 그리고 Paging, Segmentation은 다른 글에서 알아볼 예정이에요!
① 연속 메모리 적재 방법
② 분산(비연속) 메모리 적재 방법
① 연속 메모리 적재는 직접 배치, 오버레이, 고정분할 등으로 할 수 있습니다.
이 중 고정분할에 대해 이야기해보겠습니다. 고정분할은 모두 같은 크기의 메모리로 할당하는 방법인데요, 이렇게 되면 메모리 낭비를 초래하게 되죠~ (외부/내부 단편화를 초래합니다)
이런 단점이 다중 프로그래밍 환경에서 더 크게 느껴지는데요, 그래서 나타난 게 ②분산 메모리 적재입니다. 이는 프로그램 하나가 물리적 주소의 여러 공간에 분산해 올라가는 기법을 뜻하는데요, 이 방법도 크게 고정분할(Paging), 가변분할(Segmentation)으로 분류할 수 있습니다!
앞으로 Paging, Segmentation 기법이 고안된 이유와 Paging, Segmentation에 대해 추가적인 글을 작성하겠습니다~