[Computer Science] Operating System(Memory Management)

Arkiee·2022년 10월 24일
0

Computer Science

목록 보기
3/9
post-thumbnail

메모리(Memory)란?

메인 메모리, RAM을 뜻한다. 프로그램 실행 시 필요한 주소, 정보들을 저장하고 가져다 사용할 수 있게 만드는 공간. 즉, 작업을 위해 사용되는 공간.

메모리 관리가 필요한 이유?

각각의 프로세스는 독립된 메모리 공간을 갖고, 운영체제 혹은 프로세스의 메모리 공간에 접근할 수 없는 제한이 있다. 단지, 운영체제만이 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 제약을 받지 않기 때문에 운영체제에서 메모리를 관리한다. 또한, 멀티프로그래밍 환경으로 변화하며 한정된 메모리를 효율적으로 사용해야했고, 운영체제가 이를 어떻게 관리하는지에 대한 관리방법이 중요해졌다.

운영체제의 역할

실행파일이 로더에 의해 메모리에 올라오고 운영체제는 이 실행파일을 메모리의 어느 부분에 올릴 지 결정한다.

  • 자바는 OS의 메모리 영역에 직접 접근하지 않고 JVM이라는 가상 머신을 이용해 간접적으로 접근한다.

효과적인 메모리 사용

동적 적재(Dynamic Loading)

  • 프로그램 실행에 반드시 필요한 루틴과 데이터만 적재
  • 가끔 실행되는 코드는 실행 시 필요할 때 필요한 부분을 메모리에 적재

메모리 Swapping

  • 메모리 관리를 위해 사용되는 기법 중 하나입니다. 프로세스를 불러들이기 위한 공간이 메모리에 부족하다면 현재 메모리에 적재된 프로세스들을 내보내고(swap out) 원하는 프로세스를 불러들이는 (swap in) 방식.

    • 주기억장치로 불러오는 과정: swap-in
    • 보조기억장치로 내보내는 과정: swap-out
  • 표준 방식으로는 round-robin 같은 스케줄링의 다중 프로그래밍 환경에서 CPU 할당 시간이 끝난 프로세스의 메모리를 backing store(보조기억장치)로 내보내고 다른 프로세스의 메모리를 불러 들일 수 있다. -> swap 과정

  • 상당한 Context-Switching time이 발생한다. 또한 swapping을 위해서는 현재 메모리의 프로세스가 완전히 휴지상태(idle)임을 확인해야 한다.


교착상태와 기아상태

교착상태(Deadlock)

모든 작업이 각 작업의 락(공유자원을 잡고 있는 상황)이 풀리길 기다리는 상황

발생조건

4가지 조건 모두 만족시에 Deadlock 발생

  • 상호배제: 공유자원의 사용은 한번에 한 프로세스만 사용가능. 여러 프로세스가 접근 할 수 없음.

  • 점유대기: 공유자원에 접근중인 한 프로세스가 접근해제를 하지 않고 다른 자원에 접근하려고 기다림.

  • 비선점: 한 프로세스가 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없음.

  • 순환대기: 각 프로세스는 순환적으로 다음 프로세스가 요규하는 자원을 가지고 있음

해결방안

  1. Prevention: 위 4가지 발생조건 중 1개라도 성립되지 않도록 발생조건을 원천 차단해 방지한다.
  2. Avoidance: Deadlock의 가능성이 전혀 없을때만 자원을 할당한다.
  3. Recovery: Deadlock이 발생한 이후 회복하는 방식. 프로세스를 모두 한번에 죽이거나, 하나씩 죽이는 방법이 존재한다.
  4. Ignorance: 데드락에 대해 아무일도 하지 않는다.
    • Window 포함 대부분의 OS가 채택 -> 사용자가 알아서 프로세스를 죽임
    • Deadlock은 빈번히 발생하는 이벤트가 아니므로 1~3은 오버헤드로 비효율적

기아상태(Starvation)

  • 병행 프로세스에서 프로세스가 실행되는데 필수적인 자원을 끊임없이 사용하지 못하는 상황

  • 우선순위가 높은 프로세스가 우선순위가 낮은 프로세스가 실행되는 것을 계속 막는 상태

발생조건

  • 스케줄러나 상호배제 알고리즘의 에러로부터 발생

  • 자원 누수에 의해 발생

  • 서비스 거부 공격에 의해 발생

해결방안

  • 오래 기다린 프로세스의 우선순위 높이기
  • 우선순위가 아닌 요청 순서대로 처리하는 큐 사용하기

단편화(Fragmentation) 현상

  • 메모리의 공간이 작은 조각으로 나뉘어 사용 가능한 메모리가 충분히 존재하지만 할당(사용)이 불가능한 상태(즉, 메모리 공간이 비효율적으로 사용되어 저장 공간이 낭비되는 것)

단편화의 종류

내부 단편화

  • 할당한 영역 중 사용되지 않는 공간으로 인해 공간이 낭비되는 것
  • 프로세스가 사용하는 메모리 공간에 포함되는 부분, 예를들어 메모리 분할 자유공간이 10,000B이고 Process A가 9,998B 사용하면 2B라는 차이가 존재하고, 이 현상을 내부 단편화라 한다.

외부 단편화

  • 메모리 여유 공간이 있지만 연속적인 공간이 아니라 사용할 수 없는 경우
  • 메모리 공간 중 사용하지 못하게 되는 부분, 물리 메모리(RAM)에서 사이사이 남는 공간들을 모두 합치면 충분한 공간이 되는 부분들이 분산되어 있을 때 발생한다.

단편화 해결방법

내부 단편화

  • Segmentation

    • 요약: 메모리를 서로 크기가 다른 논리적인 블록 단위인 세그먼트로 분할하여 메모리를 할당하는 기법

    • 사용자가 두 개의 주소로 지정(세그먼트 번호 + 변위)

    • 세그먼트 테이블에는 각 세그먼트의 기준(세그먼트 시작 물리주소)와 한계(세그먼트 길이)를 저장

    • 메모리 할당 종류: 비연속

    • 단점: 서로 다른 크기의 세그먼트들이 메모리에 적재되고 제거되는 일이 반복되다 보면, 자유 공간들이 많은 수의 작은 조각들로 나눠져 못 쓰게 될 수 있다(외부 단편화)

외부 단편화

  • Paging

    • 요약: 프로세스를 일정 크기인 페이지로 잘라서 메모리에 적재하는 방식

    • 메모리 공간이 연속적이어야 한다는 제약을 없애는 메모리 관리법

    • 물리 메모리는 Frame이라는 고정 크기로 분리돼 있고, 논리 메모리(프로세스가 점유하는)는 페이지라 불리는 고정 블록으로 분리된다.

    • 메모리 할당 종류: 비연속

    • 단점: 내부 단편화 문제의 비중이 늘어나게 된다.


[참고]
https://technote-mezza.tistory.com/92

profile
꿈을 꾸는 개발자

0개의 댓글