Week 5 - 메모리 가상화 1#
학생: 가상화에 대한 이야기는 이제 끝인가요?
교수: 아니다! 아직 끝나지 않았네. 우리는 CPU 가상화에 대한 이야기를 마쳤을 뿐, 옷장 속에 숨어있는 진정한 괴물, 메모리 가상화는 아직 남아있지. 메모리 가상화는 CPU 가상화보다 훨씬 복잡하고, 하드웨어와 운영체제의 상호작용에 대한 더 깊은 이해를 필요로 하지.
학생: 왜 그렇게 어려운가요?
교수: 메모리 가상화에는 많은 세부적인 내용들이 있고, 이를 이해하기 위해서는 체계적인 모델을 구축해야 하기 때문이지. 우리는 베이스-바운드와 같은 기본적인 기술부터 시작하여 TLB, 멀티 레벨 페이지 테이블 등의 복잡한 개념까지 다루게 될 거야. 그리고 궁극적으로는 현대 가상 메모리 관리자의 작동 방식을 완전히 이해할 수 있을 거야.
학생: 좋아요! 정보 홍수와 수면 부족으로 고생하는 불쌍한 학생들을 위해 팁을 좀 주세요.
교수: 수면 부족은 간단하게 해결할 수 있지. 덜 놀고 더 자도록 하게. 메모리 가상화를 이해하기 위해서는 먼저 사용자 프로그램이 생성하는 모든 주소는 가상 주소라는 것을 명심해야 하네. 운영체제는 각 프로세스에게 자신만의 커다란 전용 메모리를 가지고 있다는 환상을 제공하고, 하드웨어의 도움을 받아 가상 주소를 실제 물리 주소로 변환하여 원하는 정보를 찾아내는 거야.
학생: 그렇군요. 외울 수 있을 것 같습니다… “사용자 프로그램의 모든 주소는 가상이다. 사용자 프로그램의 모든 주소는 가상이다…”
교수: 중얼거리는 게 뭐야?
학생: 아, 아무것도… 어쨌든, 왜 운영체제는 이런 환상을 제공하고 싶어 하는 거죠?
교수: 사용하기 쉬운 시스템을 제공하기 위해서야. 운영체제는 각 프로세스에게 코드와 데이터를 저장할 수 있는 대용량의 연속된 주소 공간을 제공하고, 프로그래머는 “이 변수를 어디에 저장해야 할까?”와 같은 걱정을 하지 않아도 된다는 거지. 프로그램의 가상 주소 공간이 크고 변수 등을 위한 많은 공간을 가지고 있기 때문이야.
학생: 다른 이유는 없나요?
교수: 음… 고립(isolation)과 보호(protection)도 중요한 이유지. 우리는 잘못된 프로그램이 다른 프로그램의 메모리를 읽고, 더 안 좋게는 덮어 쓰도록 만들고 싶지 않지.
학생: 아마 싫어하겠죠. 싫어하는 사람이 작성한 프로그램이 아니라면 말이죠.
교수: 음… 다음 학기 시간표에 도덕과 윤리 수업을 추가해야 할 것 같군. 운영체제 수업이 윤리를 가르치는 건 아니니까.
학생: 아마 그래야 할지도 모르겠어요. 하지만, 프로세스의 잘못된 행동에 대한 운영체제의 올바른 대응은 해당 프로세스를 죽이는 것이라고 제가 가르친 건 아니라는 것을 기억해 주세요.
흥미진진한 대화 속에서 학생은 메모리 가상화에 대한 깊은 이해를 얻게 된다. 그는 과연 메모리 가상화의 비밀을 완전히 밝혀낼 수 있을까?
Note
메모리 가상화 개념을 이해하기 위해서는 컴퓨터 아키텍처와 운영체제에 대한 기본적인 지식이 필요합니다.