Address
Logical address
- virtual address
- 프로세스마다 독립적으로 가지는 주소 공간
0번지 부터 시작
- CPU가 보는 주소
Physical address
주소 바인딩
- Symbolic Address -> Logical Address -> ? -> Physical address
- 주소를 결정하는 것 ( logical -> physical 하는 시점이 언제인가? )
Address Binding (주소 바인딩)
1. Compile time binding
physical address가 컴파일 시 알려진다
시작 위치를 변경하게 되면 재컴파일
- 컴파일러는
절대 코드 absolute code 생성
2. Load time binding
Loader의 책임하에 physical address 부여
- 컴파일러가
재배치가능코드 relocatable code 생성
3. Execution time binding = Runtime binding
- 수행이 시작된 이후, 프로세스의 메모리 상 위치를 옮길 수 있음
- CPU가 주소를 참조할 때마다
binding을 점검 ( address mapping table ? )
- H/W 지원 (
base and limit registers, MMU) 필요
Picture<<
Memory-Management Unit (MMU)
logical address -> physical address로 mapping 해주는 H/W device
사용자 프로세스가 CPU에서 생성해내는 모든 주소값에 + base register (=relocation register)
User program ?
logical address 만 다룸. physical address 볼 수 X, 필요 X
Dynamic Relocation
Picture<<
H/W Support for Address Translation
운영체제 및 사용자 프로세스 간 메모리 보호를 위해 사용하는 Register
1. Relocation register
2. Limit register
Terminologies
Dynamic Loading
- 프로세스의 해당 루틴이 불려질 때 메모리에 load하는 것
- 프로세스 전체를 미리 메모리에 올리지 X
GODD
- memory utilization 향상
- 유용할 때 = 사용 빈도가 적은, 긴 코드
- 프로그램 자체에서 구현 가능 ( OS의 특별한 지원 필요 X )
- OS는 라이브러리를 통해 지원 가능
Dynamic Linking
Static linking
- 라이브러리가 프로그램의 실행 파일 코드에 포함
- 실행 파일의 크기 up up
- 동일한 라이브러리(e.g printf)가 각각 프로세스 메모리에 올라감 -> 메모리 낭비
Overlays
- 메모리에 프로세스의 부분 중 실제 필요한 정보만을 올림
- 유용할 때 =
프로세스의 크기 > 메모리의 크기
- OS 지원 X, 사용자에 의해 구현 O
Manual Overlays
- 작은 공간 메모리를 사용하던 초창기 시스템
- 수작업으로 프로그래머가 직접 구현
- 매우 복잡한 프로그래밍
Swapping
- 프로세스를 일시적으로 메모리에서
backing store로 쫓아내는 것
Backing store (=swap area)
디스크
- 많은 사용자들의 프로세스 이미지를 담을 만큼 충분히 빠르고 큰 저장 공간
Swap in / Swap out
중기 스케줄러 Swapper 에 의해 swap out 시킬 프로세스 선정
- priority-based CPU scheduling
-> priority가 낮은 프로세스를 swap out
-> priority가 높은 프로세스를 메모리에 올려 놓음
Compile time binding, load time binding -> 원래 메모리 위치로 swap in 해야 한다~
Execution time binding -> 빈 메모리 영역 아무 곳에 올릴 수 있다~
- Swap time 은 대부분
transfer time 이다 ( = swap 되는 양에 비례하는 시간 )
Schematic View of Swapping
Picture <<
Allocation of Physical Memory
Memory = OS 상주 영역 + 사용자 프로세스 영역
- OS 상주 영역 = interrupt vector, 낮은 주소 영역
- 사용자 프로세스 영역 = 높은 주소 영역
Contiguous allocation
각각의 프로세스가 메모리의 연속적인 공간에 적재
1. Fixed partition allocation
2. Variable partition allocation
Non-contiguous allocation
하나의 프로세스가 메모리의 여러 영역에 분산
1. Paging
2. Segmentation
3. Paged Segmentation
연속적 할당 Contiguous Allocation
고정분할 방식
- 물리적 메모리를 영구적 분할
partition으로 나눔
- 방식 1) 동일한 분할 크기 2) 서로 다른 분할 크기
- 하나의 분할 -> 하나의 프로그램
- 최대 수행 가능 프로그램 크기가 제한
- 동시에 메모리에 load되는 프로그램 수 고정
- Internal fragmentation O, External fragmentation O
가변분할 방식
- 프로그램의 크기를 고려해서 할당 => 기술적 관리 필요
- 분할의 크기, 분할의 개수가 변할 수 있음
- Internal fragmentation X, External fragmentation O (메모리 중간에 Hole 생길 가능성 O)
Fragmentation
Internal fragmentation 내부 조각
- 프로그램 크기 < 분할의 크기
- 비어있는 공간에 프로그램이 올라갈 수 없는 작은 분할
External fragmentation 내부 조각
- 프로그램 크기 > 분할 크기
- 분할 내부에서 발생하는 사용되지 않는 메모리 조각
- 이미 배정되어 있지만 사용되지 않는 공간
pic
Hole
- 할당되기 전 가용 메모리 공간
- 다양한 크기
- 프로세스가 도착하면 수용가능한 hole을 할당
- 운영체제는 메모리를 유지 1) 할당 공간 2) 가용 공간 (hole)
Dynamic Storage-Allocation Problem
가변 분할 방식에서 가장 적절한 hole을 찾는 문제
1) First-fit
2) Best-fit
3) Worst-fit
1) First-fit
2) Best-fit
- size 가 n 이상인 가장 작은 hole
- 정렬되지 않은 경우 -> 전체 탐색
- Best-fit 사용시, 많은 수의 아주 작은 hole들이 생성
3) Worst-fit
- 가장 큰 hole -> 전체 탐색
- worst-fit 사용시, 아주 큰 hole들이 생성
- 나중에 더 큰 프로그램이 들어갈 수 있는 hole을 미리 사용할 수 있어서 좋은 방법 X
compaction
- 목적 : External fragmentation 문제 해결
- 방법 : 사용 중인 메모리 영역을 재배치하여, 아주 큰 hole을 만든다
- 단점 : 비용이 많이 듬
- 해결 : 최소한의 메모리 이동으로 compaction
- 조건 : 프로세스의 주소가 실행 시간에 동적으로 재배치가 가능한 경우
불연속적 할당 Non-contiguous Allocation
Paging
- process의 virtual memory를
동일한 사이즈의 page로 나눔
- virtual memory 의 내용이
page 단위로 noncontiguous하게 저장
- 일부는
backing storage, 일부는 physical memory에 저장
Basic Method
- logical memory -> 동일한 크기의
page 로 나눔
- physical memory -> 동일한 크기의
frame으로 나눔
- page size = frame size
- Paging에서, 할당 가능한 가용 frame을 관리해야 한다.
- Internal fragmentation O, External fragmentation X
CPU가 사용하는 Virtual address 의 구성
1) p : page number
- page table의 index, 해당 index에는 물리적 메모리 상의 base address 저장
2) d : page offset
- physical address = base address + page offset(d)
Pic) Address Translation Architecture
Pic) Paging Example
Implementation of Page Table
- page table은 main memory 에 상주
PTBR
page-table base register - page table을 가르킴
PTLR
page-table length register - 테이블 크기를 보관
- 모든 메모리 접근 연산 = 2번의 memory access 필요
1) page table 접근
2) data/instruction 접근
TLB
translation look-aside buffer = Associative Register
고속 lookup H/W cache 사용
TLB
TLB
= associative register
= translation look-aside buffer
설명
- page table 중 일부가 보관되어 있다
- TLB hit : 해당 page #가 TLB에 있는 경우 -> 바로 frame # 얻음
- TLB miss : 해당 page #가 TLB에 없는 경우 -> main memory의 page table 접근 후 frame #
- TLB flush : context switch 발생 (process 마다 달라져야 하는 정보)
Paging H/W with TLB
> Pic
Effective Access Time
EAT
= hit 일 때 접근 시간 + miss 일 때 접근 시간
= 2 + e - a
Two-Level Page Table
등장 : 현대 컴퓨터의 대부분 프로그램은 4G의 주소 공간 중 일부분만 사용하므로 page-table의 공간이 심하게 낭비
해결
1. page table 자체를 page로 구성
2. 사용되지 X 주소 공간 -> outer page table의 엔트리 값을 NULL로 설정
사진 1
logical address의 구성 계산하기
1) page offset (d)
2) page number 의 page offset (p2) - outer page table의 page의 d
3) 나머지 = page number (p1) - outer page table index
사진 2
등장 : address space가 커짐에 따라서 page table을 다단계 구성
특징
- logical address -> physical address 변환에 더 많은 메모리 접근
- 많은 수의 메모리 접근 해결 =
TLB 주소 변환을 전담하는 cache memory
Memory Protection
- page table 은 각 entry 를 가진다
- 각 entry 는 1) protection bit, 2) valid-invalid bit 을 추가로 가진다
protection bit
page에 대한 접근 권한 관리
valid-invalid bit
< valid >
해당 주소의 frame에 유효한 내용이 있음 (접근 가능)
< invalid > (접근 불허)
1) 프로세스가 그 주소 부분 사용하지 X 경우
2) 해당 페이지가 swap area에 있는 경우
(v)/(i) Bit in a Page Table
Inverted Page Table
Inverted Page Table Architecture
Shared Page
Shared Pages Example
Segmentation
Segmentation Architecture
Segmentation Hardware
Example of Segmentation
Sharing of Segments
Segmentation with Paging