관리 메뉴

코딩하는 락커

19. 주메모리의 관리: Chapter 9. Main Memory (Part 1) 본문

📀 운영체제

19. 주메모리의 관리: Chapter 9. Main Memory (Part 1)

락꿈사 2022. 7. 5. 18:19

9.1 배경

  • 메인 메모리는 각각의 주소가 할당된 일련의 바이트들로 구성됨
  • CPU는 Program Counter(PC)가 지시하는대로  메모리로부터 다음 수행할 명령어를 가져옴
    • 명령어는 필요한 경우 추가적인 데이터를 더 가져올 수 있으며
    • 반대로 데이터를 메모리로 내보낼 수 도 있음

 

 

기본 하드웨어Basic Hardware

  • 각각의 프로세스가 독립된 공간을 갖도록 보장해야 함
  • 개별적인 메모리 공간을 분리하기 위해서는 특정 프로세스만 접근할 수 있는 합법적인 주소 영역을 설정하고 프로세스가 합법 기준(base)과 상한(limit)이라고 불리는 두 개의 레지스터들을 사용하여 이러한 보호 기법을 제공함
    • 기준base 레지스터: 가장 작은 합법적인 물리 메모리 주소값을 저장하고 있음
    • 상한limit 레지스터: 주어진 영역의 크기를 저장함
    • ex) base = 30040, limit = 120900 이라고 할 때 프로그램은 30040 ~ 420940(30040 + 120900)까지 모든 주소를 접근할 수 있음
  • 메모리 공간의 보호는 CPU 하드웨어가 사용자 모드에서 만들어진 모든 주소와 레지스터를 비교함으로써 이루어짐
  • 사용자 모드에서 수행되는 프로그램이 운영체제의 메모리 공간이나 다른 사용자 프로그램의 메모리 공간에 접근하면 운영체제는 치명적인 오류로 간주하고 트랩을 발생시킴

 

 

주소의 할당Address Binding

  • 프로세스의 실행 과정
    • 프로그램은 원래 이진 실행 파일 형태로 디스크에 저장되어 있음
    • 실행하기 위해 프로그램을 메모리로 가져와서 Process Context 내에 배치함(이 시점에 가용한 CPU에서 실행할 수 있게 됨)
    • 프로세스가 실행되면 메모리에서 명령 및 데이터에 액세스 함
    • 프로세스가 종료되면 다른 프로세스에서 사용하기 위해 메모리가 회수됨
  • 사용자 프로세스가 00000번지부터 시작된다고 해서 이 프로그램이 이 메모리의 00000번지부터 올라와야 할 필요는 없음

  • 대부분의 경우 사용자 프로그램은 위 그림과 같이 여러 단계를 거쳐 실행됨
  • 이들 단계를 거치는 동안 주소들은 여러 가지 다른 표현 방식을 거치게 됨
    • 원시 프로그램(소스 프로그램): symbol 형태. ex) count
      • 컴파일러가 이 symbol주소를 rearrangeable 주소로 바인딩 함
    • 오브젝트 파일: rearrangeable 주소. ex) 이 모듈의 첫 번째 바이트로부터 열 네번째 바이트 주소
      • 링커나 로더가 rearrangeable 주소를 absolute 주소로 바인딩함
    • 실행 파일: absolute(physical 주소) 주소. 74014번지
  • 메모리 주소 공간에서 명령어와 데이터의 바인딩은 그 바인딩이 이루어지는 시점에 따라 구분됨
    • compile time 바인딩
    • load time 바인딩
    • execution time 바인딩

 

 

논리 대 물리 주소 공간Logical Versus Physical Address Space

  • 논리 주소logical address(rearrangeable 주소, virtual 주소, relative 주소): CPU가 생성하는 주소
  • 물리 주소physical address(absolute 주소): 메모리가 취급하게 되는 주소, 즉 메모리 주소 레지스터(MAR)에 주어지는 주소
  • 컴파일 또는 로드 시에 주소를 바인딩하면 논리 주소와 물리 주소가 같음
  • 그러나 실행 시간에 주소를 바인딩하면 논리 주소와 물리 주소가 다름
  • 논리 주소 공간logical address space: 프로그램에 의해 생성된 모든 논리 주소 집합
  • 물리 주소 공간physical address space: 논리 주소와 일치하는 모든 물리 주소 집합
  • 프로그램 실행 중에는 이와 같은 가상 주소를 물리 주소로 바꿔주어야 하는데, 이 변환mapping 작업은 하드웨어 장치인 메모리 관리 장치(memory management unit, MMU)에 의해 실행됨

  • 재배치 레지스터(기준 레지스터) 속에 들어 있는 값은 주소가 메모리로 보내질 때마다 그 모든 주소에 더해짐
    • ex) 재배치 레지스터 = 14000라고 하고 346번지에 액세스 하려고 할 때, 메인 메모리의 14346(14000+346)번지에 액세스하게 됨
  • 사용자 프로그램은 결코 실제적인 물리 주소에 접근하지 않음
  • 사용자 프로그램이 포인터를 생성하여 간접 로드 및 저장을 하기 위해 주소로 갈 때는 기준 레지스터에 대해 다시 바인딩 됨
  • 사용자 프로그램은 논리 주소를 사용한 것이고, 메모리 하드웨어는 논리 주소를 실제 주소로 바꾼 것임
  • 논리 주소와 실제 주소의 범위
    • 논리 주소의 범위: 0~max
    • 실제 주소의 범위: 기준값 R에 대해서 R+0 ~ R+max

 

 

