TeamCoook / iOSInterviewQuestions

✅ iOS 개발자 기술 면접 대비
18 stars 0 forks source link

[레벨 0] `5주차` 10. 가상 메모리(Virtual Memory)의 개념과 동작 원리에 대해 설명해주세요. #10

Open longlivedrgn opened 5 months ago

longlivedrgn commented 5 months ago
ohdair commented 4 months ago

블로그 기재

longlivedrgn commented 4 months ago

가상 메모리의 필요성과 장점에 대해 설명해주세요.

Level of Indirection

Abstraction for memory

Protection의 문제

Transparency

Efficiency

세그먼테이션(Segmentation) 기법의 개념과 페이징과의 차이점에 대해 설명해주세요.

페이징(Paging) 기법의 개념과 동작 원리, 페이지 테이블의 역할에 대해 설명해주세요.

즉 주요 차이점은?!…

llimental commented 4 months ago
1. 가상 메모리의 필요성과 장점에 대해 설명해주세요. ### 1-1) 가상 메모리란? - 메모리 관리 기법의 하나로, 컴퓨터 시스템에 실제로 이용 가능한 자원을 이상적으로 추상화하여 사용자들에게 매우 큰 메모리로 보이게 만드는 것을 말합니다. 멀티태스킹 운영 체제에서 흔히 사용되는 방식으로, 실제 주기억장치보다 큰 메모리 영역을 제공하는 방법으로 사용되고, 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주게 됩니다. ### 1-2) 가상메모리의 필요성 - 멀티태스킹 운영 체제에서 흔히 사용된다고 했는데, 이전에는 항상 하나의 프로그램이 모든 메모리를 직접 사용한다는 전제하에 만들었으나 멀티태스킹이 도입된 이후 각자의 프로그램이 동시에 작동할 때 메모리를 어떻게 분배할지에 대한 문제가 생겼기 때문입니다. ### 1-3) 가상메모리의 장점 - 보안성 및 안정성: 프로그램은 메모리에 직접 접근하는 것이 아니라 간접 접근하며 기본적으로 프로그램간 메모리가 분리되어 필요한 경우에만 특정 메모리를 서로 공유해 메모리 접근에 대한 오류를 줄이기 때문에 보안성 및 안정성이 증가합니다. - 개발 용이성: 프로그램은 각자 고유한 메모리를 사용하며 보통 어느정도 크기의 용량으로 할당받기에 실제메모리 용량과는 무관하게 프로그램을 만들 수 있습니다. - 메모리 관리: 운영체제는 프로그램이 가상 메모리에 대해 사용하지 않는다고 판단되는 메모리의 일부분을 압축하거나 스왑해 실제 메모리의 공간을 확보하는 등의 관리를 할 수 있습니다.
2. 페이징 기법의 개념과 동작 원리, 페이지 테이블의 역할에 대해 설명해주세요. ### 2-1) 페이징 기법의 개념과 동작 원리 - 프로세스를 일정한 크기의 페이지로 분할해서 메모리에 적재하는 방식을 말합니다. 하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없애는 메모리 관리 방법입니다. - 장점으로는 논리 메모리는 물리 메모리에 저장될 때 연속되어 저장될 필요가 없고, 물리 메모리의 남는 프레임에 적절히 배치되기 때문에 외부 단편화가 생기지 않습니다. - 단점으로는 내부 단편화가 발생할 수 있습니다. 페이지 단위를 작게 하면 해결할 수 있지만 매핑 과정이 복잡해져 적절한 선에서 처리해야 합니다. - 외부 단편화: 메모리가 할당되고 해제되는 작업이 반복될 때 작은 메모리가 중간중간 생겨나는데, 이러한 메모리 공간들이 많아지면서 총 사용 가능한 메모리 공간은 충분하지만 실제로 할당할 수 없는 상황을 외부 단편화라고 합니다. - 내부 단편화: 메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어서 프로세스에서 사용하는 메모리 공간이 낭비되는 상황을 내부 단편화라고 합니다. ### 2-2) 페이지 테이블의 역할 - 개별 페이지는 순서에 상관없이 물리 메모리에 있는 프레임에 매핑되어 저장됩니다. 모든 프로세스는 하나의 페이징 테이블을 가지고 있고, 여기에는 메인 메모리에 적재되어 있는 페이지 번호와 해당 페이지가 위치한 메인 메모리의 시작 주소가 있습니다. - 이를 통해 하나의 프로세스를 나눈 가상 메모리 페이지들이 각각 실제 메인 메모리의 어떤 프레임에 적재되어 있는지 알아낼 수 있습니다.
3. 세그먼테이션 기법의 개념과 페이징과의 차이점에 대해 설명해주세요. ### 3-1) 세그먼테이션 기법의 개념 - 세그먼테이션은 가상 메모리를 서로 크기가 다른 논리적 단위로 분할한 것을 의미합니다. 프로세스를 물리적 단위인 페이지가 아니라 논리적 단위인 세그먼트로 분할해서 메모리에 적재하는 방식으로, 의미가 같지 않은 논리적 내용을 기준으로 분할하기 때문에 크기가 같지 않습니다. - 장점으로는 내부 단편화 문제가 해소되고 보호와 공유 기능을 수행할 수 있습니다. 프로그램의 중요한 부분과 중요하지 않은 부분을 분리하여 저장할 수 있고, 같은 코드 영역은 한 번에 저장할 수 있습니다. - 단점으로는 외부 단편화 문제가 생길 수 있습니다. ### 3-2) 페이징과의 차이점 - 페이징은 고정된 크기로 분리되어 있는 반면 세그먼트는 크기가 고정되어 있지 않습니다. - 분할 방식을 제외하고 동작이 같기 때문에 매핑 테이블의 동작 방식도 동일합니다. 다만 논리 주소의 앞 비트들은 페이징 번호가 아니라 세그먼트 번호가 됩니다. 이를 통해 세그먼트의 시작 물리 주소와 세그먼트의 길이를 파악할 수 있습니다. - 페이징은 외부 단편화를 방지하고 내부 단편화 문제를 안고 있는 반면, 세그먼테이션은 내부 단편화를 방지하고 외부 단편화 문제를 안고 있습니다.
SunnnySong commented 4 months ago

