해결된 질문
작성
·
93
·
수정됨
2
논리주소에서 세그먼트번호는 어떻게 알 수 있나요?
페이지드 세그멘테이션 강의 2:50 부분
페이징 분할 방식은 고정된 크기로 메모리를 분할하기에 페이지번호는 논리주소 / 페이지 크기로 구할 수 있었는데요. 논리주소에서 세그먼트 번호를 어떻게 추출하는지 궁금해요.
프레임 번호 + 세그멘테이션 테이블의 페이지 개수(bound adress)가 물리주소가 되는게 이해가 되지 않아요.
페이지드 세그멘테이션 강의 3:40~ 3:50 부분
주소가 변환 과정을 거칠때 세그멘테이션 테이블 참조 -> 페이지 테이블 참조 -> 프레임 번호 + 세그멘테이션 테이블의 페이지 개수(bound adress)를 더해서 물리주소를 구한다고 설명해주셨는데, 세그먼트의 시작 주소부터 얼마까지의 limit을 나타내는 bound adress를 더하는게 잘 이해가 가지않아서요. 오히려 오프셋을 더해야 하는거 아닌지 싶은데, 이부분 한번 더 설명해주시면 감사합니다.
답변 2
0
안녕하세요 하얀종이개발자님!
1. 이 부분은 운영체제마다 다를 수 있지만, 해당 영상에서는 0x12300번지에 접근할 때 가장 앞에 있는 비트를 보고 1번 세그먼트로 결정했습니다. 이런 이유로 영상에선 1을 빨간색으로 강조표시 해두었습니다.
2.영상에서 이 부분을 잘못 설명한 것 같습니다.
bound address는 메모리를 침범하는지 확인하는 용도로 쓰입니다.
말씀주신 것처럼 프레임을 구하고 실제 offset은 논리 주소에서 일정 비트를 참고합니다.
영상처럼 0x12300으로 예를 들면 가장 앞비트인 1은 세그멘테이션 테이블을 참고하는데 쓰입니다.
만약 offset을 뒤로부터 세 자리를 사용한다면 offset은 300이 되고, 프레임에서 300만큼 떨어진 곳이 물리주소가 됩니다.
혼란을 드려서 죄송합니다. 🙇♂
0
안녕하세요, 인프런 AI 인턴입니다.
하얀종이개발자님께서 질문하신 논리주소와 물리주소 변환 과정에 대해 설명드리겠습니다. 강의 내용을 이해함에 있어 도움이 되길 바랍니다.
논리주소에서 세그먼트 번호 추출 방법:
세그먼트 번호는 논리 주소에서 미리 정해진 규칙에 따라 추출됩니다. 보통 논리주소 중 특정 비트를 세그먼트 번호로 지정하는 방식인데, 이는 시스템 설계에 따라 다를 수 있습니다. 강의 내용으로 조정되는 부분이 있을 수 있지만 일반적인 방식은 논리 주소의 앞 몇 비트를 세그먼트 번호로 보고 나머지를 오프셋으로 사용합니다.
프레임 번호와 Bound Address의 역할:
프레임 번호와 세그멘테이션 테이블에 나열된 페이지 개수 또는 limit를 단순히 더해서 물리 주소를 구한다기보다, 논리 주소의 오프셋을 더해 최종 물리 주소를 계산하게 됩니다. 여기서 이해해야 할 부분은, 세그멘테이션 테이블을 참조해 얻은 Base address(세그먼트 시작 주소)와 페이지 테이블을 통해 얻은 프레임 시작 주소를 가져온 후, 논리 주소의 오프셋을 이 시작 주소에 더한다는 점입니다. 오프셋은 세그먼트나 프레임 내에서의 위치를 나타내므로 최종적으로 물리 주소 계산 시 사용됩니다.
이 부분에 대한 더 자세한 설명은 여기에서 “논리주소와 BoundAddress의 비교”에 대해 논의된 내용을 통해 확인하실 수 있습니다. 각 프로세스의 테이블이 어떻게 관리되고 있는지도 참고하시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
빠른 답변해주셨네요.
그림을 통한 설명이 이해하기 너무 좋게 되어있어서 궁금한 부분 질문드릴 수 있었던 것 같아요.
감자님 덕분에 개념 하나 하나 제대로 배우고 있습니다. 2번 질문 부분은 프레임에서 오프셋만큼 떨어진 곳이 물리주소라고 이해하고 학습하겠습니다.!!
감사합니다 ㅎㅎ