본문 바로가기

64비트 멀티코어 OS 원리와 구조 진행기록 & 백업 보호되어 있는 글입니다. 더보기
리눅스 프로세스 메모리 구조 env, etc & argc, argv 도 스택의 일부분 더보기
x86_64(64비트) 모드, 주소 변환 과정 64비트 모드 주소 변환 과정 64비트 모드 세그먼테이션 과정은 32비트 모드와 동일하게 진행되는데, 차이점으로 주소 공간이 확장되어 세그먼트 디스크립터에 설정된 기준 주소와 크기에 관계없이 모든 세그먼트가 기준 주소는 0, 크기는 64비트 전체로 설정됩니다. 선형 주소의 주소 영역 자체가 0부터 64비트 전체가 되는 것이죠 페이징 기법을 통한 주소 변환 5단계 페이징 기법을 예로 보겠습니다. 글자가 길어서 헷갈리므로 그냥 편의상페이지 맵 레벨 4 = PML4페이지 디렉토리 포인터 = PDP페이지 디렉토리 = PD페이지 테이블 = PT라 하면 CR3 레지스터가 PML4 테이블의 기준 주소를 가리킵니다.PML4 테이블 기준 주소 + 선형 주소의 PML4 오프셋 = PML4 엔트리PML4 엔트리가 PDP 테.. 더보기
x86(32비트) 모드, 주소 변환 과정 32비트 모드에서의 가상 주소 -> 선형 주소 -> 물리 주소 변환 과정 가상 주소를 선형 주소로 변환하는 과정(세그먼테이션) GDTR 레지스터 -> GDT의 크기 필드와 기준 주소 필드로 구성 -> GDT의 기준 주소조세그먼트 셀렉터의 구조 index는 GDT 또는 LDT 상에서의 위치를 나타내고,TI 비트는 GDT인지 LDT인지를 구분합니다. GDTR로부터 GDT의 기준 주소와 세그먼트 셀렉터의 index를 통해 -> 세그먼트 디스크립터에 접근합니다.세그먼트 디스크립터에는 세그먼트 기준 주소와 기타 정보가 포함되어있는데세그먼트 기준 주소 + 논리주소값(오프셋) = 선형주소 가 됩니다. 선형 주소를 물리 주소로 변환하는 과정(페이징) CR3 레지스터가 페이지 디렉터리 테이블의 기준 주소를 가리킨다.페이.. 더보기
64비트 주소를 상위 32/하위 32비트로 나누어 표현 64비트 주소를 상위 32비트/하위 32비트로 나누어 표현하는 방법 코드로 볼 때는 헷갈렷는데.. 정리하고나니 너무 간단하네요 메모리를 읽을때 2진수로 읽는 건 알아보기 힘들고 비효율적이므로 2진수 숫자 4개를 묶어 16진수로 표현한 후, 16진수로 읽습니다. 1바이트는 8비트이므로, 1바이트당 16진수 2개로 표현할 수 있겠네요 64비트는 8바이트가 됩니다. 1바이트씩 나누어 표현해서 그림과 함께 보겠습니다.상위 32비트 / 하위 32비트는 각각 4바이트가 되겠네요 음.. 1바이트는 8비트이고 4비트씩 16진수 한개로 묶어 16진수 2개로 표현한다고 했습니다.그럼 바이트 단위로 보았을때, 256 = 16^2 = 2^8만큼 차이가 나겠죠?간단한 것이지만 예를 들어보자면.. 0x01과 0x0100 처럼 말.. 더보기