ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 페이징(paging) 세그먼테이션(segmentation)
    Operating System 2020. 4. 29. 13:39

    메모리 관리 기법

    페이징 기법

    페이징은 물리 메모리를 페이지라고 불리는 일정한 크기로 나누고, 선형 주소를 통해서 페이지 단위로 물리 주소로 접근하는 기법이다. 다시 말한다. 접근하는 방식이다. 즉, 메모리 접근 기법이라고 보는것이 더 정확해 보인다. 페이징이라는 기법을 통해서 물리 메모리에 접근해야 적재를 하던 스왑을 하던 읽던지 할 수 있기 때문에 페이지 단위로 물리 메모리에 접근하는 것까지가 페이징 기법이라고 하는 것이 더 정확할 것이다.

     

    가상 메모리와 페이징

    일단 가상메모리는 무엇인가? 보조기억장치를 주기억장치처럼 느끼게 해주는 것이다.

     

    예를들어 설명하겠다.

     

    test1.c

    #include <stdio.h>

    int main()

    {

       int a = 0;

       while(true)

       {

          printf("%d",&a);

       }

       return 0;

    }

     

    test2.c

    #include <stdio.h>

    int main()

    {

       int b = 1;

       while(true)

       {

          printf("%d",&b);

       }

       return 0;

    }

     

    이라는 C코드가 2개가 있다. 만약 test1.c의 a변수의 주소와 test2.c의 b변수의 주소를 찍어 봤을때 0x55555555로 동일하다면 이 두 코드를 실행파일로 만들어 실행하면 어떻게 될까? 덮어씌어질까? 아니다 따로 동작이 된다. 물리메모리의 서로 다른 주소 공간으로 적재가 된다는 뜻이다. 이 말은 파일안의 0x55555555는 가상메모리 주소라는 것이고, 프로그램 마다 가상메모리 공간(32비트 일경우 4GB)을 받는다는 뜻이고 가상 주소로는 절대 다른 프로그램에 영향을 끼칠 수 없다는 뜻이다. 그럼 test1.c나 test2.c 같은 아주 간단한 프로그램도 4GB의 가상메모리를 받기 때문에 프로그램의 크기가 커져야하는게 아닐까? 아니다. 예를들면 학교에서 사물함이 1~100번까지 총 100개가 있고 사람이 2명있다. A라는 사람이 28번 사물함을 B라는 사람이 87번 사물함을 차지하면 28번 사물함과 87번 사물함만 놔뚜고 나머지는 다 빼주면된다. 그럼 차지하는 공간이 줄어들것이다. 약간 이런 개념이다. 

     

    이게 도대체 왜 보조기억장치를 주기억장치처럼 느끼게 해주는걸까?

    결국 실행파일은 보조기억장치에 존재한고, 이 보조기억장치에 있는 실행파일은 가상메모리를 가지고 있다는것이다.

    즉 다시말해 보조기억장치는 (프로그램 마다)가상메모리를 가지고 있고 많은 프로그램을 실행시키더라도 필요한 부분(필요한 가상메모리 공간)만 페이징을 통해 접근하여 메모리에 적재가 되고 당장 필요하지 않은 부분(필요없는 가상 메모리 공간)은 보조기억장치에 남아있게되는 것이다. 그래서 사람들은 보조기억장치에 가상메모리가 존재하기 때문에 주기억장치처럼 느끼게 되는 것이다. 

     

     

    단편화

    페이징기법으로 메모리에 접근해서 적재를 할때

    프로그램 부분이 페이지 크기보다 작아도 페이지 크기로 적재를 하기 때문에 내부단편화가 발생한다.

    내부 단편화를 줄이려면 페이지 크기를 줄이면 내부단편화가 줄어든다. 하지만 대신 페이지 매핑 과정이 많아지므로 오히려 효율이 떨어질 수 있다.

    반대로 페이지 크기보다 크더라도 결국 페이지 단위로 잘라서 적재하기 때문에 외부 단편화는 발생하지 않는다.

     

    세그먼테이션 기법

    세그먼테이션은 페이징과 다리 가변적인 세그먼트 영역으로 나누어 메모리에 접근한다.

     

    페이징은 커널을 컴파일 할 때 페이지 크기를 정하고, 해당 각각의 페이지 시작주소가 정해지기 때문에 컴파일이 완료된 이후에는 따로 기준주소와 크기를 정해줄 필요없고 매핑만 하면된다. 하지만 세그먼테이션 기법은 커널을 컴파일 시 기본적인 영역(커널)의 크기와 시작주소가 정해지고, 컴파일이 완료된 이후에 프로그램이 적재될때는 남아있는 메모리 공간에 맞게 가변적으로 크기를 정해야 하기 때문에 동적 할당을 통해서 기준주소와 크기를 정하고 매핑을 해야한다.

     

    그래서 세그먼테이션 기법으로 메모리에 접근하여 적재를 할때는 남아있는 메모리의 빈공간의 크기에 맞게 프로그램을  넣을 수 있으므로 내부단편화가 발생하지 않지만, 전체적으로는 여유가 있지만 부분적으로 메모리의 빈공간이 너무 작아 프로그램을 올릴 수 없다면 외부 단편화가 발생한다.

    댓글

Designed by Tistory.