OS | Main Memory Management (1)

yeonk·2022년 7월 6일
0

computer science

목록 보기
3/3
post-thumbnail

메모리의 역사


과거에는 메모리의 비용 자체가 비싸서 관리가 매우 중요했다.
현재는 과거에 비해 비용은 저렴해졌으나 프로그램 변천, 프로그램 크기 증가, 처리 데이터 크기 증가 등의 이유로 여전히 메모리는 부족한 실정이다.
그렇기 때문에 메모리를 효과적으로 관리할 수 있는 방법이 필요하다.

그 방법으로 메모리 낭비 줄이기, 가상 메모리(virtual memory) 사용이 있다.





프로그램 메모리 로드


  • 메모리 구조: 주소(Address)+ 데이터(data)

  • 프로그래밍 개발에서 파일

    • 원천 파일(Source file): 고수준 언어 또는 어셈블리 언어
    • 목적 파일(Object file): 컴파일 또는 어셈블 결과
    • 실행 파일(Executable file): 링크 결과
  • 컴파일러(compiler), 어셈블러(assembler), 링커(linker), 로더(loader)

출처: https://tutledeveoper.wordpress.com/2018/07/22/linux-linker-loader/



  • 프로그램 실행 시 code + data + stack 구조로 메모리에 로드

  • 실행파일을 메모리에 올릴 때는 메모리 내에서의 위치다중 프로그래밍 환경을 고려

  • MMU 사용: 재배치 레지스터(Relocation register)





MMU

메모리 관리 장치(Memory Management Unit, MMU)는 CPU가 메모리에 접근하는 것을 관리하는 컴퓨터 하드웨어 부품이다.
가상 메모리 주소를 실제 메모리 주소로 변환하며, 메모리 보호, 캐시 관리, 버스 중재 등의 역할을 담당한다.

  • 재배치 레지스터(Relocation register) : 수행중인 컴퓨터 프로그램을 다른 곳으로 옮길 수 있도록 해준다. 주기억장치 내 프로그램의 기본주소(base address)가 재배치 레스지터에 기억된다. 프로그램이 수행되면서 계속해서 프로그램에 의해 생성되는 주소에다 재배치 레지스터의 내용을 더해서 실제 주소를 계산한다.



출처:https://ko.wikipedia.org/wiki/%EB%A9%94%EB%AA%A8%EB%A6%AC_%EA%B4%80%EB%A6%AC_%EC%9E%A5%EC%B9%98





주소 구분

  • 논리 주소(logical address)

    • CPU가 생성한 가상 주소
    • 프로그램을 참조하여 CPU가 생성 한 모든 논리 주소 집합
  • 물리 주소 (physical address)

    • 메모리 내의 위치
    • 해당 논리 주소에 매핑 된 모든 실제 주소 집합
    • 물리적 주소가 MMU에 의해 계산





메모리 낭비 방지




동적 적재 (Dynamic Loading)

모든 루틴(routine)과 데이터(data), 클래스 가 다 사용되는 것은 아니기 때문에 프로그램 실행에 반드시 필요한 루틴 및 데이터만 적재한다.





동적 연결 (Dynamic Linking)

컴퓨터 프로그램이 메모리로 라이브러리 또는 다른 프로그램을 링크하는 방식
CPU의 메모리 사용량을 줄이기 위해 일부 라이브러리 코드의 링크를 미룸
미뤄진 라이브러리 코드는 생성된 실행 파일에 포함되지 않으며, 동적 링크 라이브러리(.dll)에 저장
또한 이는 프로그램 실행 도중 필요시, CPU의 호출에 의해 링크

linux에서는 공유 라이브러리 (shared library), windows 에서는 동적 라이브러리(Dynamic Linking Library, DLL)로 사용

  • 여러 프로그램에 공통적으로 사용되는 라이브러리 루틴(library routine)를 메모리에 중복으로 올리는 낭비

  • 라이브러리 루틴 연결을 실행 시까지 미룸

  • 하나의 라이브러리 루틴만 메모리에 적재

  • 다른 애플리케이션 실행 시 루틴과 연결(link)





Swapping

부족한 메모리 공간을 좀 더 효율적으로 관리하려는 메모리 관리 기법. CPU에서 시행되지 않는 프로세스 즉 ready상태이거나 waiting상태에 있는 프로세스들 중 일부를 메모리 안에 보관하지 않고 하드디스크 같은 저장장치에 보관한다는 뜻

  • 메모리에 적재되어 있으나 현재 사용되지 않고 있는 프로세스 이미지를 메모리 활용도를 높이기 위해 Backing store(=swap device)로 몰아내는 것

  • 프로세스 크기가 크면 backing store 입출력에 따른 부담이 큼

출처: https://goodmilktea.tistory.com/31





연속 메모리 할당(Contiguous Memory Allocation)


  • 각 프로세스가 하나의 연속된 메모리 공간에 포함

  • 프로세스가 필요로 하는 메모리 요구량을 미리 분석 및 결정 후 그 프로세스의 메모리를 하나의 덩어리로 설정

  • 실제 메모리에 할당 해주는 원리





메모리 단편화

Hole 들이 불연속하게 흩어져 있기 때문에 프로세스를 적재할 수 없는 것을 메모리 단편화(Memory fragmentation) 라고 한다.

  • 외부 단편화(external fragmentation): 프로세스들의 메모리 영역 내부에서가 아니라 프로세스가 메모리를 할당 받고 해제될 때 그 밖에 있는 메모리에서 사용하지 못하는 단편화

  • 내부 단편화(internal fragmentation): 다른 프로세스가 사용할 수 있는 메모리 공간이 아니라 해당 프로세스가 사용하는 메모리 공간 안에 비어있는것





연속 메모리 할당 방식

최초 적합(First fit)

  • 순차적으로 메모리 내부에서 확인할 때 요청한 크기를 만족하는 첫 번째 가용 공간을 할당

  • 시작점은 알고리즘에 따름

  • 검색 속도가 빠름

  • 메모리 이용 효율 높음



최적 적합(Best fit)

  • 요청한 크기를 만족하는 가용 공간 중 가장 작은 것을 할당(가장 알맞는 공간에 할당)

  • 잔여 가용 공간 크기 최소화

  • 메모리 이용 효율 높음



최악 적합(Worst fit)

  • 가장 큰 가용 공간 할당

  • 잔여 가용 공간이 커서 활용 가능성이 높음

  • 검색 속도 느림

  • 메모리 이용 효율 낮음



외부 단편화로 인한 메모리 낭비는 1/3 수준이며, 이를 해결하기 위한 방법으로 Compactionpaging이 있다.
그 중 compaction은 프로세스와 홀의 크기를 고려해야하기 때문에 복잡하여 최적 알고리즘이 없고, 메모리를 움직여야하기 때문에 높은 계산 부담이 있다.





참고 자료


운영체제 강의

메모리 관리 장치

[Linux] Linker & Loader

운영 체제의 논리 주소와 실제 주소의 차이점

동적 적재

7. 메모리 관리 기법(2) - 스와핑, 연속 메모리 할당

0개의 댓글