1️⃣ 가상 메모리의 필요성과 장점에 대해 설명해주세요.

가상 메모리, Virtual Memory

장점

메모리 관리 기법

연속 메모리 관리

연속 메모리 관리 유형

불연속 메모리 관리

불연속 메모리 관리 유형

MMU(Memory Management Unit)-동적 주소 변환

2️⃣ 페이징(Paging) 기법의 개념과 동작 원리, 페이지 테이블의 역할에 대해 설명해주세요.

페이징 기법, Paging

페이징 기법에서의 주소 변환 작업

  1. 페이지 주소 찾기
    1. 가상주소 30번지가 어느 페이지에 있는지 찾는다.
    2. 30번지는 페이지 3(30~39)의 0번째 위치에 있다.
  2. 프레임 주소 찾기
    1. 페이지 테이블에서 페이지 3을 찾는다.
    2. 페이지 3프레임 1에 존재한다.
  3. 물리 메모리 프레임 1의 0번째 위치에 접근한다. 이 주소가 가상 메모리 30번지의 물리 주소이다.

3️⃣ 세그먼테이션(Segmentation) 기법의 개념과 페이징과의 차이점에 대해 설명해주세요.

세그멘테이션 기법, Segmentation

페이징과 세그먼테이션의 차이

  크기 문제
