memory management

bruney·2021년 6월 4일
0

OS

목록 보기
2/10
post-custom-banner

memory management

  1. 사용자(개발자)가 HW의 디테일을 신경쓰지 않고 편리한 abstraction 제공을 위해
  2. 메모리 자원은 매우 비싼 자원인데 프로세스들에게 이 자원을 어떻게 분배할 것인지를 결정하기 위해 즉, 최소의 overhead로 성능을 최대화하기 위해
  3. 프로세스 간에 격리를 제공하기 위해 즉, 프로세스 자신만의 영역을 보장

single/batch programming

프로그램은 직접적으로 물리적인 주소를 사용한다.(1개의 user process만 돌고 있어서 가능하다.)

multiprogramming

1. 하나의 메모리 공간을 여러 프로세스가 필요하다.
->I/O와 CPU의 여러 작업을 overlap하기 위해
->각 프로세스는 서로 다른 사이즈의 메모리를 요구하고 연속적인 공간을 요구한다. 즉, 서로 메모리 요구사항이 다르다.
2. 요구사항
->protection: 주소와 프로세스가 사용할 수 있는 것을 제한한다.
->fast translation: protection scheme에도 불구하고 메모리 lookup은 반드시 빨라야 한다.(virtual address->physical address)
->fast context switching: 메모리 하드웨어 업데이트가 빨라야 한다.

fixed partition(과거의 기법)

  1. 메모리를 여러 조각으로 나누고 프로그램이 필요하면 하나씩 제공한다.
  2. 각 파티션의 사이즈는 동일하고 fixed이다.
  3. number of partitions는 degree of multiprogramming이다.(동시에 띄울 수 있는 process의 수)
  4. base register: process가 어떤 partition을 쓰고 있다는 것을 보여주는 reg
    P.A = base reg + V.A
    프로세스가 switch할 때 os에 의해 base reg가 로딩된다.

장점: 구현하기 단순하고 빠른 context switch
문제점:
internal fragmentation(내부 단편화): 프로세스가 사용하지 않는 메모리를 다른 프로세스가 사용하지 못한다.
partition size: 하나의 사이즈가 프로세스에 딱 맞지 않는다.(사이즈가 남거나 아니면 사이즈가 더 필요하다)(fragmentation vs fitting large programs) 따라서 size를 정하는게 매우 중요하다.

improvement(IBM OS/MFT에서 쓰였음)

partition size가 동일하지 않다.(메모리를 많이 사용하는 프로세스에게 큰 공간 적게 사용하는 프로세스에게 작은 공간 제공)
1. first fit allocation
-> 빈 파티션에 맞는 사이즈의 작업에 할당해준다. but 스캐닝이 필요
2. best fit allocation
-> 빈 파티션에 맞는 가장 큰 사이즈의 작업을 고른다. but 더 많은 스캐닝이 필요하고 더 많은 overhead가 발생한다.

Variable partitions

  1. 필요한 만큼만 메모리를 할당하고 메모리에 사용하는 파티션 사이즈가 제각각 다르다.
  2. 요구하면 그만큼 메모리 공간을 잘라서 할당해준다. but fixed part.은 미리 자르고 준비한다.
  3. LIMIT reg(protection role을 수행한다)가 있어 virtual address가 limit보다 크면 protection fault발생(pa>base+limit이면 문제가 발생한다.)
    이후에 pa=base reg+va
    4. allocation strategies
    -> first fit : 빈 공간이 있네 들어갈 수 있어? 들어가~
    -> best fit : 다 스캔 후 충분히 큰거 중에 가장 작은 메모리에 할당
    -> worst fit : 가장 큰 메모리를 할당

장점
-> no internal fragmentation(fixed와 비교) : 프로세스에게 필요한 충분히 큰 사이즈로 파티션 사이즈를 할당한다.
단점
-> external fragmentation : 어떤 작업을 load, unload하면 메모리 공간 곳곳에 구멍이 흩어져 있어서 남아 있는 공간을 합치면 어떤 프로세스가 들어갈 수 있다. 하지만 구멍이 조각조각 단편화 되어 있어 프로세스가 들어갈 수 없는 상황이 발생한다.
해결법
-> compaction(빈 공간을 압축한다 but overhead 발생)
-> paging and segmentation

overlay(현재는 절대 쓰이지 않음)

