[CS] - 운영체제(3)

박진우·2022년 8월 20일
0

Computer Science

목록 보기
7/7

💡메모리 단편화

메모리 단편화❓


CPU가 직접 접근하여 처리할 수 있는 고속의 기억장치 (Memory) 로, 현재 수행되는 프로그램과 데이터를 저장하고 있으며, 종류로는 ROM RAM 이 있다.


◾ RAM

  • RAM은 사용자가 자유롭게 읽고 쓸 수 있는 기억장치로, 컴퓨터가 켜지는 순간부터 cpu는 연산을 하고, 동작에 필요한 모든 내용이 전원이 유지되는 내내 이 기억장치에 저장된다.

  • 전원이 꺼지면 기억된 내용이 모두 사라지는 휘발성 메모리

◾ ROM

  • ROM은 기억된 내용을 읽을 수만 있는 기억장치로서 일반적으로 쓰기불가능하다

  • 전원이 꺼져도 기억된 내용이 지워지지 않는 비 휘발성 메모리




◽ 메모리 단편화(Memory Fragmentation)의 정의

컴퓨터에서 프로그램을 실행하거나 작업을 할 때 컴퓨터는 메모리에 해당 프로그램을 올리고 실행을 하게 된다.

이때 주기억장치 상에서 빈번하게 기억 장소가 할당되고 반납됨에 따라 메모리 공간이 작은 조각 공간으로 나뉘게 될 경우, 사용 가능한 메모리가 충분함에도 불구하고 메모리 할당이 불가능한 상태가 발생하게 되는데, 이를 메모리 단편화라고 한다.

즉 메모리 공간이 작은 조각으로 나뉘어 사용 가능한 메모리충분히 존재 하지만 할당이 불가능한 상태라고 할 수 있다.

메모리 단편화의 종류로는 내부 단편화 외부 단편화 가 있다.




◽ 내부 단편화 (Internal Fragmentation)]

메모리를 할당할 때, 프로세스가 필요로 하는 크기보다 더 큰 메모리가 할당되어서 프로세스에서 사용하는 메모리 공간이 낭비되는 상황을 말한다.


  • 주기억장치 내 사용자 영역 실행 프로그램보다 커서 프로그램의 사용 공간을 할당 후 사용되지 않고 남아있는 공간

  • 주기억장치 내 사용자 영역 > 실행 프로그램

위와 같은 그림에서 100MB의 메모리 80MB 크기의 프로세스를 올리게 되면,

20MB의 내부 단편화가 발생




◽ 외부 단편화 (External Fragmentation)

메모리가 할당되고 해제되는 작업이 반복되면서 중간중간 작은 메모리가 존재하게 된다.

이때 중간중간 생긴 사용하지 않는 메모리가 발생하면서 메모리의 총 공간은 충분하지만 실제로는 할당할 수 없는 상황을 말한다.


  • 할당할 프로세스의 크기보다 메모리에 남아있는 조각 작아서 할당이 불가능한 현상

  • 주기억장치 내 사용자 영역 < 실행 프로그램

위와 같이 남아있는 메모리 공간은 50MB+50MB =100MB로 요청한 메모리 공간 80MB보다 크지만, 남아있는 공간이 연속적이지 않아 Process C를 할당할 수가 없게 된다. 따라서 남아있는 메모리 공간이 낭비되게 되는 문제가 발생




◽ 단편화 해결방안

◾1. 압축

단편화는 메모리 상에 생긴 구멍이라고 생각할 수 있습니다. 그렇다면 사용중인 메모리공간한쪽으로 모아 충분한 공간이 만들면 되지 않을까??!

이런 방법으로 접근하는 것이 메모리 압축이다.

여러곳에 분산되어 있는 단편화메모리 공간 합쳐 사용할 수 있는 하나의 큰 공간 을 만드는 것을 의미합니다(디스크 조각모음)

◾ 2. 통합

통합방법은 단편화가 발생된 공간에서 인접해 있는 다른 단편화 공간들을 하나로 통합시켜 큰 공간을 만드는 방법.

◾3. 페이징

◾ 4. 세그멘테이션


◽ 페이징 (Paging)

가상메모리 사용, 외부 단편화 해결, 내부 단편화 존재

페이지(Page)

보조기억장치 를 이용한 가상메모리같은 크기블록으로 나눈 것


프레임(Frame)

주기억장치 페이지와 같은 크기로 나눈 것


페이징 기법은 사용하지 않는 프레임을 페이지에 옮기고, 필요한 메모리 페이지 단위프레임에 옮기는 기법이다.

  • 페이징 기법을 사용하면 연속적이지 않은 공간도 활용할 수 있기 때문에 외부 단편화 문제를 해결할 수 있다.

  • 하지만 페이지 단위에 알맞게 꽉채워 쓰지 않을 때도 있을 수 있기 때문에 내부 단편화 문제는 여전히 존재한다.

  • 페이지 단위를 작게 하면 내부 단편화 문제도 해결할 수 있겠지만, 대신 Page Mapping 과정이 많아지기 때문에 오히려 효율이 떨어질 수 있다. 그렇기 때문에 페이지 단위도 적절하게 나눠야 한다.

출처: https://beenii.tistory.com/162 [끄적이는 개발노트:티스토리]




◽ 세그먼테이션(segmentation)

세그멘테이션은 프로세스를 논리적 내용 을 기반으로 나눠서 메모리에 배치하는 것을 의미한다.

  • 세그멘테이션 기법에서는 가상메모리를 서로 크기가 다른 논리적 단위세그먼트분할 하고, 메모리를 할당하여 실제 메모리 주소 변환 을 하게 된다.
  • 세그멘테이션은 프로세스를 세그먼트(segment)의 집합으로 표현한다.
  • 각 세그먼트는 연속적인 공간에 저장되어 있고, 세그먼트들의 크기가 다르기 때문에 미리 분할해 둘 수 없고 메모리에 적재될 때 빈 공간을 찾아 할당하는 기법.
  • 프로세스가 필요한 메모리만큼 할당 해주기 때문에 내부 단편화 문제는 일어나지 않지만, 중간에 프로세스가 메모리를 해제하면 생기는 외부 단편화 문제는 여전히 존재한다.




◽ 메모리 풀 (Memory Pool)

외부 단편화 해결, 내부 단편화 해결

동적 할당과 비슷한 개념이지만 필요한 메모리 공간을 필요한 크기, 갯수만큼 사용자가 직접 지정하여 미리 할당 받아 놓는다는 점에서 차이가 있다.

미리 할당받아서 메모리 풀을 만들어 놓고 필요할 때마다 사용하고, 반납 하는 것이 메모리 풀 기법이다.


메모리 풀 없이 동적할당해제반복하면 랜덤한 위치에 할당과 해제가 반복되면서 단편화를 일으킬 수 있지만 미리 공간을 할당 해 놓는다면 필요할 때마다 할당받았던 메모리 공간을 가져다 쓰고 반납하기 때문에 메모리 할당과 해제로 인한 외부 단편화가 생기지 않는다.

필요한 크기만큼 할당을 해놓기 때문에 내부 단편화 또한 생기지 않는다 는 장점이 있다.

하지만 메모리 단편화로 인한 메모리 낭비량보다 메모리 풀을 만들었지만 쓰이지 않는 메모리의 양 큰 경우 에는 사용하지 않아야 한다.

사전상의 의미인 내부 단편화와 외부 단편화는 생기지 않지만 미리 할당 해 놓고 사용하지 않는 순간에도 역시 메모리 누수가 일어나는 것이므로 잦은 동적할당 해제 일어날 경우에 사용하는 것이 바람직하다.

0개의 댓글