[OSTEP] Address Translation

Soeng_dev·2022년 4월 3일
0

주소변환의 목표

• 효율성

하드웨어 지원을 활용해야함

• 제어

응용 프로그램이 자기 자신의 메모리 이외 다른 메모리에 접근 못하도록 운영체제가 보장하는 것

• 유연성

프로그래머가 원하는 대로 주소공간을 사용하고 프로그래밍하기 쉬운 시스템을 만드는 것

하드웨어 지원

Process status word 레지스터의 한 비트가 cpu의 현재 실행 모드(커널, 사용자 모드)를 나타냄, 시스템 콜, 예외나 인터럽트 발생 시 cpu는 모드를 전환

하드웨어는 운영체제가 쓸 수 있도록 베이스와 바운드 레지스터 값을 변경하는 명령어를 제공해야 함

프로그램이 바운드를 벗어난 주소로 메모리 접근을 시도하는 상황, 특권이 필요한 베이스와 바운드 레지스터값의 변경을 시도할때 예외를 발생시킬 수 있어야함
예외발생 시 운영체제의 핸들러가 실행되어야 하며
cpu는 핸들러들의 주소를 파악하기 위한 방법을 제공

• base and bound register

cpu에는 베이스와 바운드 레지스터가 각 한개씩 있어 프로세스의 메모리 변환에 사용할 수 있다.
커널모드에서만 base, bound 레지스터들을 변경할 수 있으며, 운영체제는 하드웨어가 제공하는 명령어를 사용해 base, bound 레지스터를 변경한다.

» 베이스 레지스터

프로세스의 실제 물리메모리의 시작값을 저장하는 레지스터

» 바운드 레지스터

프로세스가 접근하는 메모리가 프로세스에게 부여된 주소공간 내부인지 확인하기 위한 레지스터

• 동적 (하드웨어 기반) 재배치

베이스 레지스터와 바운드 레지스터를 이용해 프로세스가 접근하는 가상메모리주소를 실제 메모리 주소로 변환해주며, 주소공간 내부의 메모리인지 확인함

동적 재배치 방식에서 운영체제 역할

하드웨어 지원과 운영체제 관리가 결합되면 간단한 가상메모리를 구현 가능함

limited direct execution의 접근방식을 따르고 있음
운영체제는 하드웨어를 적절하게 설정하고 프로세스가 cpu에서 직접 실행할 수 있게 해야함, 메모리 변환은 운영체제 개입없이 하드웨어에서 처리됨
운영체제는 프로세스가 잘못된 행동을 했을 때만 개입

• 운영체제 개입 시점

» 프로세스 생성시

물리메모리를 슬롯의 배열로 보고 각 슬롯의 사용여부를 관리
새로운 영역을 찾기 위해 빈공간 리스트(free list, 현재 사용하지 않는 메모리의 영역으로 구성된 리스트)라는 자료구조를 검색

» 프로세스 종료 시

운영체제는 사용하던 메모리를 회수,
종료한 프로세스의 메모리를 빈공간 리스트에 넣고 연관된 자료구조를 정리함

» context switching 시

process structure 또는 PCB(Process Control Block) 라고 불리는 프로세스별 자료구조 안에 베이스,바운드 레지스터 값을 저장,
프로세스를 다시 시작할때 이를 참고해 레지스터 값을 설정함

프로세스가 중단중일때는 운영체제가 주소공간을 비교적 쉽게 옮길 수 있다.
새 위치로 주소공간을 복사한 후 새 주소공간의 위치로 베이스 레지스터를 갱신함

• 예외 핸들러

운영체제는 예외핸들러 또는 호출될 함수를 제공해야함

부팅할때 특권명령어를 사용해 이 핸들러를 설치함

일반적으로 핸들러는 예외상황을 일으킨 프로세스를 종료시킴

• 동적 재배치 방식의 단점

스택과 힙 사이의 사용하지 않는 메모리가 크면 공간이 낭비됨
-> 내부 단편화 : 고정크기의 슬롯에 주소공간을 배치하므로써 발생

profile
Software Engineer

0개의 댓글