Main Memory Management

Noah·2022년 8월 6일
0

OS Study

목록 보기
12/16

지금까지의 포스팅들은 OS의 개요와 OS의 Process Management에 대한 내용들을 공부했습니다.

이번 포스팅 부터 OS의 또 다른 기능인 Main Memory Management에 대해서 알아보도록 하겠습니다.

Main Memory Management

  • 컴퓨터를 사용하는데 있어서 메모리는 항상 부족하다
  • 시간이 흐르면서 메모리의 용량은 많이 증가하였으나, 그만큼 프로그램들의 크기도 함께 증가하였다.
  • 그럼 어떻게 메모리를 효과적으로 사용해야 하는가?
    1. 메모리 낭비 없애기
    2. 가상 메모리 사용 (Virtual Memory)

메모리 낭비 방지

  1. Dynamic Loading

    • 동적 적재
    • 프로그램 실행에 반드시 필요한 루틴 / 데이터만 적재
      • 모든 루틴을 미리 다 적재하는것은 아니다.
        • 여기서 말하는 루틴은 코드의 일부분 (함수, 프로시저)를 이야기 한다.
        • 예를 들어서 파일을 읽었을 때 예외가 발생했을때 실행되는 루틴에 대해서는 굳이 미리 적재할 필요가 없기 때문에 실행 시 해당 부분이 필요하다면 적재하는 방식을 사용한다.
      • 모든 데이터가 다 사용되는 것은 아니다
        • 배열의 크기를 int[80000] 이렇게 잡아놔도, 그렇게 많은 크기를 다 적재하지는 않는다.
      • 모든 클래스가 다 사용되는 것은 아니다 (Java)
      • 정리 : 프로그램 실행에 있어서 필요로 하는 부분에 대해서만 메모리에 올려놓고 사용한다.
  1. Dynamic Linking

    • 동적 연결

    • A 프로그램과 B 프로그램이 있을 때, 공통으로 사용되는 라이브러리를 둘 다 메모리에 중복으로 올리는 것은 낭비를 발생한다.

    • 해결방법!! -> 라이브러리 루틴 연결을 실행 시까지 미루기

      • 오직 하나의 라이브러리 루틴만 메모리에 적재시킨 후, 다른 프로그램에서 실행 시 미리 올려둔 루틴과 연결을 시켜서 사용한다.
      • 그럼 라이브러리 루틴이 미리 메모리에 없으면?
        • 그때 적재해서 사용
  1. Swapping

    • 메모리에 적재되어 있으나 현재 사용되지 않고 있는 프로세스 이미지를 swap-device로 이동
      • 메모리 활용도를 높이기 위해 swap device 사용
      • swap-out : swap-device로 보내는것
      • swap-in : swap-device에서 가져오기
    • Relocation Register 사용으로 메모리 적재 위치는 무관하다
    • 프로세스 크기가 크면 swap device 입출력에 따른 비용이 크다.
profile
BackEnd 개발자가 되기 위해 공부중입니다!

0개의 댓글