본문 바로가기

CS

[면접을 위한 CS 전공지식 노트] 3.2. 메모리 - 메모리 관리

728x90

 


 

🔑 가상 메모리

  • 메모리 관리 기법 중 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화 해 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것

 

  • 가상주소와 실제 주소가 매핑되어있고 프로세스의 주소 정보가 들어있는 페이지 테이블로 관리
  • 속도 향상을 위해서 TLB를 사용함
    • 메모리와 CPU 사이에 있는 주소 변환을 위한 캐시
    • 페이지 테이블에 있는 리스트를 보관하며 CPU가 페이지 테이블까지 가지 않도록 속도를 향상시킬 수 있는 캐시 계층
  • 스와핑(swaping)
    • 가상 메모리에는 존재하지만 실제 메모리인 RAM에는 현재 없는 데이터나 코드에 접근 시 페이지 폴트가 발생함
    • 메모리에서 당장 사용하지 않는 영역을 하드 디스크에 옮기고 하드 디스크의 일부분을 마치 메모리처럼 불러와 쓰는 것을 스와핑이라고 함
    • 페이지 폴트가 일어나지 않은 것처럼 만듦
  • 페이지 폴트(page fault)
    • 프로세스의 주소 공간에 존재하지만 지금 컴퓨터의 RAM에는 없는뎅터에 접근했을 때 발생함
  • 페이지 폴트 - 스와핑 과정
    • CPU는 물리 메모리를 확인해 해당 페이지가 없으면 트랩을 발생해 운영체제에 알림
    • 운영체제는 CPU의 동작을 잠시 멈춤
    • 운영체제는 페이지 테이블을 확인해 가상 메모리에 페이지가 존재하는지 확인하고 없으면 프로세스를 중단하고현재 물리 메모리에 비어있는 프레임이 있는지 찾음.
      없을 경우 스와핑이 발동됨
    • 비어있는 프레임에 해당 페이지 롣, 페이지 테이블 최신화
    • 중단되었던 CPU는 다시 시작됨

 


 

🔑스레싱(Thrashing)

  • 메모리에 너무 많은 프로세스가 동시에 올라가게 되면 스와핑이 많이 일어나서 발생하는 것
  • 메모리의 페이지 폴트율이 높은 것을 의미하고 컴퓨터의 심각한 성능 저하를 초래함
  • 해결방법 : 메모리 늘림, HDD를 SSD로 교체, 작업세트, PFF
    • 작업세트(working set)
      • 프로세스의 과거 사용 이력인 지역성을 통해 결정된 페이지 집합을 만들어 미리 메모리에 로드하는 것
      • 미리 메모리에 로드하면 탐색에 드는 비용과 스와핑을 줄일 수 있음
    • PFF(Page Fault Frequency)
      • 페이지 폴트 빈도를 조절함
      • 상한선과 하한선을 만들어 상한선에 도달 시 프레임을 늘리고, 하한선에 도달 시 프레임을 줄임

 


 

🔑메모리 할당

  • 연속 할당
    • 메모리에 공간을 연속적으로 할당
    • 고정 분할 방식
      • 메모리를 미리 나누어 관리
      • 융통성이 없고 내부 단편화가 발생함
    • 가변 분할 방식
      • 매 시점 프로그램의 크기에 맞춰 동적으로 메모리를 나눠 사용함
      • 외부 단편화 발생이 가능함
      • 최초 적합 : 위쪽이나 아래쪽부터 시작해 홀을 찾으면 바로 할당
      • 최적 적합 : 프로세스의 크기 이상인 공간 중 가장 작은 홀부터 할당
      • 최악 적합 : 프로세스의 크기와 가장 많이 차이가 나는 홀에 할당
    • 내부 단편화 : 메모리를 나눈 크기보다 프로그램이 작아서 들어가지 못하는 공간이 많이 발생하는 현상
    • 외부 단편화 : 메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상
    • 홀 : 할당할 수 있는 빈 메모리 공간
  • 불연속 할당
    • 메모리를 불연속적으로 할당
    • 페이징(paging)
      • 메모리를 동일 크기의 페이지 단위로 나눠 메모리의 서로 다른 위치에 프로세스 할당
      • 홀의 크기가 균일하지 않은 문제가 없어지지만 주소 변환이 복잡해짐
    • 세그멘테이션(segmentation)
      • 의미 단위인 세그먼트로 나누는 방식
      • 공유와 보안 측면에서 장점을 가지나 홀 크기가 균일하지 않음
    • 페이지드 세그멘테이션(paged segmentation)
      • 프로그램을 의미 단위인 세그멘트로 나눠 공유나 보안 픅면에 강점을 두고 임의의 길이가 아닌 동일 크기의 페이지 단위로 나누는 것

 


 

🔑페이지 교체 알고리즘

  • 스와핑은 많이 일어나지도 적게 일어나지도 않게 설계되어야 하는데, 페이지 교체 알고리즘을 기반으로 스와핑이 일어남
  • 오프라인 알고리즘
    • 먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 알고리즘
    • 미래에 사용되는 프로세스를 알 수 없어 사용할 수 없는 알고리즘임
    • 그러나 다른 알고리즘과의 성능 비교에 대한 상한 기준을 제공하기 때문에 가장 좋은 알고리즘이라고 볼 수 있음
  • FIFO(First In First Out)
    • 가장 먼저 온 페이지를 교체 영역에 가장 먼저 놓는 방법
    • 선입선출 방법
  • LRU(Least Recentle Used)
    • 참조가 가장 오래된 페이지를 바꿈
    • 참조가 가장 오래된 페이지를 파악하기 위해 각 페이지마다 계수기, 스택을 둬야 함.
    • 보통 해시테이블과 이중 연결 리스트로 구현함
      • 해시 테이블 : 이중 연결 리스트에서 빠르게 찾을 수 있도록 사용
      • 이중 연결 리스트 : 한정된 메모리를 나타냄
    • NUR(Not Used Recnetly)
      • LRU에서 발견한 알고리즘으로 일명 Clock알고리즘
      • 0과 1을 가진 비트를 두고 1이면 최근에 참조된 것, 0이면 참조되지 않은 것
      • 시계 방향으로 돌면서 0을 찾고, 0을 찾은 순간 해당 프로세스를 교체하고 1로 바꿔줌
  • LFU(Least Frequently Used)
    • 가장 참조횟수가 적은 페이지를 교체 = 가장 많이 사용되지 않은 페이지를 교체
728x90