페이징 고정 내부 단편화 발생
세그먼테이션 가변 외부 단편화 발생
# 1️⃣ 가상 메모리의 필요성과 장점에 대해 설명해주세요. ## 가상 메모리, Virtual Memory - 프로그램이 혼자 메모리를 사용하는 것처럼 메모리를 가상화한 것이다. - 물리적으로 정해진 메모리 안에서 더 많은 프로세스를 동시에 실행시키기 위해 등장한 개념이다. - 가상 메모리 시스템에서는 **실제 RAM 용량을 초과하는 메모리 요구를 충족시키기 위해 하드 디스크 드라이브(HDD)와 같은 보조 저장 장치를 사용해 추가적인 메모리 공간을 제공**한다. - 실행에 필요한 일부분만 메모리에 로드하고, 나머지는 디스크에 두고서 필요할 때마다 교체해서 쓰는 방식이다. - 임시 데이터를 하드 디스크 드라이브에 캐시로 저장하고, 필요에 따라 RAM으로 가져올 수 있다. ### 장점 - 프로그램 실행에 필요한 최소 크기의 메모리만 올라가져 있기 때문에 더 많은 프로그램을 동시 수행할 수 있다. - 주 기억장치인 RAM은 용량 대비 비용이 고가이다. RAM보다 HDD, SSD가 가격이 저렴하기 때문에 비용 절감 효과가 있다. ## 메모리 관리 기법 **연속 메모리 관리** - 프로세스들이 물리적 메모리에 연속적으로 할당되는 메모리 관리 방식이다. - 메모리 관리가 비교적 단순하며, 주소 변환에 용이하다. - 외부 단편화 발생: 프로세스가 종료되거나 새로운 프로세스가 들어올 때 메모리 블록 간에 빈 공간이 생길 수 있으며, 이 공간을 효과적으로 활용하지 못하는 문제가 발생한다. **연속 메모리 관리 유형** - **고정 분할 기법**: 메모리가 고정된 크기의 여러 분할로 나뉘어 있으며, 각 분할에 하나의 프로세스가 할당된다. - **가변 분할 기법**: 메모리가 필요에 따라 가변적인 크기로 나뉘어 프로세스에 할당된다. - 프로세스가 종료되면 해당 메모리 블록이 해제되어 다른 프로세스가 사용할 수 있다. **불연속 메모리 관리** - 프로세스들이 물리적 메모리에 연속되지 않는 여러 블록에 할당되는 메모리 관리 방식이다. - 프로세스가 물리적 메모리의 비연속적인 공간에 할당될 수 있기 때문에 메모리 활용도가 높아진다. - 외부 단편화 감소 - 논리 주소를 물리 주소로 변환하는 과정이 복잡하다. 이를 위해 추가적인 하드웨어 및 소프트웨어가 필요하다. - ex) MMU **불연속 메모리 관리 유형** - **페이징 기법** - **세그멘테이션 기법** ### MMU(Memory Management Unit)-동적 주소 변환 - **MMU(Memory Management Unit)**: 가상 메모리 주소를 물리 주소값으로 변환해주는 하드웨어 장치이다. - 프로세스마다 각각 가상 메모리 공간이 할당된다. - 하지만 여기서 할당되는 가상 메모리 주소는 실제 물리 메모리 주소와 다르다. - 따라서 가상 메모리 시스템에서 메모리 관리자는 가상 메모리 → 물리 주소로 변환하는 작업을 수행해야 한다. # 2️⃣ 페이징(Paging) 기법의 개념과 동작 원리, 페이지 테이블의 역할에 대해 설명해주세요. ### 페이징 기법, Paging - **페이지**: 가상 메모리 공간을 고정된 크기로 나누어서 관리했을 때, 각각의 고정된 크기이다. - **프레임**: 각 페이지에 상응되는 물리적 메모리 공간의 고정된 공간 - **페이지 테이블**: 물리 메모리에 있는 프레임 번호와 해당 페이지의 첫 물리 주소 정보를 매핑한 표이다. - 프로세스의 PCB에 페이지 테이블 구조체를 가리키는 주소가 있다. ### **페이징 기법에서의 주소 변환 작업** 1. 페이지 주소 찾기 1. 가상주소 30번지가 어느 페이지에 있는지 찾는다. 2. 30번지는 `페이지 3`(30~39)의 0번째 위치에 있다. 2. 프레임 주소 찾기 1. 페이지 테이블에서 `페이지 3`을 찾는다. 2. `페이지 3`은 `프레임 1`에 존재한다. 3. 물리 메모리 `프레임 1`의 0번째 위치에 접근한다. 이 주소가 가상 메모리 30번지의 물리 주소이다. # 3️⃣ 세그먼테이션(Segmentation) 기법의 개념과 페이징과의 차이점에 대해 설명해주세요. ### 세그멘테이션 기법, Segmentation - **세그먼트**: 가상 메모리 공간을 각각 크기가 다르게 나눈 논리적인 블록 단위이다. - 세그먼트들의 크기가 서로 다르기 때문에 프로세스가 메모리에 적재될 때 빈 공간을 찾아 할당하는 기법이다. - 프로세스를 코드, 데이터, 스택으로 나누는 것 역시 세그멘테이션 기법을 활용한 것이다. - **세그먼트 테이블**: 각 세그먼트가 물리 메모리의 어느 위치에 있는지를 기록한다. - 세그먼트 번호와 시작 주소, 세그먼트 크기를 갖는다. ### 페이징과 세그먼테이션의 차이 | | 크기 | 문제 | | --- | --- | --- | | 페이징 | 고정 | 내부 단편화 발생 | | 세그먼테이션 | 가변 | 외부 단편화 발생 |
soo941226 commented 3 months ago

