운영체제(OS) & Network

메모리

jih0ssang 2023. 9. 18. 16:37

목차

    메모리 관리

    각각의 프로세스는 독립된 메모리 공간을 갖는다. OS만이 OS 메모리 영역과 사용자 메모리 영역의 접근에 제약받지 않는다.

     

    Swapping

    • 메모리가 부족할 때, 할당 시간이 끝난 프로세스의 메모리를 보조 기억장치(Disk)로 내보내고
      다른 프로세스의 메모리를 불러 들임
      • Swap-in: 주기억장치(RAM)으로 불러오는 과정
      • Swap-out: 보조 기억장치(Disk)로 내보내는 과정

    단편화 (Fragmentation)

    • 프로세스들이 메모리에 적재되고 제거되는 일이 반복되면, 프로세스들이 차지하는 메모리 틈 사이에 사용하지 못할만큼의 작은 자유 공간들이 늘어나는데, 이것이 단편화다.
      • 외부 단편화: 메모리 공간 중 사용하지 못하게 되는 일부분. 물리 메모리(RAM)에서 사이사이 남는 공간들을 모두 합치면 충분한 공간이 되는 부분들이 분산되어있을 때 발생한다.
      • 내부 단편화: 프로세스가 사용하는 메모리 공간에 포함된 남는 부분. 예를 들어 메모리 분할 자유 공간이 10,000B가 있고 Process A가 9,998B를 사용한다면 2B라는 차이가 존재하고 이 현상을 내부 단편화라고 한다.

    페이징 (Paging)

    • 디스크가 거의 찰 경우, 기존 정해진 규격대로 프로그램에게 공간을 할당하는 것이 아니라, 가상 메모리로 쪼개어 프로그램 크기에 맞게 공간 할당한다.
    • 하나의 프로세스가 사용하는 공간을 여러 개의 페이지로 나뉘어서 관리되고(논리 메모리에서), 개별 페이지는 순서에 상관없이 물리 메모리에 있는 프레임에 mapping되어 저장된다.
    • 외부 단편화와 압축 작업을 해소하기 위해 등장
    • 문제점: 내부 단편화 문제의 비중이 늘어나게 된다. 예를들어 페이지 크기가 1,024B 이고 프로세스 A 가 3,172B 의 메모리를 요구한다면 3 개의 페이지 프레임(1,024 * 3 = 3,072) 하고도 100B 가 남기때문에 총 4 개의 페이지 프레임이 필요한 것이다. 결론적으로 4 번째 페이지 프레임에는 924B(1,024 - 100)의 여유 공간이 남게 되는 내부 단편화 문제가 발생하는 것이다.

    Segmentation(세그멘테이션)

    • 페이징에서처럼 논리 메모리와 물리 메모리를 같은 크기의 블록이 아닌, 서로 다른 크기의 논리적 단위인 세그먼트(Segment)로 분할 사용자가 두 개의 주소로 지정(세그먼트 번호 + 변위) 세그먼트 테이블에는 각 세그먼트의 기준(세그먼트의 시작 물리 주소)과 한계(세그먼트의 길이)를 저장
    • 문제점: 서로 다른 크기의 세그먼트들이 메모리에 적재되고 제거되는 일이 반복되다 보면, 자유 공간들이 많은 수의 작은 조각들로 나누어져 못 쓰게 될 수도 있다.(외부 단편화)
    • 메모리가 꽉 차면 페이징을 쫓아내야 한다. 쫓아내는 기준은?  LRU, LFU

    가상 메모리

    다중 프로그래밍을 실현하기 위해서는 많은 프로세스들을 동시에 메모리에 올려두어야 한다. 가상메모리는 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법 이며, 프로그램이 물리 메모리보다 커도 된다는 주요 장점이 있다.

     

    특징

    • 프로세스들이 메모리를 공유하는 것을 가능하게 하고, 프로세스들은 공유 메모리를 통해 통신할 수 있다. 이 또한, 각 프로세스들은 각자 자신의 주소 공간처럼 인식하지만, 실제 물리 메모리는 공유되고 있다.
    • fork()를 통한 프로세스 생성 과정에서 페이지들이 공유되는 것을 가능하게 한다.

    Demand Paging(요구 페이징)

    • 프로그램 실행 시작 시에 프로그램 전체를 디스크에서 물리 메모리에 적재하는 대신, 초기에 필요한 것들만 적재하는 전략
    • 가상 메모리는 대개 페이지로 관리된다.
    • 요구 페이징을 사용하는 가상 메모리에서는 실행과정에서 필요해질 때 페이지들이 적재된다. 한 번도 접근되지 않은 페이지는 물리 메모리에 적재되지 않는다.
    • 사용되지 않을 페이지를 가져오는 시간 낭비와 메모리 낭비를 감소시키는 효과가 있다.

    페이지 교체

    요구 페이징 에서 언급된대로 프로그램 실행시에 모든 항목이 물리 메모리에 올라오지 않기 때문에, 프로세스의 동작에 필요한 페이지를 요청하는 과정에서 page fault(페이지 부재)가 발생하게 되면, 원하는 페이지를 보조저장장치에서 가져오게 된다. 하지만, 만약 물리 메모리가 모두 사용중인 상황이라면, 페이지 교체가 이뤄져야 한다.(또는, 운영체제가 프로세스를 강제 종료하는 방법이 있다.)

     

    메모리 교체 흐름

    물리 메모리가 모두 사용중인 상황에서의 메모리 교체 흐름이다.

    1. 디스크에서 필요한 페이지의 위치를 찾는다
    2. 빈 페이지 프레임을 찾는다.
      1. 페이지 교체 알고리즘을 통해 희생될(victim) 페이지를 고른다.
      2. 희생될 페이지를 디스크에 기록하고, 관련 페이지 테이블을 수정한다.
    3. 새롭게 비워진 페이지 테이블 내 프레임에 새 페이지를 읽어오고, 프레임 테이블을 수정한다.
    4. 사용자 프로세스 재시작

    페이지 교체 알고리즘

    • FIFO(First-in First-out)
    • 최적 페이지 교체
    • LRU: 오랫동안 사용하지 않은 페이지 교체
    • LFU: 참조 횟수가 적은 페이지 교체
    • MFU

     

     

     

     

     

    '운영체제(OS) & Network' 카테고리의 다른 글

    OSI 7 Layer의 기능 및 TCP/IP  (0) 2023.09.18
    케이블의 종류와 연결 방식 및 주소(address)  (1) 2023.09.18
    프로세스(Process) (1)  (0) 2023.09.18
    쓰레드(Thread)  (0) 2023.09.14
    스케줄러(Scheduler)  (0) 2023.09.13