[운영체제] 메모리

이민우·2024년 3월 27일

CS_운영체제

목록 보기
13/14

메인 메모리

1.1. 메인 메모리란?

메인 메모리는 CPU가 직접 접근할 수 있는 메모리
프로그램이 실행되려면 해당 프로그램이 복사되어 메모리에 올라와야 함, 이를 프로세스라 한다
CPU는 연산을 수행한 후 메인 메모리에 데이터를 저장하거나 필요한 데이터를 요구함

2. MMU

2.1. MMU(메모리 관리장치)란?

MMU는 논리 주소를 물리 주소로 변환시켜줌 메모리 보호나 캐시 관리 등 CPU가 메모리에 접근하는 것을 관리해주는 하드웨어
메모리의 공간이 한정적이기 때문에, 사용자에게 더 많은 메모리를 제공하고 있는 듯이 속이기 위해 '가상 주소'라는 개념이 등장하였음
이 가상 주소를 실제 물리 주소로 빠르게 변환시켜야 하는데, 이를 MMU가 도와줌

2.2. MMU의 메모리 보호

프로세스는 독립적인 메모리 공간을 가져야 하며, 다른 공간을 침범해서는 안됨
따라서 한 프로세스에게 주소 영역을 설정하고, 잘못된 접근이 오면 이를 보호해야 함

참고) base와 limit 레지스터를 활용한 메모리 보호 기법
base 레지스터는 프로세스 시작주소를 물리 주소로 저장하고, limit 레지스터는 프로세스의 사이즈를 저장
base <= x < base + limit 이라는 메모리 영역을 부여함

3. 메모리 과할당(over allocating)

3.1. 메모리 과할당이란?

실제 메모리 사이즈보다 더 큰 사이즈의 메모리를 프로세스에 할당한 상황 페이징 기법과 같은 메모리 관리 기법은 사용자가 큰 메모리를 사용하는 것처럼 느끼도록 눈속임을 통해 메모리를 할당해줌
이때 사용되는 것이 바로 가상 메모리 기법
과할당 상황에는 이러한 눈속임 과정을 사용자에게 들킬 상황이 존재한다.
  1. 페이지 폴트 발생
  2. 페이지 폴트를 발생시킨 페이지 위치를 디스크에서 Search
  3. 빈 프레임이 없음
    => 빈 프레임을 확보하기 위해 swapping 기법 활용.

    그리고 요구 페이징 방식을 사용하기 때문에 CPU가 프로그램을 실행하면서 필요한 페이지가 물리적 메모리에 없는 경우도 생기게 되는데 이것을 페이지 폴트(Page Fault)라고 한다.

4. 페이지 교체

4.1. 페이지 교체란?

swapping 기법에서 하나의 프로세스를 swap out해서 빈 프레임을 확보하는 것

4.2. swapping 기법 과정

  1. 페이지 폴트 발생
  2. 페이지 폴트를 발생시킨 페이지 위치를 디스크에서 Search
  3. 메모리에 빈 프레임이 있는 확인
  4. 만약 빈 프레임이 있으면 해당 프레임을 사용
  5. 빈 프레임이 없으면, 희생 프레임을 선정해 디스크에 변경 사항을 기록하고 페이지 테이블을 업데이트
  6. 빈 프레임에 페이지 폴트가 발생한 페이지를 올리고, 페이지 테이블 업데이트
    이때 페이지 교체가 일어나도, 사용자가 못느끼도록 프로세스를 문제 없이 계속 수행시켜야 함 => 오버헤드를 감소 시켜야 함!

    빈 프레임이 없는 상황에서 희생 프레임을 비울 때와 원하는 페이지를 해당 프레임으로 올릴 때 총 두 번의 디스크 접근이 이루어짐
만약, 페이지 교체가 많이 이루어진다면 오버헤드 문제가 발생함

4.3. 아예 접근하는 횟수를 줄이자!

  1. swapping 과정에서 총 두 번의 디스크 접근이 이루어지는데 접근 횟수를 줄일 수 있는 방법이 없을까?
  2. 모든 페이지에 내용의 변경과 관련된 변경 비트를 두자! 그리고 만약에 희생 페이지가 정해진다면 그 변경 비트를 확인하자
  3. 만약 그 비트가 set 상태라면, 해당 페이지의 내용이 달라졌으므로 디스크에 기록해야한다!
  4. 만약 그 비트가 clear 상태라면, 내용이 달라지지 않았으므로 디스크에 접근하지 않아도 된다!

4.4. 페이지 교체 알고리즘 사용!

  1. 페이지 교체 알고리즘을 상황에 따라 잘 선택한다면 오버헤드를 확실히 줄일 수 있다.
  2. 즉, 현재 상황에서 페이지 폴트 확률 최대한 줄여줄 수 있는 페이지 교체 알고리즘을 선택해야만 한다.
  3. FIFO, OPT, LRU

5. 캐시 메모리

5.1. 캐시 메모리란?

주기억장치에 저장된 내용의 일부를 임시로 저장해두는 기억장치
CPU와 메인메모리 간의 성능 차이에 대한 성능 저하를 줄이기 위한 대안
만약 CPU가 어떠한 데이터에 대하여 다시 재접근을 할때, 그 데이터를 캐시 메모리에 저장해놨다면 메인 메모리까지 접근할 필요가 없음

5.2. 캐싱 과정

  1. CPU에서 주소를 전달, 해당 명령이 캐시 기억장치에 존재하는지 확인
  2. 존재하면 Hit!, 해당 명령어를 CPU에게 전달
  3. 존재하지 않는다면 Miss!
  4. 주기억장치로 접근
  5. 해당 명령어를 가진 데이터 인출
  6. 해당 명령어 데이터를 캐시에 저장
  7. 해당 명령어를 CPU로 전송
    캐시를 이용하면 비용을 많이 줄일 수 있지만, 효율적으로 활용하기 위해선 적중률을 극대화 해야함!

    이때 사용되는 것이 지역성의 원리

5. 3. 지역성의 원리

기억 장치 내의 데이터를 균등하게 접근하는 것이 아니라, 어떠한 순간에 특정한 부분을 집중적으로 접근하는 특성
  1. 시간 지역성 : 최근에 참조된 주소의 내용은 곧 다음에도 참조되는 특성
  2. 공간 지역성 : 실제 프로그램이 참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성

5.4. 캐싱 라인

캐시를 사용할 때, 주소에 해당되는 데이터를 찾기위해 일일히 순회하는 것은 비효율적
따라서 캐시에 데이터를 저장할 때, 자료구조를 활용하여 메모리 주소를 함께 저장 즉, map 자료구조와 같이 빠르게 원하는 정보를 찾을 수 있도록 구현함
profile
백엔드 공부중입니다!

0개의 댓글