Rizingblare 2024. 3. 28. 18:25

1. 개요

 

컴퓨터 분야에서 메모리를 논하면 대부분 RAM을 의미한다.

 

 

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

 

RAM은 Random Access Memory, 임의로 접근할 수 있는 메모리라는 뜻으로 해당 의미로는 HDD 등의 기타 장치와 구분하기 힘들 수 있으나, Random Access라는 용어가 어느 위치에 접근하든 똑같은 속도로 접근하여 읽고 쓸 수 있다는 의미를 내포하므로 데이터의 물리적 위치에 따라 읽고 쓰는 시간에 차이가 발생하게 되는 HDD와 같은 기억장치들과는 구분된다.

 

또다른 특징으로는 전원이 공급되는 동안에만 데이터가 유지되며 전원이 꺼지면 내용이 지워지는 휘발성 기억장치라는 점이다. 비휘발성 메모리인 ROM(Read-Only Memory)와 자주 비교되곤 한다.

 

 

컴퓨터는 CPU에서 이뤄진 연산을 메모리에 기록하며 또 읽어온다. 잘 이해가 되지 않는다면, 복잡한 계산에서 공책에 풀이하는 걸 생각하면 도움이 될 수 있다. 계산한 내용을 기억까지 할 수 있는 두뇌와 달리, CPU는 오직 계산만이 가능하고 기억하는 역할은 메모리가 전담해야 하기 때문에 실제로는 이 예시보다 훨씬 중요한 역할이다.

 

메모리가 없으면 컴퓨터는 동작 자체를 못한다. 램의 용량이 클수록 그만큼 동시에 더 많이 기록하고 연산하는 것이 가능하다.

 

RAM은 책상, CPU는 책상에 앉은 사람, HDD와 같은 보조기억장치는 책상 서랍으로 비유하고 한다.

하드웨어의 동작에 대한 이해를 돕기위한 좋은 예시라는 생각이 든다. 

 

2. 가상 메모리

가상 메모리 기법은 물리적 메모리보다 더 큰 프로그램이 실행될 수 있도록 컴퓨터 시스템에서 사용하는 메모리 관리 기법

- 가상 메모리가 왜 필요한가?

먼저, 메인 메모리를 효율적으로 사용할 수 있습니다. 가상 메모리 시스템에서는 각 프로그램이 사용하는 가상 주소 공간을 우선 디스크에 저장해두고, 그중에서 자주 사용되는 부분만 메인 메모리로 가져와서 사용됩니다.


다음으로, 메모리 관리를 단순화합니다. 가상 메모리 시스템에서는 각 프로세스가 완전히 동일한 포맷의 가상 주소 공간을 가집니다. 이것이 가능한 이유는 실제로 메모리 참조를 수행할 때는 가상 주소를 물리 주소로 변환하는 작업이 진행되기 때문이니다.


마지막으로, 메모리 보호 메커니즘을 단순화합니다. 가상 메모리 시스템에서는 다른 프로세스의 주소 공간이 접근하는 것을 쉽게 막을 수 있습니다.

 

 

면접 예상 질문:

 

1) 메모리 단편화란 무엇인가?

 

메모리 단편화

 - RAM에서 메모리의 공간이 작은 조각으로 나뉘어져 사용가능한 메모리가 충분히 존재하지만 할당(사용)이 불가능한 상태를 보고 메모리 단편화가 발생했다고 한다.

 

메모리 단편화는 내부 단편화와 외부 단편화로 구분 가능하다.

 

내부 단편화(Internal Fragmentation)

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

* 예를 들어 메모장을 켰는데 OS가 4kb를 할당해줬다. 그런데 사실상 1kb만큼만 사용하고 있을 때 필요 이상으로 프로세스가 메모리를 할당받았으므로 내부 단편화가 3kb만큼 생긴 것임.

 

외부 단편화(External Fragmentation)