two pass assembler : 1번 프로세스에서 필요한 메모리가 2번 프로세스가 작업을 할 때 절대 안쓰이는 경우 메모리 낭비가 일어난다. overlay기법을 사용한다.
-> 프로세스가 사용하고 없애고 다른 프로세스가 다시 사용하고 없애고 이 과정을 반복하여 한정된 메모리로 더 많은 process를 돌릴 수 있다.

  1. 주어진 시간에 필요한 것들(명령어, 데이터)만 메모리에 넣어서 사용한다. 기본적으로 개발자가 구현해야한다는 단점이 있다.

장점: 프로세스가 실제 메모리보다 더 큰 용량을 요구할 때 이를 작동할 수 있다는 장점이 있고 OS로부터 특별한 도움을 받지 않는다(개발자가 구현한다)
단점: overlay 구조의 설계가 복잡하다.

swapping

  1. 프로세스1이 돌다가 프로세스2를 context switch할 때 프로세스1을 disk(backing store)(캐시 역할)로 복사하고 disk에 있는 프로세스2를 메인 메모리에 로드해서 돌리는 과정을 반복한다.
  2. 일시적으로 디스크에 메모리의 일부를 swapping out한다.
  3. 나머지 실행을 위해 나중에 메모리로 bringing back한다.
  4. backing store는 fask disk, 모든 메모리의 이미지를 수용할 만큼 충분히 커야한다. 메모리 이미지에 직접적인 접근을 제공해야 한다.

문제점
1. swap하는데 오랜 시간이 걸린다 대부분 transfer time(disk로 보내고 받고)
2. 어떤 프로세스가 I/O작업을 기다리고 있는데 스왑하면 문제가 생긴다. 이럴 때 스왑하지 않는 정책이 필요
3. 대부분 OS는 vm으로 demand paging이라는 swapping 기법을 사용한다.

virtual memory

  1. 프로세스, 프로그램이 메모리를 요구할 때 virtual memory(굉장히 크고 연속적인 공간)로 access하도록 한다.
  2. 이때, CPU & OS가 실행시간에 address translation을 수행한다.**(va로부터 pa로)**
  3. pm은 필요에 따라 실시간으로 할당되고 해제되어야한다.
  4. 프로그램은 전체 주소 공간이 물리적 메모리에 상주 할 필요없이 실행됩니다. 하지만 필요할 때, pa에 올려놓을 수 있어야 합니다.(lazy loading)
  5. va는 각 프로세스에 private하다. 각 프로세스는 자신만의 격뢰된 가상 주소 공간을 가진다. 하나의 프로세스는 다른 프로세스들을 건드릴 수 없도록 해준다.
  6. multiple processes의 메모리를 관리하는데 쉽도록 해주며 가상 주소를 사용하도록 한다.(logical addresses)
  7. 가상 주소는 실제 물리적 데이터의 위치와 독립적이다.

memory access procedures

  1. CPU에 의해 실행되는 명령어는 가상 주소를 요구한다.
  2. 가상 주소는 HW(OS)에 의해 물리적 주소로 번역된다. 물리적 주소는 운영체제만 알 수 있다.
  3. 프로세스에 의해 사용될 수 있는 가상 주소들의 set은 그것의 virtual address space이다.

장점:
1. 유저(개발자)를 실제 메모리에서부터 logical memory(virtual)를 분리한다. > ->유저에게 메모리 저장공간의 한계의 걱정을 덜어주고 logical memory를 알 수 있게 한다.
-> 매우 크고 storage의 균일한 배열처럼 메인 메모리를 추상화한다.
2. 메모리에서 완전하지 않은 프로세스의 실행을 허용한다.
-> 프로세스/프로그램이 실제 메모리보다 더 큰 메모리를 사용할 수 있도록 해준다.
-> 또한, 동시에 여러 프로그램이 실행할 수 있으며 I/O과정이 줄어든다(disk에 보내고 받고(load and swap)
3. 프로세스들이 파일과 메모리 공간을 더 쉽게 공유하도록 허용해준다.
4. protection과 프로세스 생성에 효율적이다.

단점:
1. 성능!!! : 시공간의 관점에서 성능이 떨어진다.
-> va->pa, pa의 배치, swapping을 하는데 더 많은 overhead가 필요하다.
해결법:
1. paging
2. segmentation

profile
Detail makes difference.
post-custom-banner

0개의 댓글