[CS Study : OS] 물리 메모리 관리

Byuk_mm·2022년 8월 12일
0
post-thumbnail

컴퓨터 과학에 대한 지식을 습득하고 정리하는 기록용 포스팅입니다.
예외를 판단하는 사고를 기르고, 효율적인 코드를 작성하기 위해
컴퓨터 과학 지식을 활용하는 것을 목표로 합니다.


✅ 메모리 주소


📌 32bit CPU와 64bit CPU의 차이

  • CPU의 비트 : 한 번에 다룰 수 있는 데이터의 최대 크기를 의미한다.
    즉, 32bit CPU는 한 번에 다룰 수 있는 데이터의 최대 크기가 32bit이다.

  • CPU의 비트는 메모리 주소 공간(address space)의 크기와도 연관이 있다.
    32bit CPU의 경우 메모리 주소를 지정하는 레지스터인 메모리 주소 레지터(MAR)의 크기가 32bit이므로 메모리 주소의 범위가 0~2^32-1이다.

    이를 16진수로 나타내면 00000000~FFFFFFFF이며 총크기는 2^32B, 약 4GB가 된다.
    64bit CPU는 레지스터의 크기, 버스의 대역폭, 한 번에 처리되는 데이터의 최대 크기 등이 32bit CPU의 2배이다. 한번에 다룰 수 있는 데이터의 크기가 2^64로 거의 무한대에 가까운 메모리를 사용 할 수 있다.


📌 절대 주소와 상대 주소

절대 주소

  • 실제 물리 주소(pysical address)를 가르키며, 메모리 관리자 입장에서 바라본 주소이다. 즉, 메모리 주소 레지스터가 사용하는 주소로, 컴퓨터에 꽂힌 램 메모리의 실제 주소를 말한다.

  • 메모리 관리자는 절대 주소를 사용하지만 사용자 입장에서는 절대 주소는 불편하고 위험하다. 절대 주소를 사용하면 매번 운영체제 영역을 확인해야하기 때문이다.

  • 또한 운영체제 영역의 주소가 사용자에게 노출되면 실수나 고의적인 조작으로 운영체제 영역을 침범할 수 있다.

  • 물리 주소를 사용하는 주소 공간을 물리 주소 공간이라고 한다.


상대 주소

  • 사용자 영역이 시작되는 번지를 0번지로 변경하여 사용하는 주소 지정 방식이다.

  • 사용자 프로세스 입장에서 바라본 주소이며, 절대 주소와 관계없이 항상 0번지부터 시작된다.

  • 물리 주소와 관계없이 항상 0번지부터 시작하기 때문에 편리하다.

  • 상대 주소를 사용하는 주소 공간을 논리 주소 공간이라고 한다.




✅ 단일 프로그래밍 환경에서의 메모리 할당


📌 메모리 오버레이

  • 프로그램의 크기가 실제 메모리보다 클 때 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라서 가져오는 기법을 메모리 오버레이라고한다.

  • 메모리 오버레이의 경우 프로그램을 몇 개의 모듈로 나누고 필요할 때마다 모듈을 메모리에 가져와 사용한다.

  • 한정된 메모리에서 메모리보다 큰 프로그램의 실행이 가능해지며, 프로그램 전체가 아니라 일부만 메모리에 올라와도 실행이 가능하다.


📌 스왑

  • 메모리가 모자라서 좇겨난 프로세스는 저장장치의 특별한 공간에 모아두는 이러한 영역을 스왑 영역(swap space)라고 한다.

  • 스왑 인 : 스왑 영역에서 메모리로 데이터를 가져오는 작업.
    스왑 아웃 : 스왑 영역으로 데이터를 내보내는 작업.

  • 스왑 영역은 메모리 관리자가 관리한다.
    메모리에서 쫓겨났다가 다시 돌아가는 데이터가 머무는 곳이기 때문이다.




✅ 다중 프로그래밍 환경에서의 메모리 할당


📌 메모리 분할 방식

  • 가변 분할 방식 : 프로세스의 크기에 다라 메모리를 나누는 방식.

  • 가변 분할 방식 : 프로세스의 크기와 상관없이 메모리를 고정된 크기로 나누는 방식.


📌 가변 분할 방식


특징

  • 프로세스의 크기에 맞게 메모리가 분할되므로 메모리의 영역이 각각 다르다.
    한 프로세스가 연속된 공간에 배치되기 때문에 연속 메모리 할당이라고 한다.

  • 프로세스를 한 덩어리로 처리하여 하나의 프로세스를 연속된 공간에 배치한다.

  • 메모리 통합 등의 부가적인 작업이 필요하기 때문에, 메모리 관리가 복잡하다.

  • 가상 메모리 시스템에서는 세그먼테이션 기법이라고 불린다.

  • 가변 분할 방식은 프로세스의 바깥쪽에 작은 메모리 공간 조각이 발생하는 외부 단편화가 발생한다.

  • 외부 단편화를 해결하기 위해 메모리 배치 방식이나 조각 모음을 사용한다.


