/////
Search
📝

6월10일(월)

ch9_part1

메모리(기억장치) 종류

레지스터 : HW(CPU)가 관리
캐시 : HW(CPU)가 관리
주기억장치 : SW(OS)가 관리
보조기억장치 : SW(OS)가 관리

메모리 계층구조

Block & Word

Ch9 : Memory Management

Contigunous Memory Allocation
Paging
Structure of the Page Table
Swapping
Example
Intel 32 & 64-bit Architecture
ARMv8 Architecture

Objectives(학습 목표)

메모리 하드웨어를 조직화하는 다양한 방식에 대한 상세한 설명
다양한 메모리 관리 기술들에 대해 말하기
Pure Segmentation과 Segmentation with paging을 지원하는 Intel Pentium의 상세한 설명

Background

프로그램은, 디스크로부터 메모리로 가져와서 프로세스 내에서 교체되고 실행됨
메인메모리와 레지스터들은, 직접 액세스 가능한 CPU에만 저장됨
메모리 유닛은 다음의 흐름만을 봄
Addresses + Read Requests
Address + Data & Write Requests
레지스터 접근은, 한 CPU 클럭 이내에 완료
메인 메모리는 많은 사이클들을 가질 수 있고, 이는 Stall을 야기함
캐시는 메인 메모리와 CPU 레지스터 사이에 위치
메모리 보호는 올바른 동작이 보장되기를 원함

Protection

프로세스가 오직 주소공간에 존재하는 주소들에만 접근 가능하도록 할 필요가 있다 이러한 보호를, 우리는 base & limit registers 쌍(프로세스의 논리주소공간을 정의하기 위해)을 사용함으로써 제공 가능.

Hardware Address Protection

CPU는 User mode에서 생성된 모든 메모리 접근을 체크해야함 (base와 limit 사이에 위치함을 보장하기 위해서)
base와 limit registers를 로딩하도록 하는 명령어는 특권이 있음

Address Binding

프로그램의 논리주소를, 실제 메모리의 물리주소로 매핑하는 작업
디스크 상의 프로그램들은 Input Queue를 채우기 위한 수행을 위해 메모리에 가져와질 준비를 마친 상태
support 없이는, 0000주소로 load될 수 있다
첫 user 프로세스가 항상 0000에 위치한 건 불편하다
개선방법은?
주소들은 프로그램의 life의 다른 stage들에서의 다른 방식으로 표현될 수 있음
소스코드의 주소는, 대게 Symbolic
컴파일된 코드의 주소는 재배치 가능한 주소에 바인딩됨
Linker나 Loader는 재배치 가능한 주소들을 절대 주소에 바인딩함
각각 바인딩은, 하나의 주소를 다른거에 매핑함

Binding 시점에 따른 구분

1.
Compile time binding
컴파일 시점에 주소 결정 (결정 후 주소 변경 X)
프로그램 전체가 메모리에 올라가야함
2.
Load time binding
메모리 적재 위치를, 컴파일 시점에서 모르면 상대 주소를 생성
적재 시점에 시작 주소를 반영하여, 사용자 코드 상의 주소를 재설정
프로그램 전체가 메모리에 올라가야함

Dynamic Loading

프로그램을 모두 Load 할 수 없는(or 하지 않는) 경우
모든 루틴(함수)를 교체 가능한 형태로 디스크에 저장
실제 호출 전까진, 루틴을 적재하지 않음
메인 프로그램만 메모리에 적재해 수행
루틴의 호출시점에 주소 바인딩 수행
장점 : 메모리의 효율적 사용
3.
Run time binding
프로그램 수행시 (Ready → Running)
수행 도중 다른 위치로 이동 가능
HardWare의 도움 필요(MMU : Memory Management Unit)
대부분의 OS가 사용

Swapping

프로세서 할당이 끝나고 수행 완료된 프로세스는 swap device로 보내기 : swap-out 재시작된 프로세스 : swap-in

Binding of Instructions & Data to Memory (명령어와 데이터를 메모리에 바인딩)

Compile Time
메모리 위치의 우선순위를 알고 있다면, ”Absolute Code”는 생성될 수 있음 → 그러기 위해선, location change가 시작될때, 무조건 코드를 “recompile”해야함
Load Time
만약 메모리 주소를 컴파일 타임에 모르면, 주소 재배치가 가능한 코드를 생성해야한다
Execution Time
만약 프로세스가 수행시간 도중에 한 메모리 부분(segment)에서 다른 곳으로 이동 중이면, 런타임일때까진 바인딩이 딜레이됨
주소 매핑(address mapping)을 위한 하드웨어의 지원이 필요

Multistep Processing of User Program

Logical vs Physical Address Space

physical address 공간을 분리하는 logical address 공간은, 적절한 메모리관리의 핵심이다
Logical address : CPU에 의해 생성
가상 주소로서 참조됨
Physical address : 메모리 유닛에 의해 보이는 주소
Logical address space
프로그램에 의해 생성된 모든 논리 주소의 세트
Physical address space
프로그램에 의해 생성된 물리 주소의 세트

Memory-Management Unit(MMU)

런타임의 하드웨어 기기는, 가상을 실제(물리적) 주소로 매핑 (다양한 메소드들은 뒷 챕터에서 소개)
Simple Scheme(base-register scheme의 일반화)를 고려해보자
Base Register를 “Relocation Register”라고 부름