오늘날의 시분할 시스템에서는 운영체제를 포함한 모든 응용 프로그램이 메모리에 올라와 실행되기 때문에 메모리 관리가 매우 복잡하다. 이는 도마 하나의 구역을 나누어 여러재료를 올려놓고 요리하는 것에 비유할 수있다.
이처럼 복잡한 메모리 관리는 메모리 관리 시스템이 담당한다.
가져오기 작업
프로세스와 데이터를 메모리로 가져오는 작업
배치 작업
가져온 프로세스와 데이터를 메모리의 어떤 부분에 올려놓을지 결정하는 작업
재배치 작업
새로운 프로세스를 가져와야 하는데 메모리가 꽉 찼다면 메모리에 있는 프로세스를 하드디스크로 옮겨놓아야 새로운 프로세스를 메모리에 가져올 수 있다.
가져오기 정책
프로세스가 필요로 하는 데이터를 언제 메모리로 가져올지 결정하는 정책
일반적으로 프로세스의 요청이 있을 때 가져 오지만, 필요하다고 예상이 되는 경우에도 데이터를 미리 가져오는 경우도 있다.
배치정책
가져온 프로세스를 메모리의 어떤 위치에 올려놓을지 결정하는 정책
메모리를 같은 크기로 자르는 것을 페이징, 프로세스의 크기에 맞춰 자르는 것을 세그먼테이셔이라고 한다.
재배치 정책
메모리가 꽉 찼을 때 메모리 내에 있는 어떤 프로세스를 내보낼지 결정하는 정책이다.
구분 | 32bit CPU | 64bit CPU |
---|---|---|
주소 범위 | 0~2^32-1 번지 | 0~2^64-1 번지 |
총 크기 | 약 4GB | 약15,777,216TB |
메모리의 주소 공간을 물리주소 공간이라고 한다. 물리주소공간은 하드웨어 입장에서 바라본 주소공간으로 컴퓨터마다 다르다.
이와 반대로 사용자 입장에서 바라본 주소 공간은 논리 주소 공간이다.
구분 | 절대 주소 | 상대 주소 |
---|---|---|
관점 | 메모리 관리자 입장 | 사용자 프로세스 입장 |
주소 시작 | 물리주소 0번지부터 시작 | 물리 주소와 관계없이 항상 0번지 부터 시작 |
주소 공간 | 물리 주소(실제 주소) 공간 | 논리 주소 공간 |
상대주소를 사용하면 상대 주소를 실제 메모리 내의 물리 주소, 즉 절대 주소로 변환해야만 한다.
가상메모리는 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것을 말합니다.
애플리케이션이 실행될 때, 실행에 필요한 일부분만 메모리에 올라가며 애플리케이션의 나머지는 디스크에 남게 됨. 즉, 디스크가 RAM의 보조 기억장치(backing store)처럼 작동하는 것임.
결국 빠르고 작은 기억장치(RAM)을 크고 느린 기억장치(디스크)와 병합하여, 하나의 크고 빠른 기억장치(가상 메모리)처럼 동작하게 하는 것임.
가상 메모리를 구현하기 위해서는 컴퓨터가 특수 메모리 관리 하드웨어를 갖추고 있어야만 함. ⇒ 바로 MMU(Memory Management Unit) 메모리 관리 장치
예전에는 MMU가 이와 같이 따로 분리된 하드웨어였지만 최근의 아키텍처에서는 프로세서와 같은 칩에 회로로 삽입된다. (출처: 위키백과)
메모리와 cpu 사이에 있는 주소 변환을 위한 캐시이다. 페이지 테이블에 있는 리스트를 보관하여 cpu가 페이지 테이블까지 가지 않도록 속도를 향상시킬 수 있는 캐시 계층이다.
메모리는 크기가 크지 않기 때문에 프로세스를 임시로 디스크에 보냈다가 다시 메모리에 로드해야 하는 상황이 생긴다. 이때 디스크로 내보내는 것을 swap out, 메모리로 들여보내는 것을 swap in이라고 한다.
일반적으로 중기 스케줄러에 의해 swap out 시킬 프로세스를 선정하며, 우선순위에 따라 어떤 프로세스를 swap in/out 할지 결정한다. 우선순위가 낮은 프로세스를 swap out 시키고, 높은 프로세스를 메모리에 올려놓는 방식이다.
출처: https://rebro.kr/178 [Rebro의 코딩 일기장:티스토리]
페이지 폴트란 프로그램이 자신의 주소 공간에는 존재하지만 시스템의 RAM에는 현재 없는 데이터나 코드에 접근 시도하였을 경우 발생하는 현상을 말합니다.
페이지 폴트가 발생하면 운영 체제는 그 데이터를 메모리로 가져와서 마치 페이지 폴트가 전혀 발생하지 않은 것처럼 프로그램이 계속적으로 작동하게 해줍니다.
메모리의 페이지 폴트율이 높은 것을 의미, 컴퓨터의 심각한 성능 저하를 초래합니다.
작업 세트는 프로세스의 과거 사용 이력인 지역성을 통해 결정된 페이지 집합을 만들어서 미리 메모리에 로드하는 것입니다. 미리 메모리에 로드하면 탐색에 드는 비용을 줄일 수 있고 스와핑 또한 줄일 수 있습니다.
PFF는 페이지 폴트 빈도를 조절하는 방법으로 상한선과 하한선을 만드는 방법입니다. 만약 상한선에 도달하면 페이지를 늘리고 하한선에 도달하면 페이즈를 줄입니다.
메모리에 프로그램을 할당할 때는 시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당하는데 연속 할당과 불연속 할당으로 나누어진다.
연속할당은 메모리에 연속적으로 공간을 할당하는 것을 의미합니다.
가변 분할 방식과 고정 분할 방식이 존재 합니다.
프로세스의 크기와 상관없이 메모리를 같은 크기로 나누는 것이다. 메모리를 미리 나누어 있기 때문에 융통성이 없습니다.
매시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용합니다.
이름 | 설명 |
---|---|
최초적합 | 위쪽이나 아래쪽부터 시작해서 홀을 찾으면 바로 할당 |
최적적합 | 프로세스의 크기 이상인 공간 중 가장 작은 홀 부터 할당합 |
프악적합 | 프로세스의 크기와 가장 많이 차이가 나는 홀에 할당 |
메모리를 연속적으로 할당하지 않는 불연속 할당은 현대 운영체제가 쓰는 방법으로 페이징 기법이 있습니다.
또한 세그멘테이션, 테이지드 세그멘테이션이 존재합니다.