본문 바로가기
Computer Science/OS

메모리 관리

by 밍상 2021. 10. 29.

각각의 프로세스는 독립된 메모리 공간을 갖고, 운영체제 혹은 다른 프로세스의 메모리 공간에 접근할 수 없는 제한이 걸려있다. 단지, 운영체제만이 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 제약을 받지 않는다.

 

Swapping

메모리의 관리를 위해 사용되는 기법. 표준 Swapping 방식으로는 RR과 같은 스케줄링의 다중 프로그래밍 환경에서 CPU 할당 시간이 끝난 프로세스의 메모리를 보조 기억장치(e.g. 하드디스크)로 보내고 다른 프로세스의 메모리를 불러 들일 수 있다.

 

Fragmentation(단편화)

프로세스들이 메모리에 적재되고 제거되는 일이 반복되다보면, 프로세스들이 차지하는 메모리 틈 사이에 사용하지 못할 만큼의 작은 자유 공간들이 늘어나게 되는데, 이것이 단편화이다. 단편화는 2가지 종류로 나뉜다.

 

External Fragmentaion(외부 단편화)

메모리 공간 중 사용하지 못하게 되는 일부분. RAM에서 사이사이 남는 공간들을 모두 합치면 충분한 공간이 되는 부분들이 분산되어 있을 때 발생한다고 볼 수 있다.

  • 압축 : 외부 단편화를 해소하기 위해 프로세스가 사용하는 공간들을 한쪽으로 몰 수 있지만, 작업 효율이 좋지 않다.

 

Internal Fragmentaion(내부 단편화)

프로세스가 사용하는 메모리 공간에 포함된 남는 부분. 예를 들어 메모리 분할 자유 공간이 10000B있고, Process A가 9998B사용하게 되면 2B라는 차이가 존재하고, 이 현상을 내부 단편화라 칭한다.

 

Paging(페이징)

하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없애는 메모리 관리 방법이다. 외부 단편화와 압축작업을 해소하기 위해 생긴 방법론으로, 물리 메모리는 Frame이라는 고정 크기로 분리되어 있고, 논리 메모리(프로세스가 점유하는)는 페이지라 불리는 고정 크기의 블록으로 분리된다.

 

페이징 기법을 사용함으로써 논리메모리는 물리 메모리에 저장될 때, 연속되어 저장될 필요가 없고 물리 메모리의 남는 프레임에 적절히 배치됨으로 외부 단편화를 해결할 수 있는 큰 장점이 있다.

 

하나의 프로세스가 사용하는 공간은 여러개의 페이지로 나뉘어서 관리되고(논리 메모리에서), 개별 페이지는 순서에 상관 없이 물리메모리에 있는 프레임에 mapping 되어 저장된다고 볼 수 있다.

  • 단점으로 내부 단편화 문제의 비중이 늘어나게 된다. 예를 들어 페이지 크기가 100B이고 프로세스가 301B의 메모리를 요구한다면 3개의 페이지 프레임(100*3=300)으로 부족함으로 4개의 페이지 프레임이 필요하게 된다. 이때 4번째 프레임에는 98B(100-2)의 여유 공간이 남게 되는 내부 단편화 문제가 발생한다.

Segmentaion(세그멘테이션)

페이징에서처럼 논리 메모리와 물리 메모리를 같은 크기의 블록이 아닌, 서로 다른 크기의 논리적 단위인 세그먼트로 분할하고, 사용자가 두 개의 주소로 지정(세그먼트 번호 + 변위), 세그먼트 테이블에는 각 세그먼트의 시작 물리주소와 limit를 저장하는 방식이다.

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

참조

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS#%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%8F%99%EA%B8%B0%ED%99%94

 

GitHub - JaeYeopHan/Interview_Question_for_Beginner: Technical-Interview guidelines written for those who started studying progr

:boy: :girl: Technical-Interview guidelines written for those who started studying programming. I wish you all the best. :space_invader: - GitHub - JaeYeopHan/Interview_Question_for_Beginner: Techn...

github.com

 

'Computer Science > OS' 카테고리의 다른 글

캐시의 지역성  (0) 2021.10.29
프로세스 동기화  (0) 2021.10.29
CPU 스케줄러  (0) 2021.10.22
스케줄러  (0) 2021.10.22
멀티 스레드  (0) 2021.10.22