Skip to content

Latest commit

 

History

History
120 lines (76 loc) · 9.23 KB

김라윤.7(1)장 - 메모리 관리.md

File metadata and controls

120 lines (76 loc) · 9.23 KB
  • 주소_address_ : 서로 다른 위치를 구분하기 위해 사용하는 일련의 숫자로 구성된다.

1. 주소 바인딩

  • 프로그램이 실행을 위해 메모링 적재되면 그 프로세스를 위한 독자적인 주소 공간이 생성되는데, 이 주소를 논리적 주소 logical address 혹은 가상 주소 virtual address 라고 한다.

  • 보통 물리적 메모리의 낮은 주소 영역에는 운영체제가 올라가고, 높은 주소 영역에는 사용자 프로세스들이 올라간다.

주소 바인딩 address binding

프로세스의 논리적 주소를 물리적 메모리 주소로 연결시켜주는 작업

  • 주소 바인딩의 방식은 프로그램이 적재되는 물리적 메모리의 주소가 결정되는 시기에 따라 세가지로 분류함

    • 컴파일 타임 바인딩 compile time binding : 물리적 메모리 주소가 프로그램을 컴파일할 때 결정 (= 절대코드를 생성하는 바인딩방식)

    • 로드 타임 바인딩 load time binding : 프로그램의 실행이 시작될 때에 물리적 메모리 주소가 결정되는 주소 바인딩 방식

      • 로더의 책임하에 물리적 메모리 주소가 부여되며 프로그램이 종료될 때까지 물리적 메모리상의 위치고정
      • 로드 타임 바인딩은 컴파일러가 재배치 가능 코드_relocatable code_를 생성한 경우에 가능한 주소 바인딩 방식
    • 실행시간 바인딩 execution time binding 또는 run time binding : 프로그램이 실행을 시작한 후에도 그 프로그램이 위치한 물리적 메모리상의 주소가 변경될 수 있는 바인딩 방식

      • CPU가 주소를 참조할 때마다 해당 데이터가 물리적 메모리의 어느 위치에 존재하는지, 주소 매핑 테이블 address mapping table 을 이용해 바인딩을 점검해야 한다.

      • 다른 방식들과 달리 실행시간 바인딩방식이 가능하기 위해 MMU 라는 하드웨어적인 지원 필요

        • MMU Memory Management Unit : 논리적 주소를 물리적 주소로 매핑해주는 하드웨어 장치

        • MMU 기법 MMU scheme 은 MMU를 이용해 가장 기본저인 방식으로 주소 변환 수행하는 것

  • 우리가 흔히 사용하는 다중 프로그래밍 환경에서 물리적 메모리 안에는 여러 개의 프로세스가 동시에 올라가 있는 경우가 대부분.

  • 따라서 위의 MMU 방식을 사용하여 주소 변환을 했을 경우 CPU가 요청한 논리적 주소값과 재배치 레지스터 안에 있는 값을 더한 결과가 해당 프로세스의 주소 공간을 벗어나는 경우의 발생 가능성.

    • 메모리 보안이 이루어지지 않아 다른 사람이 수행 중인 프로그램 영역을 침범
    • 운영체제가 존재하는 메모리 영역을 변경해 시스템에 치명적인 결과를 초래할 수 있다.

운영체제는 이러한 특수한 상황이 발생하는 것을 방지하기 위해 한계 레지스터라는 또 하나의 레지스터를 사용


2. 메모리 관리와 관련된 용어

1) 동적로딩 dynamic loading

  • 여러 프로그램이 동시에 메모리에 올라가서 수행되는 다중 프로그래밍 환경에서 메모리 사용의 효율성을 높이기 위해 사용하는 기법 중 하나.

2) 동적연결 dynamic linking

  • 연결 linking : 프로그래머가 작성한 소스 코드를 컴파일하여 생성된 목적파일 _object file_과, 이미 컴파일된 라이브러리 파일 _library file_들을 묶어 하나의 실행파일을 생성하는 과정

  • 동적연결 : 컴파일을 통해 생성된 목적 파일과 라이브러리 파일 사이의 연결을 프로그램의 실행 시점까지 지연시키는 기법

  • 정적연결 static linking : 프로그래머가 작성한 코드와 라이브러리 코드가 모두 합쳐져서 실행 파일이 생성된다. (동적연결과 대비되는 개념)

    • 따라서 실행파일의 크기가 상대적으로 크며, 동일한 라이브러리를 각 프로세스가 개별적으로 메모리에 적재해야 하므로 물리적 메모리가 낭비되는 단점이 있다.

3) 중첩 overlays

  • 중첩 : 프로세스의 주소 공간을 분할해 실제 필요한 부분만을 메모리에 적재하는 기법