가상 메모리의 필요성과 장점에 대해 설명해주세요.


두가지 관점에서 설명을 할 수 있을 것 같은데요. 하나는 운영체제 개발자의 관점이고, 하나는 응용 소프트웨어 개발자의 관점입니다. 먼저 운영체제 개발자의 관점에서, 운영체제의 가장 큰 책임은 자원을 관리하는 것입니다. 누가 어떤 하드웨어를 점유하게 할 것인지, 얼만큼의 시간을 줄 것인지, 이러한 절차를 어떻게 보다 효율적으로 처리할 것인지 등 다양한 고민이 필요합니다. 이러한 고민들 중 특히 눈여겨 볼만한 것은 저희가 메인메모리라고 부르는 영역에 대한 고민입니다. 굉장히 한정적이고, 자주 사용할 수 밖에 없는 영역인데요. 특히 요즈음에는 거의 모든 컴퓨터가 동일한 순간에 여러개의 프로그램을 돌리는 편이라는 걸 고려하면, 고민이 더욱 깊어질 수 밖에 없습니다. 당장 생각나는 것은 어떤 주소를 누가 소유할 것인지, 엑세스에 대한 우선순위를 어떻게 가져갈 것인지, 이러한 소유권과 우선순위의 불균형을 어떻게 조절할 것인지, 서로의 영역에 대한 침범은 어떻게 막을 것인지 등이 있을 것 같은데요. 이러한 문제점들은 첫번째로는 운영체제가 각 응용 소프트웨어의 명세를 알지 못하기에 발생하는 문제(지금의 경우에는 특히 메모리에 대한)이고, 두번째로는 운영체제와 응용 소프트웨어간의 약속이 없기 때문에 발생하는 문제입니다. 즉 각 응용 소프트웨어가 어떤 하드웨어를 얼만큼 사용할 것인지에 대한 약속을 만들어놓는다면, 운영체제는 해당 프로그램이 실행이 될 경우 자원을 어떻게 처리할 것인지를 보다 쉽게 구조화할 수 있습니다. 가상메모리는 이러한 관점에서 운영체제가 보다 손쉽게 자원을 관리할 수 있도록 하는 약속이라고 할 수 있습니다.

