[OS] 메모리 관리

Jaehyeong Kwon·2022년 5월 2일
0

메모리 관리 개념

어떤 프로그램이든 프로세스가 되어 메모리에 적재되어야 실행이 가능하다. 메모리는 중요한 공간이고 한정된 메모리를 다중 프로그래밍 환경에서 이용하기 위해서는 여러 프로세스가 함께 메모리를 사용하므로 효율적인 관리가 필요하다.

메모리 관리자를 통해 메모리 관리가 이뤄지고, 메모리 관리 장치와 OS 관리 모듈과 함께 존재한다.
적재 정책은 디스크에서 메모리로 프로세스를 언제 가져와야 할지를 정하는 것
배치 정책은 디스크에서 메모리로 가져온 프로세스를 어느 위치에 저장할 것인지 정하는 것이다.
대치 정책은 메모리가 충분하지 않을 때 적재된 프로세스 중 제거할 프로세스를 결정하는 방법니다.


논리적, 물리적, 메모리 매핑

메모리 주소는 크게 두 가지로 나눌 수 있다.

  • 논리적 주소

    논리적 주소는 가상 주소라고도 하며 프로그래머가 작성하는 목적 코드가 저장된 공간이나 프로그램에서 사용되는 배열, 구조체 등이 이에 해당함

  • 물리적 주소

    물리적 주소는 논리적 주소에 대응되는 실제 주소로 메모리 칩이나 디스크 공간에서 만든다. 논리적 주소와 물리적 주소 변환은 MMU에서 관리한다.

MMU는 CPU에서 논리적 주소를 받아 고정 분할, 동적 분할, 페이징, 세그멘테이션을 이용한 변환 방법을 이용하여 물리적 주소로 변환 시킨다.


바인딩

속성과 개체 사이 또는 연산과 기호 사이와 같은 연관을 말함
변수에 변수와 관련된 속성을 연관 시키는 것
값들이 확정되어 구속된 상태


바인딩 타임

프로그램에서 변수들이 갖는 속성이나 값이 완전히 결정되는 시간.


바인딩 타임의 종류

  • 컴파일 시간
    프로세스가 메모리에 적재될 위치를 컴파일 과정에서 알 수 있다면 바로 물리적 주소를 생성할 수 있다.

원시 프로그램을 번역할 때 이루어지며, Data, Stack 등 메모리에 들어갈 변수가 정해짐.
정적 바인딩, 변수의 이름 또는 형과 프로그램 문장 구조

고레벨 언어를 Binary File, Obj 파일로 전환

  • 적재 시간
    프로세스를 어디에 적재해야 할 지 컴파일 과정에서 알려주지 않으면 컴파일러는 대체 가능한 상대 주소를 생성한다.

변수를 메모리에 적재할 때 운영 체제에서 메모리로 프로그램을 불러와 실행한다.

  • 실행 시간
    프로세스가 동일한 장소에서 작동하면 적재 시간 과정에서 바인딩 할 수 있지만 프로세스를 실행하는 도중에 메모리의 한 세그먼트에서 다른 세그먼트로 이동한다면 바인딩은 지연된다.

프로그램을 실행할 때 이루어지며 변수의 값을 확정
변수의 기억 장소 할당

링커와 로더

  • 링커
    모든 오브젝트 파일들을 하나의 오브젝트 파일로 합친다. (Executable file)
  • 로더
    Executable file을 읽는다. 메인 메모리에 오브젝트 파일에 있는 내용들을 올리고 context들을 만들고 프로그램을 수행할 수 있도록함.

정적 바인딩

실행 시간 전에 일어나고, 실행 중에 변하지 않는 상태로 유지하는 바인딩

동적 바인딩

실행 시간 중에 일어나거나 프로그램 실행 과정에서 변경되는 것

할당

기억 장소 할당 : 변수에 메모리 공간을 바인딩하는 과정

정적 할당

메모리에 적재될 크기를 미리 아는 것
Run-time 에 각 타입에 맞는 메모리 영역에 할당

동적 할당

외부 환경에 의해 변화하여 크기를 미리 알 수 없는 것
명시적인 명령어에 의해 실행되는 할당

profile
나무와 같이 성장하는 사람

0개의 댓글