본문 바로가기
정글 2기/OS 운영체제

[three_easy_pieces] 가상 메모리(Virtual memory)_주소 변환의 원리

by Dean30 2021. 10. 7.
728x90

[three_easy_pieces] 가상 메모리(Virtual memory)_주소 변환의 원리

 

가상 메모리를 물리적 메모리로 매핑하는 과정을 이해하는 것은 중요하다. 이를 주소 변환이라 한다.

 

코드

void func(){
  int x = 3000;
  x = x + 3; // 우리가 관심있는 코드
  }

 

어셈블리어

  • 128 : movl 0x0(\%ebx), \%eax ;   0+ebx를 eax에 저장
  • 132 : addl \$0x03, \%eax.         ;   eax 레지스터에 3을 더한다
  • 135 : movl \%eax, 0x0(\%ebx) ;   eax를 메모리 (스택)에 다시 저장

 

레지스터 (Register)

  • ebx (extended base address register) : 메모리 주소 저장을 위한 레지스터 - x 주소 저장됨
  • eax (extended accumulator register) : 산수, 연산 후 반환값을 저장하는 범용 레지스터 - 연산 진행, 결과 저장
  • PC (Program Counter) : 인출할 명령어가 있는 메모리의 주소를 갖는 특수 레지스터 (다음 명령어 인출을 위한 주소를 가진다.)
  • IR (Instruction Register) : 프로그램 메모리에서 인출된 명령어 (128, 132, 135)를 기억하고 있는 특수 레지스터

 

프로세스 관점에서 다음과 같은 메모리 접근이 일어난다.

  • 주소 128의 명령어를 반입(fetch) - PC에 128 반입
  • 이 명령어 실행 (주소 15KB에서 탑재) - eax에 3000 저장
  • 주소 132의 명령어를 반입 - PC에 132 반입
  • 이 명령어 실행 (메모리 참조 없음) - 연산 후 eax에 3003 저장
  • 주소 135의 명령어를 반입 - PC에 135 반입
  • 이 명령어 실행(15KB에 저장) - stack 15KB 부분에 3003 저장

 

728x90

댓글