ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • # 07. Memory
    전공 지식/OS 2022. 9. 19. 22:49

     

    1. Intro

     

    프로그램을 실행하기 위해서는 메모리에 올라와 있어야 한다. 따라서 메모리를 잘 관리하면 프로그램의 실행 성능을 높여 CPU의 효율적인 사용과 사용자에게의 빠른 응답성을 가능하게 하므로, 운영체제의 효과적인 메모리 관리는 당연한 것이다. 

     

    본격적으로 메모리에 대해 배워보기 전에 몇가지 개념들을 알아보자. 

     

    메모리: information을 저장할 수 있는 모든 object
    넓은 의미에서의 메모리: 캐시, 메인 메모리, 디스크(PC에서의 하드 역할을 더 큰 시스템에서 하는 것) 등
    좁은 의미에서의 메모리: 메인 메모리

     

     

     

    * Address Binding이란?

     

    메모리란 주소를 통해 접근하는 매체이다. 따라서 메모리에는 주소가 매겨지는데 주소는 크게 논리적 주소(Logical address)와 물리적 주소(Physical address)로 나눠진다. 

     

    Logical address (논리적 주소) = Virtual address(가상주소)

    CPU가 보는 주소는 논리적 주소이다. 

    프로세스마다 독립적으로 가지는 주소 공간.

    각 프로세스마다 0부터 시작한다. 


    Physical address (물리적 주소)

    프로세스가 실행되기 위해 실제로 메모리(RAM)에 올라가는 위치.
     
    Address Binding (Logical address -> Physical address)

    어떤 프로그램이 메모리의 어느 위치에, 즉 어떤 물리적 주소에 load 될지를 결정하는 과정.  

     

     

     

     

    * Dynamic Loading이란?

     

    프로세스 전체를 메모리에 미리 다 올리는 것이 아니라 해당 루틴이 불려질 때 마다 메모리에 올리는 방법. 

    프로그램 실행에 반드시 필요한 루틴과 데이터만 적재하는 기법.

    OS의 특별한 지원 없이 프로그램 자체에서 라이브러리를 통해 구현.

     

     

     

     

    * Overlays란?

     

    메모리에 프로세스의 부분 중 실제 필요한 정보만을 올림.

    프로세스의 크기가 메모리보다 클때 유용. 

    프로그래머가 직접 구현.

     

     

     

     

    * Swapping이란?

     

     

    메모리에 너무 많은 프로세스가 올려져 있으면 비효율적이기 때문에 cpu우선순위가 낮은 프로세스를 일시적으로 메모리에서 Breaking store로 통채로 쫓아내는 것. 

     

    * Breaking store (=swap area =하드디스크) : 쫓겨난 프로세스들이 담기는 곳. 

     

     

     

     

     

    2. 물리적 메모리 관리 방법. 

     

    물리적 메모리는 크게 OS커널 영역 + 사용자 프로세스 영역으로 나눠져 있다. 

     

    사용자 프로세스 영역을 크게 두가지로 나눌 수 있는데 

    Contiguous allocation(연속할당) : 각자의 프로세스가 메모리의 연속적인 공간에 적재

    • Fixed partition allocation
    • Variable partition allocation

    Noncontiguous allocation (비연속할당): 하나의 프로세스가 메모리의 여러 영역에 분산되어 올라감. 

    • Paging
    • Segmentation
    • Paged Segmentation

    최근에는 비연속 할당의 페이징 기법을 많이 쓰고 있다. 

     

     

     

     

    * Contiguous allocation(연속할당)이란?

     

     

    Fixed partition allocation (고정 분할 방식)

         프로그램이 들어갈 사용자 메모리 영역을 미리 파티션으로 나눠 놓는다. 

         분할의 크기가 모두 동일한 방식과 서로 다른 방식이 존재. 

         동시에 메모리에 load 되는 프로그램 수가 고정되어서 융통성이 없음. 

     

     

    Variable partition allocation (가변 분할 방식)

         메모리 영역을 미리 파티션으로 나눠놓지 않는다. 

         프로그램의 크기를 고려해서 할당. 

         분할의 크기, 개수가 동적으로 변함.

         사용되었다가 사용되지 않은 메모리 공간을 hole 이라고 한다.

         시간이 지나면서 점점 많은 hole이 생긴다. 

         

     

     

    * Dynamic Storage Allocation Problem
     : 새로운 프로그램이 들어갈 적당한 hole을 찾는 문제. 

    1) First-fit
    크기가 n 이상인 Hole 중 최초로 발견한 Hole에 할당한다.  

    2) Best-fit
    크기가 n 이상인 가장 작은 Hole을 찾아 할당한다. 
    Hole들이 크기순으로 정렬되지 않은 경우 모든 Hole을 탐색해야 한다. 
    항상 거의 딱 맞는 크기를 할당하기 때문에 할당 후에 아주 작은 Hole들이 많이 생성된다. 

    3) Worst-fit
    가장 큰 Hole에 할당한다. 
    마찬가지로 모든 Hole을 탐색해야 하고, 상대적으로 아주 큰 Hole들이 새로 생성된다.  

    First-fit과 Best-fit이 Worst-fit에 비해서는 속도나 공간 측면에서 효과적인 것으로 알려져 있으나, 전체적으로 효율이 좋지 않은 편이다. 

         

     

     

     

     

    * Noncontiguous allocation(비연속할당)이란?

     

    Paging

    논리 메모리는 고정크기의 페이지, 물리메모리는 고정크기의 프레임 블록으로 나누어 관리.

    프로세스가 사용하는 공간을 논리 메모리에서 여러 개의 페이지로 나누어 관리하고, 개별 페이지는 순서에 상관없이      물리 메모리에 있는 프레임에 매핑되어 저장.

    내부 단편화 발생.

     

     

    <paging의 장점>

    - page들이 연속할 필요가 없어 외부 단편화를 해결할 수 있다.

    - 할당과 해제가 빠르다.

    - swap out이 간단하다.

    - 코드를 쉽게 공유할 수 있다(Shared pages). 코드가 pure code라면 공유가 가능하며 read-only로 프로세스 간에 하나의 코드만 메모리에 올린다. 

     

     

    <paging의 단점>

    - 내부 단편화를 해결하지 못한다.

    - page table을 저장하기 위한 메모리가 추가로 소모된다.

    - page table이 메모리에 상주하기 때문에 메모리에 접근하는 연산은 2번의 메모리 접근이 필요하게 되어 속도가 느리다. 

     

     

     

    Segmentation

    의미 단위로 하나의 프로세스를 나누는 것을 말한다. 작게는 프로그램을 구성하는 함수 하나하나를, 크게는 프로그램 전체를 하나의 Segment로 정의할 수 있다. 일반적으로는 code, data, stack 부분이 하나의 세그먼트로 정의된다. 

     

    Segmentation의 논리적 주소는 <segment number, offset>으로 구성되며, 각각의 segment는 base, limit, protection bit을 가지고 있다.

     

     

    <Segmentation의 장점>

    - paging과 마찬가지로 segment들이 연속적으로 할당될 필요가 없고, stack과 heap이 독립적으로 커질 수 있다.

    - segment마다 protection을 따로 수행할 수 있는 등 paging과 유사한 장점을 가지고 있다.

     

     

    <Segmentation의 단점>

    - 각각의 segment는 반드시 연속적으로 할당해야 하는 단점이 있다. 

     

     


     

    출처

    https://dheldh77.tistory.com/entry/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B4%80%EB%A6%AC-%EC%A0%84%EB%9E%B5Memory-Management-Strategy

    https://rebro.kr/178

    '전공 지식 > OS' 카테고리의 다른 글

    # 04-2 스케줄러  (0) 2022.11.07
    # 08. IPC  (3) 2022.10.03
    # 05. 병행프로세스 동기화  (3) 2022.08.30
    # 04. CPU 스케줄링  (0) 2022.08.30
    # 03. Interrupt & System call  (6) 2022.08.15

    댓글

Designed by Tistory.