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
'정글 2기 > OS 운영체제' 카테고리의 다른 글
[OS운영체제] 권영진 교수님 OS 강의_2 (카이스트 전산학부) (0) | 2021.10.11 |
---|---|
[Pintos] Project 2_Calling convention_Caller, Callee and registers (0) | 2021.10.09 |
[pintos] Project 1_priority scheduling (0) | 2021.10.04 |
[pintos] Project 1_alarm (0) | 2021.10.04 |
[PintOS] 로딩 (Loading) (0) | 2021.10.04 |
댓글