[운영체제] 메모리관리

su_y2on·2022년 10월 19일
0

CS

목록 보기
6/9
post-thumbnail

메모리관리

메모리의 종류

메모리의 종류는 아래와 같이 계층을 이루고 이 계층에 적절히 분배되어 저장된다. 위로갈수록 가격은 비싸고 속도는 빠르며 아래로갈수록 속도는 느리고 가격은 저렴하다.

register와 cache는 CPU가 관리하며 main memory와 disk는 운영체제가 관리한다.





데이터 전송단위

  • block : 보조기억장치 <-> 주기억장치 / 주기억장치 <-> 캐시 사이의 데이터 전송단위 이다. (원하는 데이터가 포함되어있는 뭉텅이를 가져옴)

  • word : 캐시 <-> 레지스터 사이의 데이터 전송단위로 block의 일부다.





Address Binding

CPU는 프로세스내부에서 사용하는 논리주소를 사용하는데 이는 실제 메모리에서의 물리주소와는 차이가 있다. 따라서 논리주소와 물리주소를 연결해주는 작업이 필요하다.

프로그램은 아래와 같은 과정을 거쳐 실행되는데 논리주소와 물리주소가 어느시점에 일어나냐에 따라 3가지로 나뉜다.

1. compile time

컴파일타임에 바인딩이 일어나는 것으로 사실 이는 좀 까다롭다. 왜냐하면 프로세스가 메모리에 적재될 위치를 컴파일러가 알고있어야하기 때문에다. 그리고 위치도 중간에 변해서는 안된다.

2. load time

로드시점 즉 프로세스가 메모리에 올라갈때 시작주소를 반영해서 주소를 바인딩 해주는 것인데 그러려면 컴파일 타임에는 임의로 다른 주소를 사용해야한다. 이 주소를 상대주소라고 하며 로드시점에 이 상대주소를 시작주소를 반영해서 물리주소로 매핑해준다.

3. run time

주소 바인딩을 실행시점까지 미루는 것으로 프로세스가 실행중에 다른 메모리로 위치를 옮길 수 있다. 이 시점에 일어나는 주소 바인딩은 HW인 MMU의 도움이 필요하다. 대부분의 OS가 이 종류의 주소 바인딩을 사용하고있다.

위 3가지 내용을 정리하면 아래와 같다.





Memory Allocation

메모리 할당은 두가지 방식이 있다 첫번째는 프로세스 전체를 메모리에 연속적으로 할당하는 방식이다. 그리고 두번째는 프로세스를 쪼개서 필요한 부분만 메모리에 할당하는 방식이다.

연속할당(Continuous)

연속할당은 프로세스를 하나의 연속된 메모리 공간에 할당하는 방식이다. 이는 다시 몇개의 프로세스를 메모리에 올리냐에 따라 uni-programming과 multi-programming으로 나뉜다.



uni-programming

하나의 프로세스만 메모리상에 올리는 것으로 매우 간단하다. 하지만 프로그램의 크기가 메모리의 크기보다 크면 문제가 생긴다.

이때 해결방법은 Overlay structure로 사용자가 직접 현재 필요한 영역만 적재시키는 것인데 이는 매우 어려운 일이다.

또한 커널영역을 침범할 수 있는 문제점도 있다. 이는 경계 레지스터를 사용하여 해결할 수 있다.

이 방식의 단점은 공간낭비이다. 하나의 프로세스만 올리기때문에 나머지 부분을 사용할 수 없기 때문이다. 따라서 이에대한 해결책은 여러 프로세스를 한번에 메모리에 올리는 것이다



multi-programming

여러 프로그램이 메모리에 올라가기 때문에 메모리를 적절하게 나눠사용해야한다. 이 방식은 크게 두가지로 나뉜다



1. 고정분할(FPM)

먼저 고정분할이다. 이 방식은 미리 메모리를 분할한 뒤 프로세스를 각 파티션에 적재하는 방식이다. 여기서는 아까 커널영역을 보호하듯이 경계 레지스터 여러개가 각 파티션의 경계를 보호한다.

이 방식의 장점은 메모리 관리가 편하다는 것이다. 단점은 단편화로 인한 메모리 낭비이다.

  • 내부단편화 : 프로세스 < 파티션인 상황에 해당 파티션에 공간이 생긴다. 이는 다른 프로세스가 사용하지 못하고 낭비된다.

  • 외부단편화 : 남은 메모리공간 > 프로세스의 크기인 상황에서 파티션 하나의 크기보다는 프로세스가 클 때 발생하는 문제이다.



2. 가변분할(VPM)

처음에는 하나의 메모리 공간이고 프로세서를 처리하면서 필요한 공간을 동적으로 분할하며 할당하는 방식이다.

이 방법은 배치전략이 중요하다.

  • 최초적합 : 가장 처음으로 들어갈 수 있는 공간
    - 쏠림현상 발생, 공간 활용도가 떨어짐

  • 최적적합 : 가장 딱 맞게 들어갈 수 있는 공간
    - 탐색시간 오래걸림, 크기가 작은 파티션이 많이 생김

  • 최악적합 : 가장 여유공간이 큰 공간
    - 탐색시간 오래걸림, 큰 크기의 파티션확보 어려움

  • 순차최초적합 : 마지막 탐색한 위치부터 들어갈 수 있는 공간 찾기
    - 메모리 균등화

이 방식은 내부단편화는 생기지 않고 외부단편화만 생긴다. VPM에서 외부단편화를 해결하는 방법은 두 가지 이다.

  • 공간통합 : 매번 프로세스가 메모리를 반납하면 인접한 빈 영역과 하나로 통합함

  • 메모리압축 : 필요할 때 모든 빈 공간을 하나로 통합, 오버헤드가 큼

0개의 댓글