4) 스와핑 swapping

  • 메모리에 올라온 프로세스의 주소 공간 전체를 디스크의 스왑영역에 일시적으로 내려놓는 것을 말한다.

    • 이 때 스왑영역은 백킹스토어_backing store_ 라고도 부르며, 디스크 내에 파일 시스템과는 별도로 존재하는 일정 영역을 말한다.
  • 스왑 인_swap in_ : 스와핑에서 일어나는 작업의 방향에 따라 디스크에서 메모리로 올리는 작업

  • 스왑 아웃_swap out_ : 메모리에서 디스크로 내리는 작업


3. 물리적 메모리의 할당 방식

물리적 메모리는 운영체제 상주 영역과 사용자 프로세스 영역으로 나뉨.

  • 운영체제 상주 영역은 언터럽트 벡터와 함께 물리적 메모리의 낮은 영역을 사용하며 커널이 위치함.

  • 사용자 프로세스 영역은 높은 메모리 주소 영역을 사용하며 여러 사용자 프로세스들이 적재되어 실행됨.

  • 사용자 프로세스 영역의 관리 방법은 프로세스를 메모리에 올리는 방식에 따라 연속할당_contigueous allocation_ 방식과 불연속할당_noncontiguous allocation_ 방식으로 나뉨.

1) 연속할당 방식

프로세스를 메모리에 올릴 때 주소 공간을 여러 개로 분할하지 않고 물리적 메모리의 연속적인 공간에 올리는 방식

고정분할 방식_fixed partition allocation_

물리적 메모리를 주어진 개수만큼의 영구적인 분할로 미리 나누고 각 분할에 하나의 프로세스를 적재해 실행하는 방식.

  • 분할의 크기는 동일할 수 있고 다르게 할 수 도 있으나 하나의 분할된 영역에 하나의 프로그램만 적재 가능함.

  • 고정분할 방식은 동시에 메모리에 올릴 수 있는 프로그램의 수가 고정되어 있으며 수행 가능한 프로그램의 최대 크기또한 제한되어 융통성이 떨어짐.

  • 고정분할 방식은 외부조각과 내부조각이 발생할 수 있음.

  • 외부조각은 프로그램의 크기가 분할 크기보다 커 해달 분할의 공간이 비어있어도 사용될 수 없는 작은 분할을 말함.

  • 해당 분할보다 작은 프로그램이 생기면 적재될 수도 있음.

  • 내부조각은 프로그램이 적재되고도 남은 메모리 공간을 말함.

가변분할 방식_variable partition allocation_

메모리에 적재되는 프로그램의 크기에 따라 분할의 크기, 개수가 동적으로 변하는 방식.

  • 내부조각이 발생할 일은 없으나 외부조각은 발생할 수 있음.

  • 가용 공간이란 사용되지 않은 메모리 공간으로 메모리 내 산발적으로 존재할 수 있음.

  • 가용 공간들을 효율적으로 관리하기 위해 훈영체제는 이미 사용 중인 메모리 공간과 사용하고 있지 않은 가용공간에 대한 정보를 각각 유지해야 함.

[동적 메모리 할당 문제 해별 방법]

  • 최초적합 방법_first-fit_ : 크기가 n 이상인 가용 공간 중 가장 먼저 찾아지는 곳에 프로세스를 할당하는 것. 가용 공간이 프로그램 크기보다 작으면 건너뜀.

    • 그렇지 않은 최초 공간에 프로그램을 올리는 방법으로 모든 공간을 확인하지 않아 시간적 측면에서 효율적임.
  • 최적적합 방법_best-fit_ : 크기가 n 이상인 가장 작은 가용 공간을 찾아 그곳에 새로운 프로그램을 할당하는 것.

    • 가용공간이 크기순으로 정령되어 있지 않은 경우 모든 가용 공간을 탐색해 시간적 오버헤드가 발행하고 다수의 매우 작은 가용공간들이 형성될 수 있음. 공간적 측면에선 가장 효율적임.
  • 최악적합 방식_worst-fit_ : 가용 공간 중 가장 큰 곳에 새로운 프로그램을 할당하는 것.

    • 모든 가용 공간 리스트를 탐색하는 오버헤드가 발생함. 큰 가용 공간을 먼저 소진한다는 단점이 있음.

2) 불연속할당 기법

하나의 프로세스가 물리적 메모리의 여러 위치에 분산되어 올라갈 수 있는 메모리 할당 기법.

  • 하나의 프로그램을 분할하는 기준에 따라 동일한 크기고 나누는 페이징 기법

  • 크기는 일정하지 않지만 의미 단위로 나누어 메모리에 올리는 세그먼테이션_segmentation_ 기법

  • 세그먼테이션을 기본으로 하며 동일 크기의 페이지로 나누는 페이지드 세그먼테이션_paged segmentation_ 기법 등이 있음.