각각의 프로세스는... 독립된 메모리 공간을 갖고, 운영체제 혹은 다른 프로세스의 메모리 공간에 접근할 수 없는 제한이 걸려있다.**
단지, 운영체제만이 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 제약이 ❌
다중 프로그래밍 환경에서 스케줄링 후 CPU의 할당 시간이 끝난 '프로세스'의 메모리를 '보조기억장치(ex 하드디스크)'로 내보내고, '다른 프로세스'의 메모리를 불러들일 수 있다.
- Swap - in : 주 기억장치(RAM)으로 불러들임
- Swap - out : 보조 기억장치(하드디스크)로 내보냄
=> 디스크 전송시간이 많이 필요해서 현재는 메모리 공간 부족시 이용한다
프로세스들이 메모리에 적재되고 제거되는 일이 반복되다보면, 프로세스들이 차지하는 메모리 틈 사이에 사용 하지 못할 만큼의 작은 자유공간들이 늘어나게 되는데, 이것이 단편화 이다.
(단편화의 종류)
- 외부 단편화: 메모리 공간 중 사용하지 못하게 되는 일부분.
- 다양한 크기의 메모리 블록들이 할당 및 해제되며 그로 인해 메모리 공간 사이에 작은 조각들이 분산
- 물리 메모리(RAM)에서 사이사이 남는 공간들을 모두 합치면 충분한 공간이 되는 부분들이 분산되어 있을때 발생한다고 볼 수 있다.
프로세스가 '연속 메모리 관리' 때처럼 연속적인 블록으로 할당하지 않는다. 서로 다른 주소 공간에 할당되게하여 분산된 여러 작은 메모리 영역에 할당하는 메모리 관리 방법이다
외부 단편화 & 압축 작업을 해소하기 위해 만듦
-> 물리 메모리의 남는 '프레임'에 적절히 배치됨으로 '외부 단편화' 해결
물리 메모리 : 고정 크기(Frame
)로 분리
논리 메모리[프로세스 점유] : 고정크기 ( Page
)로 분리
페이지들은
물리적인 메모리에 연속적으로 할당되지 않고, 여러 개의 물리적인 프레임(Frame)에 흩어져 저장됩니다. 페이지 테이블을 통해 가상 주소와 물리 주소 간의 매핑을 관리합니다.
(단점) : 내부 단편화 문제 발생
Segment
) 단위로 분리이렇게 서로 다른 크기의 세그먼트들이 적재되고 제거되는 일이 반복되다 보면, 자유공간이 어쩔 수 없이 수많은 조각으로 나뉘어져 못 쓰게 될 수도 있다.
'페이지의 부재 발생' 이란 것은...
1. 페이지 부재 발생 → 2. 새로운 페이지를 할당해야 함 → 3.현재 할당된 페이지 중 어떤 것 교체할 지 결정하는 방법
=> 왜냐면 필요한 페이지를 적재해도 '가상 메모리'에 계속 쌓여있으니 안 쓰는 애들은 자리에서 제거를 해줘야 한다.(=> 해당 공간을 현재 필요한 다른 페이지로 교체)
다중 프로그래밍을 실현하기 위해서는 많은 프로세스들을 동시에 메모리에 올려두어야 한다.
- 가상메모리는 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법
- 요구 페이징을 이용해 실행과정에서 필요할 때 페이지를 적재한다.
- 프로그램이 물리 메모리보다 커도 된다는 주요 장점이 있다.
- 프로세스를 실행할 때 필요한 일부만 메모리에 로드하고 나머지는 디스크에 두는 것
=> 결과적으로 메모리에 작은 양의 주소 공간만 있으면 충분히 프로세스를 수행할 수 있고, 그에 따라 더 많은 프로그램을 동시에 실행할 수 있게 된다.
=> 응답시간은 유지되며 'CPU 이용률'/'처리율'은 상승한다
=> Swap에 필요한 입출력이 줄어든다
가상 메모리는 1. 실제 메모리(RAM)와 2. 보조 기억 장치의 Swap 영역으로 구성되며, OS는 메모리 관리자(MMU)를 통해 메모리 관리하며 프로세스는 사용하는 메모리가 실제 메모리인지 Swap의 영역인지는 알 수 없음.
<가상 주소 공간>
프로그램 실행 시작 시에 초기에 필요한 것들만 적재하는 전략을 요구 페이징이라고 한다.
=> 한 번도 접근하지 않은 페이지(가상 메모리 관리단위)는 물리 메모리에 적재될 일이 없다.
=> 프로세스 동작에 필요한 페이지를 요청해야 하는데 '페이지 부재(Page Fault)'가 발생할 수 있다.
요구 페이징 기법에서 초기 적재가 안된 페이징의 경우, 만일 프로세스 동작 중 물리 메모리에 해당 페이지가 안되서 '페이지 부재'가 발생할 수 있다.
이렇게 되면 원하는 페이지를 '보조 저장장치'에서 데려와야 하는데... 그렇다 해도 '물리 메모리'가 모두 사용 중이라면 '페이지 교체'를 시켜줘야 한다.
물리 메모리가 모두 사용중인 상황에서의 메모리 교체 흐름이다.
FIFO 페이지 교체
메모리가 할당된 순서대로 페이지를 교체
OPT 페이지 교체(최적 페이지 교체)
앞으로 가장 오랫동안 사용하지 않을 페이지 교체
실제 페이지를 교체할 때 알고리즘 선택 후 어떤 방식으로 할거냐 했을 때는 '전체'를 기준으로 교체하는게 더 좋다고 함.
-> 각각 교체하면 다중 프로그래밍 시, 프로세스 별 각각 모두 교체를 해야하기에...
만약 Swap 영역을 잡아주지 않는다면 'OOM'이 발생할 수 있다.
-> Swap은 실제 메모리가 아니다. 이 때문에 지연시간이 발생하여 가급적이면 Swap 메모리를 쓰지 않는게 좋으며 쓰더라도 양이 증가한다면 '메모리 누수'를 의심해볼만 하다.
자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 캐시는 저장 공간이 작고 비용이 비싼 대신 빠른 성능을 제공
원하는 데이터가 캐시에 존재하지 않을 경우 DBMS 또는 서버에 요청을 해야한다(Cache Miss).
- 왜?
캐시는 저장공간이 작기 때문에, 지속적으로 Cache Miss가 발생하는 데이터의 경우 캐시 전략에 따라서 저장중인 데이터를 변경해야 한다.
이렇게 CPU의 데이터로 잘 활용되는데 더 잘 활용하려면 '적중률(예측)'을 높여야 한다.
-> 캐시에 많이 활용되는 쓸모 있는 정보가 들어 있을 수록 좋다.
=> 데이터의 지역성의 원리를 잘 사용해야 한다.
기억 장치 내의 정보를 균일하게 액세스 하는 것이 아니라 한 순간에 특정부분을 집중적으로 참조하는 특성
¹시간 지역성과 ²공간 지역성으로 나뉜다
캐시(cache)는 프로세서 가까이에 위치하면서 빈번하게 사용되는 데이터를 놔두는 장소이다. 빈번하게 사용되는 데이터들을 캐시에 저장했더라도, 내가 필요한 데이터를 캐시에서 찾을 때 모든 데이터를 순회하는 것은 시간 낭비다.
=> 즉, 캐시에 목적인 데이터가 저장되어 있다면, 바로 접근하여 출력할 수 있어야 캐시가 의미 있어진다는 것이다.
PCB: 프로세스 제어 블록, 프로세스에 대한 중요한 정보를 저장합니다.
PC: 프로그램 카운터, 프로세스 실행을 위한 다음 명령의 주소를 표시합니다.
캐시메모리: 자주 사용되는 데이터가 저장되는 공간으로 CPU의 레지스터와 메모리 사이에서 병목 현상을 완화하는 장치