메모리 배치 방식

  • 최초 배치 방식 : 단편화를 고려하지 않는 것으로, 프로세스를 메모리의 빈 공간에 배치 할 때 메모리에서 적재 가능한 공간을 순서대로 찾다가 첫 번째로 발견한 공간에 프로세스를 배치하는 방법이다.

  • 최적 배치 방식 : 메모리의 빈 공간을 모두 확인한 후 적당한 크기 가운데 가장 작은 공간에 프로세스를 배치하는 방법이다.
    최적 배치 방식은 빈 공간을 모두 확인하는 부가적인 작업이 있지만 딱 맞는 공간을 찾을 경우 단편화가 일어나지 않는다. 하지만 딱 맞는 공간이 없을 때는 아주 작은 조각을 만들어 낸다.

  • 최악 배치 방식 : 최적 배치와 정반대인 최악 배치는 빈 공간을 모두 확인한 후 가장 큰 공간에 프로세스를 배치하는 방식이다.
    최적 배치 방식에서는 프로세스를 배치하고 남은 공간이 작아 쓸데 없지만, 최악 배치 방식은 프로세스를 배치하고 남은 공간이 크기 때문에 쓸모가 있다. 하지만 빈 공간의 크기가 클 때는 효과적이지만, 빈 공간의 크기가 점점 줄어들면 최적 배치 방식처럼 작은 조각을 만들어 낸다.


조각 모음

  • 앞선 메모리 배치 방식을 사용해도 단편화 현상이 발생한다. 이렇게 단편화 현상이 발생하면 이미 배치된 프로세스를 옆으로 옮겨 빈 공간들을 하나의 큰 덩어리로 만들어야 하는데 이것이 조각 모음이다.

  • 조각 모음의 과정

    1. 조각 모음을 하기 위해 이동할 프로세스의 동작을 멈춘다.
    2. 프로세스를 적당한 위치로 이동한다. 프로세스가 원래의 위치에서 이동하기 때문에 프로세스의 상대 주소값을 바꾼다.
    3. 위 작업을 다 마친 후 프로세스를 다시 시작한다.

📌 고정 분할 방식


특징

  • 프로세스의 크기에 상관없이 메모리가 같은 크기로 나뉘며, 큰 프로세스가 메모리에 올라오면 여러 조각으로 나뉘어 배치된다.

  • 한 프로세스가 분산되어 배치되기 때문에 비연속 메모리 할당이라고 한다.

  • 메모리를 일정한 크기로 나누어 관리하기 때문에 메모리가 관리가 수월하다. 가변 분할 방식의 메모리 통합 같은 부가적인 작업을 할 필요가 없다.

  • 하지만, 각 메모리 조각에 프로세스를 배치하고 공간이 남는 현상인 내부 단편화가 발생한다.

  • 가상 메모리 시스템에서는 페이징이라고 한다.


📌 버디 배치 방식


  • 프로 세스의 크기에 맞게 메모리를 계속해서 1/2로 자르고 프로세스를 메모리에 배치한 후, 프로세스가 종료되면 주변의 빈 조각과 합쳐서 하나의 큰 덩어리를 만드는 방식.

  • 가변 분할 방식고정 분할 방식의 특징을 모두 가지고 있다.
    가변 분할 방식처럼 메모리가 프로세스 크기대로 나뉘며,
    고정 분할 방식처럼 하나의 구역에 다른 프로세스가 들어갈 수 없고, 내부 단편화가 발생한다.

  • 버디 배치 방식이 가변 분할 방식보다 효과적으로 공간을 관리할 수 있는 이유는 비슷한 크기의 덩어리가 서로 모여 있어 통합하기 쉽기 때문이다.

  • 하지만, 효율적인 공간 관리 측면에서 보면 고정 분할 방식버디 배치 방식은 비슷한 수준이기 때문에 메모리 관리 측면에서 단순한 고정 분할 방식을 많이 사용한다.

  • 현재 운영체제에서는 기본적으로 고정 분할 방식을 사용하면서 일부분은 가변 분할 방식을 혼합하고 있다.




✅ 참고

도서 : 쉽게 배우는 운영체제

profile
어디야 벽벽 / 블로그 이전 -> byuk.dev

0개의 댓글