OS : 15. 주소 변환의 원리

TechN0·2025년 2월 10일

하드웨어 기반 주소 변환 == 주소변환

  • 제한적 직접 실행 방식에 부가적으로 사용되는 기능
  • 주소 변환을 통해 HW는 명령어 반입, 탑재, 저장 등의 가상 주소를 정보가 실제 존재하는 물리 주소로 변환
  • 프로그램의 모든 메모리 참조를 실제 메모리 위치로 재 지정하기 위해 HW가 주소 반환

이 모든 작업의 목표는 결국 메모리 가상화로 환상 제공


15.2

  • 메모리에서 값 탑재 후 3 증가 시키고 다시 메모리에 저장하는 코드
void func() {
	int x = 3000;
	x = x + 3;

컴파일러는 코드를

  • 어셈블리 코드로 변환
  • 그 결과는 x86 어셈블리로 아래와 같음
128: movl 0x0(\%ebx) , \%eax ; 0+ebx를 eax에 저장
132: addl \$0x03, \%eax ; eax레지스터에 3을 더한다
135: movl \%eax, 0x0(\%ebx) ; eax를 메모리에 다시 저장

명령어의 실행 과정

  1. 주소 128의 명령어 반입
  2. 명령어 실행(주소 15KB에서 탑재)
  3. 주소 132 명령어 반입
  4. 명령어 실행(메모리 참조 없음)
  5. 주소 135 명령어 반입
  6. 명령어 실행(15KB에 저장)

이 프로그램 관점에서 주소공간은 0부터 16KB까지

가상화로 실제 0~16이 아닌 특정 주소로 재배치 하고 싶음

베이스와 바운드(base and bound)

동적 재배치 라고도 함

  • 각 CPU마다 2개의 하드웨어 레지스터 필요
  • CPU는 각각 베이스 레지스터, 바운드 레지스터(한계 레지스터)

배이스

  • 베이스와 바운드는 원하는 위치에 주소공간 배치를 가능하게 함
  • 배치와 동시에 프로세스가 오직 자신의 주소공간만 접근하는것을 보장
  • 프로그램은 주소 0에 탑재되는 것 처럼 작성되고 컴파일 됨
  • 실제 프로그램이 탑재될 물리 메모리 주소는 베이스 레지스터
  • 때문에 프로세스에 의해 생성되는 모든 주소는 아래와 같음
physical address = virtual address + base

virtual address: 프로세스가 생성하는 메모리 참조

바운드

바운드 레지스터는 보호를 지원하기 위해 존재

  • 프로세서는 메모리 참조가 합법적인가 확인하기 위해 가상 주소가 바운드 안에 있는지 확인
  • 위의 예시에서 바운드는 항상 16KB
  • 프로세스가 바운드보다 큰 가상주소 or 음수 가상주소 참조시 CPU는 예외 발생 후 프로세스 종료

베이스 & 바운드는 CPU 칩 상 존재하는 하드웨어 구조

주소변환에 도움주는 프로세서 일부를 메모리 관리 장치 라고도 함

바운드 레지스터는 두가지 방식 중 하나로 정의될 수 있음

  1. 주소 공간의 크기를 저장하는 방식
    • 하드웨어는 가상 주소를 베이스 레지스터에 더하기 전 바운드 레지스터와 비교
  2. 주소 공간의 마지막 물리주소를 저장하는 방식
    • 하드웨어는 베이스 레지스터를 더하고 그 결과가 바운드 안에 있는지 검사

15.4 하드웨어 지원 : 요약

주소변환에 필요한 하드웨어 지원

15.5 운영체제 이슈

하드웨어가 새로운 기능을 제공하는 것처럼 운영체제도 개입되어야 하는 세 개의 시점이 존재

  1. 프로세스가 생성 시 OS는 주소 공간이 저장될 메모리 공간을 찾아 조취를 취해야 함
    1. 각 주소 공간은 물리 메모리 크기보다 작고 크기가 일정하다는 가정 하에 OS가 쉽게 처리 가능
    2. 프로세스 생성시 OS는 새로운 주소 공간 할당에 필요한 영역을 free list 자료구조를 검색
  2. 프로세스 종료시 프로세스가 사용메모리 회수해 다른 프로세스 or OS 가 사용할 수 있게 해야 함
  3. 문맥 교환이 일어날 때도 몇가지 추가 조취 취해야 함
    1. CPU마다 한쌍의 베이스-바운드 레지스터 존재(당연히 프로세스마다 다른 값)
    2. 프로세스 전환 시 베이스 바운드 쌍을 저장하고 복원해야 함
    3. 프로세스 중단 결정 후 메모리에 존재하는 프로세스 별 자료구조 안에 베이스 바운드 레지스터 값을 저장해야 함 이 자료구조는 프로세스 구조체(프로세스 제어블록)이라 불림
  4. 예외 핸들러 or 호출 함수를 제공해야 함
    1. 프로세스가 바운드 밖 메모리 접근 시도 시 CPU는 예외핸들러 설치

0개의 댓글