내가 찾았어"주소 바인딩"에 대한 몇 가지 설명예. 그들은 "주소 바인딩은 가상 또는 논리 주소를 물리적 주소에 매핑하는 작업"이라고 말합니다.
이 정의가 맞나요?
대학 강연에서는 가상 주소를 물리 주소로 변환하는 작업이 실행 시간에 수행된다고 나와 있어서 맞는지 알 수 없습니다. 그러나 주소 바인딩은 바인딩 작업이 컴파일 시간, 로드 시간 또는 실행 시간에 구현될 수 있음을 의미합니다.
이것은 모순을 보여줍니다.
답변1
Quora에 대한 설명은 꽤 혼란스럽고 일부 개념을 혼동하는 것 같습니다.
메모리 주소(예: 네트워크 주소와 반대)의 맥락에서 "주소 바인딩"이라는 용어는 다음에서 유래합니다.링커와 로더에 관한 Leon Presser와 John R. White의 1972년 논문(또한보십시오ACM 시작하기) 이는 다음과 같이 정의됩니다.
논리적 주소를 물리적 주소로 변환하거나 매핑하는 것을 호출합니다.주소 바인딩.
빨리 읽으면 이것이 메모리 관리 관점에서 논리적 주소와 물리적 주소에 대해 이야기하고 있다는 인상을 줄 수 있지만, 이 기사에서는 그렇지 않습니다. 물리적 주소는 메모리에 있는 "정보"의 주소이고 논리적 주소입니다. 해당 정보 기호를 참조하는 데 사용됩니다. 따라서 주소 바인딩은 현재 일반적으로 기호(또는 포인터) 재배치로 알려져 있으며, 말했듯이 이것은 컴파일 시간(예: 정적 바이너리 생성 시), 로드 시간(동적 링커가 공유 라이브러리에서 기호를 확인할 때)에 발생할 수 있습니다. 또는 실행 시(실행 중인 프로그램이 수동으로 기호를 확인할 때,예를 들어사용 dlopen
).
답변2
그 기사는 혼란스럽습니다. 기사의 첫 부분이 정확한 것 같습니다.가상 주소CPU 코어에서 사용되며 MMU에 의해 물리적 주소에 매핑된 다음 RAM에 들어갈 때 사용됩니다. 그러나 나는 "주소 바인딩"이라는 것을 들어본 적이 없습니다. "매핑"이 더 일반적이지만 이는 단지 용어의 문제일 뿐입니다.
두 번째 단락 중간에 다음 문장이 있습니다. 위의 프로세스를 참조하세요.
이러한 유형의 바인딩에서는 컴파일러가 소스 코드에서 재배치 가능 주소나 오프셋 기반 주소를 생성해야 합니다.
그건 말도 안되는 소리입니다.
재배치가 가능하거나위치 독립적 코드이는 프로그램 코드가 자신이 상주하는 가상 주소를 모르지만 가상 메모리의 어느 곳에나 배치될 수 있다는 점을 고려해야 하는 상황에서 필요합니다. 이는 시스템에서 실행되는 프로그램 코드가 이를 모르기 때문에 물리적 주소와는 아무런 관련이 없습니다. 표시되는 모든 주소는 가상 주소입니다.
공유 라이브러리그리고주소 공간 레이아웃 무작위화위치 독립적 코드가 필요한 두 가지 일반적인 상황입니다. 절대 메모리 주소를 포함할 수 없지만 대신 자체 위치 또는 레지스터에 저장된 일부 기본 위치를 기준으로 모든 액세스를 수행하도록 코드를 구성해야 하기 때문에 컴파일러 지원이 필요합니다.
이 모든 것은 가상 주소 공간의 프로세스 보기 내에서 발생합니다. 코드 자체가 이를 인식해야 하기 때문에 컴파일러 지원이 필요합니다.
MMU의 가상 주소 변환아니요프로세스 협업이 필요합니다. 대신, 필요에 따라 주소 매핑을 수정하는 것이 운영 체제의 임무입니다. 예를 들어 프로세스의 일부가 스왑을 위해 가져왔고 액세스가 필요한 경우입니다.
분할또한 언급한 바에 따르면, 적어도 x86에서는 분할된 세대가 있다는 점을 제외하면 기사에서 설명하는 것과 매우 유사하게 작동합니다.가상주소이므로 가상 메모리에서 실제 메모리로의 매핑이 그 이후에 발생합니다.
(위의 모든 내용은 x86 시스템에 대한 나의 지식을 기반으로 합니다. 다른 시스템에서는 다를 수 있습니다.)