동적 적재Dynamic Loading

  • 메모리 공간의 효율적 이용을 위해서는 동적 적재dynamic loading을 해야 함
  • 다이내믹 로딩에서 각 루틴은 실제 호출 되기 전까지는 메모리에 올라오지 않고 재배치 가능한 상태로 디스크에 대기하고 있음
  • 먼저 main 프로그램이 메모리에 올라와 실행됨
  • main 프로그램의 루틴이 다른 루틴을 호출하게 되면 호출된 루틴이 이미 메모리에 로드됐는지를 조사함
  • 만약  로드 되어 있지 않다면 재배치 가능 연결 적재기relocatbale linking loader가 불려 요구된 루틴을 메모리로 가져오고 이러한 변화를 테이블에 기록함
  • 그 후 CPU 제어는 중단되었던 루틴으로 보내짐

 

 

동적 연결 및 공유 라이브러리Dynamic Linking & Shared Libraries

  • 동적 연결 라이브러리DLL
    • 사용자 프로그램이 실행될 때 사용자 프로그램이 연결되는 시스템 라이브러리
  • 정적 연결static linking시 라이브러리가 이 프로그램의 이진 프로그램 이미지에 끼어 들어감
  • 반대로 동적 연결dynamic linking시에는 로딩이 연결linking이 실행 시기까지 미루어짐
  • DLL은 라이브러리를 여러 프로세스 간에 공유할 수 있어 메인 메모리에 DLL 인스턴스가 하나만 있ㅇ르 수 있다는 장점이 있어 공유 라이브러리라고도 부름
  • Windows 및 Linux 시스템에서 광범위하게 사용됨

 

 

9.2 연속 메모리 할당 Contiguous Memory Allocation

  • 메모리를 할당하는 가장 간단한 방법 중 하나는 프로세스를 메모리의 가변 크기 파티션에 할당하는 것임
  • 각 파티션에는 정확히 하나의 프로세스만 적재될 수 있음
  • 가변 파티션 기법에서 운영체제는 사용 가능함 메모리 부분과 사용 중인 부분을 나타내는 테이블을 유지함
  • 처음에는 모든 메모리가 사용자 프로세스에 사용 가능하며, 하나의 큰 사용 가능한 메모리 블록을 hole로 간주함
  • 그러나 결국에는 메모리에는 다양한 크기의 hole이 생기게됨
  • 따라서 동적 메모리 할당 문제dynamic storage allocation problem이 발생함
    • 동적 메모리 할당 문제: 일련의 가용 공간 리스트로부터 크기 n바이트 블록을 요구하는 것을 어떻게 만족시킬 것이냐를 결정하는 문제
  • 동적 메모리 할당 문제의 3가지 기법
    1. 최초 적합Firs fit
      • 첫 번째 사용 가능한 가용 공간을 할당함
    2. 최적 적합Best fit
      • 사용 가능한 공간 중에서 가장 작은 것을 택함
    3. 최악 적합Wort fit
      • 사용 가능한 공간 중 가장 큰 것을 택함
  • 모의실험을 통해서 최초 적합과 최적 적합 모두가 시간과 메모리 이용 효율 측면에서 최악 적합보다 좋다는 것이 입증됨

 

 

단편화Fragmentation

  • 최초 적합과 최적 적합 모두 외부 단편화external fragmentation 문으로 인해 어려움을 겪음
  • 외부 단편화
    • 유휴 공간들을 모두 합치면 충분한 공간이 되지만 그것들이 너무 작은 조각들로 여러 곳에 분산되어 있을 때 발생함
    • 즉, 메모리가 너무 많은 수의 매우 작은 조각들로 단편화 되어 있는 문제를 말함
  • 일반적으로 메모리를 아주 작은 공간들로 분할하고 프로세스가 요청하면 할당을 항상 이 분할된 크기의 정수배로만 해주는데, 이것을 페이징 기법이라고 하며, 이 경우 내부 단편화Internal fragmentation 문제가 발생함
  • 내부 단편화
    • 할당된 공간이 요구된 공간보다 약간 더 클 경우 이 두 크기의 사이의 남는 부분이 사용되지 못하는 문제를 말함

 

 

세그멘테이션

  • 페이징과 유사하지만 위와 같이 종류에 따라서 가변 크기의 페이지를 사용함

 

Comments