Welcome! Everything is fine.

[CS 발표_02] OS의 메모리 관리 전략(페이징 & 세그멘테이션) 본문

CS 스터디/발표

[CS 발표_02] OS의 메모리 관리 전략(페이징 & 세그멘테이션)

개발곰발 2024. 5. 9.
728x90
OS가 메모리 관리를 해야하는 이유에 대해 설명하고, 메모리 관리 전략에 대해 설명해주세요.

OS가 메모리 관리를 해야하는 이유

각각의 프로세스는 독립된 메모리 공간을 갖는다. 따라서 각 프로세스는 다른 프로세스의 메모리 공간에 접근할 수 없다. 오로지 '운영체제'만이 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 영향을 받지 않는다. 따라서 OS 만이 메모리를 관리할 수 있기 때문에 적절한 관리가 필요하다.

  • 가상메모리를 이용한 Swapping
  • 메모리 압축
  • 페이징 & 세그멘테이션
  • 고정 길이 할당 / 가변 길이 할당등의 방식으로 OS가 메모리 관리를 수행할 수 있다.

논리 메모리와 물리 메모리

다수의 프로세스를 실행하려면 한정된 메모리 공간에 많은 프로세스를 로드할 수 있어야 한다. 그래서 메모리 공간을 더 효율적으로 활용하기 위한 여러 방안이 고안되었다.

  • 메모리 관리 장치(MMU, Memory Management Unit) : 논리 주소 → 물리 주소로 변환해주는 동작을 하는 하드웨어. CPU에 위치하며, CPU에서 메모리에 접근하기 전에 MMU를 거쳐 논리 주소에 해당하는 물리 주소를 얻는다. 메모리를 보호하는 역할을 한다.

외부 단편화와 내부 단편화

외부 단편화

  • 프로그램의 크기보다 분할의 크기가 작은 경우, 해당 분할이 비어있어도 프로그램을 적재하지 못해 발생

내부 단편화

  • 분할된 크기보다 작은 프로세스가 할당되어 메모리 공간이 남는 경우
  • 하나의 분할 내부에서 사용되지 않는 메모리 조각

메모리 압축

  • 외부 단편화 문제를 해결하는 방법 중 하나. 프로세스가 사용 중인 메모리 공간을 재배치해서 흩어져있는 가용 메모리 공간을 하나로 합치는 것.
  • 작업 효율이 좋지 않음

스와핑

  • 메모리에 올라온 프로세스의 주소 공간 전체를 디스크의 스왑 영역으로 일시적으로 내려놓는 것.
  • 스왑 인 : 디스크 → 메모리
  • 스왑 아웃 : 메모리 → 디스크

메모리 관리 전략

연속 메모리 할당

: 멀티 프로세스 환경에서 여러 프로세스를 메모리에 연속적으로 로드하는 방법

  • 고정 분할 방식 : 메모리 영역을 분할 → 각 영역에 프로세스를 할당
    • 단점 : 메모리에 올릴 수 있는 프로세스 수와 각 프로세스 크기가 제한됨, 단편화 문제 발생할 수 있음.
  • 가변 분할 방식 : 할당할 프로세스의 크기에 따라 메모리 공간을 분할
    • 최초 적합 : 가용 메모리 공간에서 프로세스 크기만큼 비어 있는 메모리 공간을 찾아 차례대로 프로세스를 로드하는 방식
    • 최적 적합 : 할당하려는 프로세스 크기 이상인 가용 메모리 공간 중에서 가장 작은 공간에 프로세스를 할당하는 방식
    • 최악 적합 : 할당하려는 프로세스 크기 이상인 가용 메모리 공간 중에서 가장 큰 공간에 프로세스를 할당하는 방식

비연속 메모리 할당

: 프로세스의 메모리 영역을 나눠서 메모리 공간에 저장하는 방법

  • 페이징 : 프로세스의 논리 메모리 영역과 물리 메모리 영역을 각각 일정한 크기의 페이지와 프레임으로 나누는 기법.
    • 페이지의 크기 == 프레임의 크기
    • 페이지와 프레임에 각각 번호를 할당 → 페이지 테이블을 사용해 mapping
    • 페이지 테이블 : 프로세스의 페이지 정보 & 페이지에 매핑하는 프레임 정보 저장, 페이지 테이블은 각 프로세스의 PCB에 저장됨.
    • 장점 : 페이지를 물리 메모리에 연속으로 할당할 필요X → 외부 단편화 문제 해결
    • 단점 : 프로세스 크기가 페이지 수로 나누어 떨어지지 않을 경우, 마지막 페이지가 페이지 크기 보다 작을 수 있으므로 내부 단편화 문제 발생 가능성O, 페이지 테이블을 저장하기 위한 메모리 공간이 추가로 필요함
    • 페이징 기법
      • 계층적 페이징(=멀티 레벨 페이징) : 페이지 테이블을 다시 페이지로 나눠 페이지 테이블 자체를 페이징하는 방식.
      • 해시 페이지 테이블 : 해시 테이블의 각 항목에 저장된 연결 리스트에 페이지 번호를 해싱한 뒤에 첫 번째 요소와 가상 페이지 번호를 비교하는 방식.
      • 역 페이지 테이블 : 프레임을 이용해 페이지를 찾는 방식.
  • 세그먼테이션 : 프로세스의 메모리 영역을 논리적 단위인 세그먼트로 분할해 메모리를 할당하는 기법.
    • 세그먼테이션 테이블을 사용해 세그먼트의 논리 주소를 물리 주소로 mapping
    • 장점 : 프로세스의 메모리 영역을 논리적 단위로 나눠 저장하므로 단위별로 데이터를 보호하기 쉬움.
    • 단점 : 세그먼트 크기가 균등하지 않아서 프로세스의 할당/해제를 반복하는 과정에서 외부 단편화 문제 발생 가능성O, 메모리에 로드된 스택 세그먼트 영역에서 오버플로 발생 시 다른 프로세스와 메모리 영역이 겹칠 수 있음 → 해당 세그먼트 중 하나를 디스크로 스왑 아웃 해야 함.