가상 주소 개념 등장
: 메모리 공간이 한정적이므로, 사용자에게 더 많은 메모리 제공을 위해 가상 주소 개념 등장
: 가상주소는 프로그램 상에서 사용자가 보는 주소공간
가상 주소에서 실제 데이터가 담겨 있는 곳에 접근하기 위해 빠른 주소변환이 필요한데 이를 MMU가 도와준다.
메인메모리 적접 접근은 비효율적이므로, CPU와 메인 메모리 속도를 맞추기 위한 캐시가 존재한다.
프로세스는 독립적인 메모리 공간을 가지며, 자신의 공간만 접근해야 한다.
따라서 한 프로세스에게 합법적인 주소영역을 설정하고, 잘못된 접근이 오면 trap을 발생시키며 보호한다.
base 레지스터 : 메모리상의 프로세스 시작 물리 주소 저장
limit 레지스터 : 프로세스 사이즈 저장
프로세스의 접근 가능 메모리 영역 : base <= 메모리 영역 <= base + limit
(안정성을 위해 base와 limit 레지스터는 커널 모드에서만 수정가능하도록 설계!)
페이징 기법과 같은 메모리 관리 기법은 가상메모리를 사용하여 사용자가 눈치채지 못하도록 눈속임을 통해 메모리 할당.
과할당 상황에서 사용자를 속인것을 들킬만한 상황 존재!
1. 프로세스 실행 도중 페이지 폴트 발생
2. 페이지 폴트를 발생시킨 페이지 위치를 디스크에서 찾음
3. 메모리의 빈 프레임에 페이지를 올려야 하는데, 모든 메모리가 사용중이라 빈 프레임이 없음
과할당 해결을 위한 빈 프레임 확보 방법
1. 메모리에 올라와 있는 한 프로세스를 종료시켜 빈 프레임 얻기
2. 프로세스 하나를 swap out하고, 이 공간을 빈 프레임으로 활용
swapping 기법을 통해 공간 바꿔치기하는 2번 방법과 달리 1번 방법은 사용자에게 페이징 시스템을 들킬 가능성이 높음!
따라서 swapping기법을 통해 교체가 이루어져야 함!
(페이징 기법은 사용자가 모르게 시스템 능률을 높이기 위한 일이므로 들키지 않게 처리해야함.)
페이지 교체가 이루어지면 아무일이 없었던 것처럼 프로세스를 계속 수행시키며 사용자가 알지 못하도록 해야함.
이때 아무일도 없었던것처럼 하려면, 페이지 교체 당시 오버헤드를 최대한 줄여야 한다.
빈 프레임이 없는 상황에서 victim 프레임을 비울때와 원하는 페이지를 디스크에 올릴때 2번의 디스크 접근이 생김.
페이지 교체가 많이 이루어지면 입출력 연산이 많이 발생하면서 오버헤드 문제 발생!
방법1 - 변경비트 사용
변경 비트를 모든 페이지마다 두고, victim 페이지가 정해지면 해당 페이지 비트 확인
해당 비트가 set 상태라면
: 해당 페이지 내용이 디스크 상의 페이지 내용가 달라졌다는 뜻
(페이지가 메모리에 올라온 이후 한번이라도 수정이 발생한 것. 따라서 디스크에 기록 O)
해당 비트가 clear 상태라면
: 디스크상의 페이지 내용과 메모리상의 페이지가 일치하는 상황
(디스크와 내용이 같아서 기록 X)
방법 2 - 페이지 교체 알고리즘 선정
페이지 교체 알고리즘을 상황에 따라 잘 선택하기
현재 상황에서 페이지 폴트를 발생할 확률을 최대한 줄여주는 교체알고리즘 사용하기
CPU가 재접근 할때, 메모리 참조 및 인출 과정에 대한 비용을 줄이기 위해 캐시에 저장해둔 데이터를 활용한다.
캐시는 플립플롭 소자로 구성되어 SRAM으로 되어있어 DRAM 보다 빠르다는 장점이 있다.
캐시를 활용하면 비용을 많이 줄일 수 있음.
따라서 CPU가 어떤 데이터를 원할지 어느정도 예측할 수 있어야 함
(캐시에 많이 활용되는 정보가 있어야 성능 높아짐)
적즁률을 극대화 시키기 위해 사용되는것이 지역성의 원리!
지역성의 종류
캐싱 라인
빈번하게 사용되는 데이터를 캐시에 저장했더라도, 캐시에서 데이터를 찾을 때 마다 모든 데이터를 순회하는것은 시간 낭비!
캐시에 목적 데이터가 있을떄, 바로 접근해서 출력할 수 있어야 캐시 활용이 유의미!!
따라서 캐시 저장 시, 자료구조를 활용해 묶어서 저장하는데 이를 캐싱 라인이라고 한다.
https://gyoogle.dev/blog/computer-science/operating-system/Memory.html