해결된 질문
작성
·
302
1
안녕하세요. 가상메모리 부분 강의를 들으면서 궁금한 점이 생겨서 질문글 올립니다.
1.페이징 기법에서 가상메모리를 일정한 크기로 나눈 블럭이 페이지, 물리메모리를 일정한 크기로 나눈 블럭이 프레임이라고 하셨는데, 페이지와 프레임의 크기는 같나요?
1-1. 만약 같다면 그 크기는 영구적인가요?
1-2. 만약 다르다면 페이지 크기는 프레임 크기보다 같거나 작아야 할텐데 그건 어떻게 제어/관리하나요?
2. 추가 공부를 하다가 가상메모리와 가상 주소 공간은 다르다는 것을 알게 되었습니다. 프로세스 실행 시 각 프로세스는 가상 주소 공간을 가지며 0번지부터 시작한다고 하는데, 이 각각의 가상주소공간이 가상 메모리에 올라가는 건가요?
2-1. 만약 그렇다면 가상메모리를 하나라고 생각해야 하나요, 아니면 여러개(프로세스 수만큼)라고 생각해야 하나요? 가상메모리라는 개념 자체가 추상적이어서 헷갈립니다.
2-2. 만약 여러개라면 페이지는 가상메모리를 일정한 크기로 나눈 것인데, 각각의 가상메모리를 모두 일정한 크기로 나누는 건가요? 아니면 각 프로세스마다 페이지의 크기도 다른가요?
가상메모리가 말 그대로 가상의 것이라 실체가 없어서 그런지 개념이 너무 헷갈립니다ㅠㅠ 답변 기다리겠습니다. 감사합니다.
답변 1
0
안녕하세요 르르말님.
많이 고통받으신 흔적이 질문에서 보여서 얼른 해결해드리겠습니다!
1.페이징 기법에서 가상메모리를 일정한 크기로 나눈 블럭이 페이지, 물리메모리를 일정한 크기로 나눈 블럭이 프레임이라고 하셨는데, 페이지와 프레임의 크기는 같나요?
네 정확히 일치합니다!
1-1. 만약 같다면 그 크기는 영구적인가요?
운영체제에서 설정한 페이지 크기에 따라서 달라질 수 있습니다.
2. 추가 공부를 하다가 가상메모리와 가상 주소 공간은 다르다는 것을 알게 되었습니다. 프로세스 실행 시 각 프로세스는 가상 주소 공간을 가지며 0번지부터 시작한다고 하는데, 이 각각의 가상주소공간이 가상 메모리에 올라가는 건가요?
가상 메모리는 부족한 물리 메모리(RAM)을 보조 메모리(하드디스크나 SSD)를 이용해 메모리를 확장하는 기술입니다.
프로세스와 사용자는 물리 메모리와 보조 메모리에 대해서 신경 쓰지 않기 위해서 운영체제가 중간에서 많은 역할을 해주는 것입니다.
우리가 프로세스를 열어 주소를 확인하는 것은 모두 가상 주소 공간에 있는 가상 주소입니다.
하지만 실제로 접근할 때는 메모리 관리자를 통해 물리 주소로 접근하는 것이죠.
2-1. 만약 그렇다면 가상메모리를 하나라고 생각해야 하나요, 아니면 여러개(프로세스 수만큼)라고 생각해야 하나요? 가상메모리라는 개념 자체가 추상적이어서 헷갈립니다.
물리 메모리(RAM)과 보조 메모리(HDD, SSD)를 하나로 보는 것이 가상 메모리입니다.
여러 프로세스가 이 가상 메모리(물리메모리 + 보조메모리)에 흩어져 저장되어 있는 것이죠.
가상 메모리는 하나, 가상주소공간(각 프로세스마다 1개)는 여러개입니다.
각 프로세스는 오프셋이 다르므로 가상주소공간에서의 주소값이 같더라도 서로 다른 주소의 가상 메모리 주소에 접근할 수 있는 것이죠!
질문 내용으로 보아 프로세스 1개에 가상주소공간과 별도의 가상메모리가 있다고 생각하시는 것 같습니다.
프로세스 1개당 독립적인 가상주소공간을 가지는 것은 맞지만 가상 메모리는 한 개(물리 메모리 + 스왑영역[보조 메모리])로 이해하시면 됩니다!
궁금증이 시원하게 해결되셨으면 좋겠습니다. 😊
하나의 프로세스는 여러 개의 페이지로 나뉘어 여러 개의 프레임이 매칭됩니다.
프레임은 물리 메모리 상에서 랜덤하게 할당되어 연속될 수도, 되지 않을 수도 있습니다.
페이지와 프레임의 크기가 똑같기 때문에 겹쳐서 존재할 수는 없습니다!
답변 감사합니다! 궁금했던 점이 시원하게 해결되었습니다ㅎㅎ 조금 더 질문하자면, 물리메모리와 스왑영역을 합친 것이 가상메모리라면 페이지는 어떻게 나뉘는 건가요? 가상메모리를 일정한 크기로 나눠야 하는데 그렇다면 그 처음과 끝 주소를 알아야 일정한 크기로 나눌 수 있지 않나요? 만약 가상메모리 상에 프로세스 2개가 연속적으로 올라가있다고 하면 한 페이지 안에 2개의 프로세스가 겹쳐서(프로세스a의 끝부분+프로세스b의 첫부분) 존재할 수도 있나요?