메모리가 할당되고 해제되는 작업이 반복될 때 작은 메모리가 중간중간 존재하게 된다. 이 때 중간중간에 생긴 사용하지 않는 메모리가 많이 존재해서 총 메모리 공간은 충분하지만 실제로 할당할 수 없는 상황

* 예를 들어 메모리 처음 주소에 8mb짜리 프로세스가 할당되었고 바로 이어서 16mb짜리 프로세스가 할당되었다고 가정했을 때 8mb짜리 프로세스를 종료시키면 메모리 처음 주소부터 8mb만큼 공간이 생긴다.

 

2) 페이징 기법이란 무엇인가?

 

페이징(Paging)기법 - 가상메모리사용, 외부 단편화 해결, 내부 단편화 존재

 

보조기억장치를 이용한 가상메모리를 같은 크기의 블록으로 나눈 것을 페이지라고 하고 RAM을 페이지와 같은 크기로 나눈 것을 프레임이라고 할 때,

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

페이지와 프레임을 대응시키기 위해 page mapping과정이 필요해서 paging table을 만든다.

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

대신 페이지 단위에 알맞게 꽉채워 쓰는게 아니므로 내부 단편화 문제는 여전히 있다.

* 페이지 단위를 작게하면 내부 단편화 문제도 해결할 수 있겠지만 대신 page mapping 과정이 많아지므로 오히려 효율이 떨어질 수 있다. 

 

 

3) 세그먼테이션 기법이란 무엇인가?

 

세그멘테이션(Segmentation)기법 - 가상메모리사용, 내부 단편화 해결, 외부 단편화 존재

 

페이징기법에서 가상메모리를 같은 크기의 단위로 분할했지만 세그멘테이션기법에서는 가상메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할해서 메모리를 할당하여 실제 메모리 주소로 변환을 하게 된다.

 

각 세그먼트는 연속적인 공간에 저장되어 있다.

 

세그먼트들의 크기가 다르기 때문에 미리 분할해 둘 수 없고 메모리에 적재될 때 빈 공간을 찾아 할당하는 기법이다.

마찬가지로 mapping을 위해 세그먼트 테이블이 필요하다.

(각 세그먼트 항목별 세그먼트 시작주소와 세그먼트의 길이 정보를 가지고 있음)

 

프로세스가 필요한 메모리 만큼 할당해주기 때문에 내부단편화는 일어나지 않으나 여전히 중간에 프로세스가 메모리를 해제하면 생기는 구멍, 즉 외부 단편화 문제는 여전히 존재한다.

 

 

4) 메모리 풀

 

메모리 풀(Memory Pool)

필요한 메모리 공간을 필요한 크기, 개수 만큼 사용자가 직접 지정하여 미리 할당받아 놓고 필요할 때마다 사용하고 반납하는 기법

 

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

 

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

 

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

메모리의 할당, 해제가 잦은 경우에 메모리 풀을 쓰면 효과적이다.

 

미리 할당해놓고 사용하지 않는 순간에도 계속 할당해놓으므로 메모리 누수가 있는 방식이다.

 

 

5) 페이지 교체 알고리즘

6) MMU란?

7) TLB란?

8) 페이지 부재시 절차

 

 

# 출처

사진1 -

https://velog.io/@on-n-on-turtle/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EF%BD%9C-%EC%BB%B4%ED%93%A8%ED%84%B0-%ED%95%98%EB%93%9C%EC%9B%A8%EC%96%B4-%EA%B5%AC%EC%A1%B0

 

사진 2 - 

https://live.lge.co.kr/gram-univ_translation1_09_210820/

 

사진 3 -

https://m.blog.naver.com/wg1hhj118/221765278119

 

가상 메모리 -

https://velog.io/@jeewoo1025/OS-%EB%A9%B4%EC%A0%91-%EC%A4%80%EB%B9%84

 

메모리 단편화, 페이징 기법, 세그멘테이션, 메모리 풀 - 

https://jeong-pro.tistory.com/91