한편 응용 소프트웨어 개발자의 관점에서는, 하드웨어의 필요성이 분명함에도 불구하고, 다양한 하드웨어들의 동작원리를 아주 세세하게 파악하고 조정하고 제어하는 것은 굉장히 까다롭고 어려운 일입니다. 특히 메모리를 사용함에 있어서 특정 주소를 사용하고자 하는데, 만약 다른 프로세스가 해당 주소를 미리 점유했다면 어떻게 해야할까요? 이를 모두 파악하고 방어하는 로직을 작성하는 건, 개발자의 본래 목적에서 많이 돌아가는 길이 될 것입니다. 나아가 메인메모리가 어느 제조사의 것인지, 몇개인지, 어느 정도의 크기를 가지고 있는지 파악을 해야한다면, 저라면 개발 못할 것 같네요. 이러한 맥락에서 응용 소프트웨어 개발자는 가상메모리를 통해 사용할 메모리 영역을 어느 정도 계산하고, 구조화하고, 또 해당 메모리에 대한 소유권이 온전히 나에게 있다는 전제를 깔게 됩니다. 이를 통해 물리메모리에 대한 제어를 신경쓰지 않고도 앱을 개발하고 비즈니스를 실현할 수 있게 도와줍니다.


페이징(Paging) 기법의 개념과 동작 원리, 페이지 테이블의 역할에 대해 설명해주세요.


제 문장으로 정리한다면, 프로세스가 갖는 가상메모리와 컴퓨터의 물리메모리에 대한 맵핑이라고 정리할 수 있을 것 같은데요. 가상메모리를 일정한 크기를 갖는 페이지로 분리하고, 물리메모리를 페이지 프레임으로 분리한 뒤, 페이지 테이블을 통해 맵핑을 하게 됩니다. 이 때 필요한 것들만 적재하게 되는데, 물리메모리가 가상메모리에 맞추어 구조화 되므로 물리메모리에 낭비가 발생할 수 있습니다. 예를 들어, 123456789 123456789 123456789 위와 같이 메모리를 사용중인 상황에서, 아주 사소한 작업을 위해 1이 적재가 되어야할 수 있습니다. 하지만 페이지는 일정한 크기를 가지므로 위와 같은 형태에서는 1XXXXXXXX이 적재가 되어야 합니다. 즉 만약 맨앞에 것을 날리고 적재가 된다면, 1XXXXXXXX 123456789 123456789 이 되는데 8칸이 비어있지만 9칸이 하나의 페이지이므로 다른 페이지가 이를 점유할 수 없게 되어 물리메모리에 낭비가 발생하게 됩니다.


세그먼테이션(Segmentation) 기법의 개념과 페이징과의 차이점에 대해 설명해주세요.


먼저 공통점을 나열하면서 세그먼테이션을 정리하고, 이후에 차이점을 이야기하면 좋을 것 같습니다. 세그먼테이션과 페이징의 공통점은 일정한 영역으로 가상메모리가 분리가 된다는 것입니다. 또 테이블을 통해 가상메모리가 물리메모리로 맵핑이 됩니다. 차이점은 가상메모리는 고정된 크기의 페이지가 아니라 서로 다른 크기의 세그먼트로 분리가 됩니다. 이 설명만으로는 페이징의 문제점을 극복할 수 있을 것 같지만, 실제로는 그렇지 않습니다. 세그먼트가 하나의 단위로 메모리에 적재되어야 하기 때문에 페이징과 같은 문제점을 공유합니다. 오히려 세그먼트 단위로 물리메모리에 적재되어야 한다는 점에서 페이징 기법보다 물리메모리를 낭비할 수 있습니다. 예를 들면 작은 세그먼트들이 띄엄띄엄 적재된 경우 페이징 기법에서 보다 많은 단위를 물리메모리에서 내려야할 수 있습니다.