본문 바로가기
컴퓨터 지식

(운영체제,OS) 메모리 관리 전략 간단 정리 -1

by LiveData 2018. 12. 7.
반응형

메모리 관리 전략



  • 프로그램은 실행하기 전에 메모리로 올라와 있어야 한다.
  • 주된 메모리와 레지스터는 CPU 저장된다.
  • 메모리 장치는 메모리 주소의 연속만을 알 뿐 , 이 주소가 어떻게 생성되었는지 무엇을 가르키는지 모른다. 레지스터는 하나의 CPU clock에 접근한다.
  • 주된 메모리의 접근을 완료하기 위해서는 많은 CPU 클럭 틱 사이클 소요, 이 경우 CPU는 필요한 데이터가 없어서 명령어를 실행하지 못하고 지연되는 stall 현상 발생하게 된다.
  • 주 메모리와 CPU 사이에 cache
  • 특정 프로세스만 접근할 수 있는 합법적인 메모리 주소 영역을 설정한다.



base limit registers 로 보호 기법을 제공한다.

CPU는 해당 사용자의 baselimit를 확인하기 위해 사용자 모드에서 생성된 모든 메모리를 접근하여 확인합니다.

baselimit는 여러 가지 특권 명령을 사용하는 운영체제 에서만 적재된다. 특권은 커널모드에서만 실행, 사용자 프로그램이 레지스터를 변경하는 것을 막는다.


 


Address Binding

  • 프로그램은 원래 이진 실행 파일 형태로 디스크에 저장된다. 디스크에서 메모리로 들어오기를 기다리고 있는 집합 ->input queue
  • 컴파일러는 심벌 주소를 재배치 가능 주소로 바인딩 시킨다
  • Linker or loader 은 이 재배치 가능 주소를 절대주소로 바인딩 시킨다.
  • 각각의 바인딩 과정은 한 주소공간에서 다른 주소 공간으로 맵핑하는 것이다.


 

Compile time : 만일 프로세스가 메모리 내에 들어갈 위치를 컴파일 시간에 미리 알 수 있으면 컴파일러는 절대 코드를 생성할 수 있다.

Load time : 만일 프로세스가 메모리 내 어디로 올라오게 될지를 컴파일 시점에 알지 못하면 컴파일러는 일단 이진 코드를 재배치 가능 코드로 만들어야 한다.

execution time: 만약 프로세스가 실행하는 중간에 메모리 내의 한 세그먼트로부터 다른 세그먼트로 옮겨질 수 있다면 우리는 바인딩이 실행시간까지 허용되었다고 이야기 한다.

 


 


논리적 공간과 물리적 공간

  • CPU가 생성하는 일반적인 주소를 논리주소(가상메모리)라 하며, 메모리가 취급하게 되는 주소(MAR Memory Access Register)는 일반적으로 물리주소라 한다.

 



컴파일 시 바인딩과 적재 시 바인딩 기법의 경우에는 논리주소와 물리주소가 같다. 실행시간 바인딩 기법에서는 다르다.

  • 논리 주소 공간 프로그램에 의해 생성된 모든 논리주소 집합
  • 물리 주소 공간 논리 주소에 상응하는 모든 물리 주소 집합

 



Memory-Management Unit(MMU)

  • 프로그램 실행 중에는 이와 같이 가상 주소를 물리 주소로 바꾸어줘야 하는데 이 변환작업을 한다. base registerrelocation register라고 부른다.
  • 사용자 프로그램은 실제적인 물리 주소를 결코 알 수 없다.



 


 

Dynamic Loading 동적 적재

  • 메모리 공간의 이용율을 높이기 위해 동적 적재를 해야 한다.
  • 각 루틴은 실제 호출되기 전까지는 메모리에 올라오지 않고 재배치 가능한 상태로 디스크에서 대기하고 있다.
  • 사용하지 않은 루틴들의 경우 절대로 미리 적재되지 않는다. 아주 간혹 발생하면서도 많은 양의 코드를 필요로 하는 경우에 특히 유용하다.
  • 동적 적재는 운영체제로부터 특별한 지원을 필요로 하지 않는다. 사용자 자신이 프로그램 설계에 책임. OS는 동적적재를 구현하는 라이브러리 루틴을 제공한다.

 



Static linking 

  • 시스템 라이브러리가 다른 오브젝트 모듈처럼 취급되어 적재기에 의해 이진 프로그램 이미지에 결합된다.
  • 동적 연결에서 linking이 실행 시기까지 미루어지는 것이다.( 서브루틴,시스템 라이브러리)
  • 동적 연결에서는 라이브러리를 부르는 곳마다 stub이 생긴다. stub은 작은 코드 조각으로 메모리에 존재하는 라이브러리를 찾는 방법 또는 메모리에 없을 경우 라이브러리 적재하는 방법을 알려준다.
  • 라이브러리 루틴의 주소를 알아내게 되고 자신을 그 루틴의 주소로 대체하고 루틴을 실행
  • 다음번 그 부분이 호출되면 직접 그곳의 라이브러리 루틴을 실행한다.
  • shared Library : 소폭 수정을 가한다면 동일한 버전 번호를 유지할 수 있지만 대폭적인 수정을 가한다면 버전 정보를 바꾸어야 한다.
  • 장점 여러사람이 사용하는 경우 유용하다. 함수를 공유할 수 있다. 라이브러리 루틴을 바꿀 때 특히 유용하다. 어느때나 새로운 버전으로 교체될 수 있다.
  • 라이브러리를 사용하는 프로그램은 자동으로 찾아보고 없으면 로딩한다.

 



Swapping

  • 프로세스가 실행되기 위해서는 메모리에 있어야 하지만 필요한 경우 프로세스는 실행도중 임시로 보조 메모리로 교체되어 나갔다가 다시 메모리로 돌아올 수 있다. ex) RR
  • Roll out,roll in 우선순위 기반으로 높은 프로세스와 낮은 프로세스의 Swap
  • 스왑핑은 보조 메모리를 필요로 하며 보통 디스크를 사용한다. 용랑이 크다.
  • 시스템은 실행할 준비가 된 모든 프로세스를 모아 준비완료 큐에 가지고 있어야 한다.
  • 다음 프로세스를 고를 때 디스패처를 호출


 


 

전송시간이 2초일 경우 스왑 in out 했을 경우 대략 4초가 걸린다. 대부분이 디스크 전송시간

-스왑 시간을 줄이기 위해서는 실제로 사용하는 부분만을 스왑해야 한다.

효과적으로 하기 위해서 사용자는 메모리 요구사항의 변화가 있을 때마다 시스템에게 이를 알려주어야 한다.

한 프로세스를 스왑하려면 그 프로세스가 완전이 유휴상태에 있음을 확인해야한다.

1. 입출력이 종료되지 않은 프로세스를 스왑하지 말거나

2. 입출력은 항상 운영체제의 버퍼와만 하도록 한다.(double buffering)

 



반응형