프로세스에 전달한 데이터를 저장한 파일을 직접 프로세스의 가상 주소 공간으로 매핑하는 것
Memory mapping is primarily concerned with associating portions of a process's virtual address space with external storage (e.g., files or devices), enabling efficient data access. It's often used for I/O operations and doesn't directly deal with the translation of logical to physical addresses.
관련 개념
-
주소 바인딩: CPU가 프로세스의 작업을 실행하기 위해서는 논리적 주소만으로는 실제 메모리의 주소를 알 수 없기 때문에, 논리 주소와 위에서 물리적 주소를 매핑해주는 "과정"
- CPU가 주소를 참조할 때마다 해당 데이터가 물리적 메모리의 어느 위치에 존재하는지 확인하기위해 주소 매핑 테이블을 이용해 주소 바인딩을 점검함
- Address binding deals with the translation of logical addresses generated by a program into physical addresses in memory. It's essential for program execution and involves techniques like compile time, load time, or run time binding.
- 컴파일 시간 바인딩 (컴파일시)
- 적재시간 바인딩 (링커 -> 로더)
- 실행시간 바인딩 (적재 후 실행시)
-
Dynamic Loading
- 모든 루틴(function)을 교체 가능한 형태로 디스크에 저장
- 함수 호출시에만 가져오고 호출 전에는 적재 X
- 사용되지 않는 루틴들은 메모리를 점유하지 않게 되니 메모리 효율이 좋아짐
-
Overlay
- 실행하려는 프로그램이 메모리보다 클 때 필요없는 영역에 중첩하여 사용 (그때 쓰는 것만 가져와서 씀)
- 운영체제에 의해 이뤄지는게 아니라 프로그래머가 구현했던 방식
- VMM(Virtual memory management)가 나온 뒤로 사용되지 않음
-
Swapping(프로세스 교체)
- 중기 스케줄러(suspend)에서 스케줄링을 위해 메모리에 올라온 프로세스의 수를 조정하는 방법
- 자원 안쓰는 프로세스 메모리에서 내리기
- Swap In: secondary memory (Hard Drive)에서 main memory (RAM)로 옮기기
- Swap Out: main memory(RAM)에서 secondary memory(hard drive)로 옮기기
- https://binaryterms.com/swapping-in-operating-system.html
- 연속적인 메모리 공간을 프로세스에 할당하는 방식이다. 주소 변환으로 인한 CPU 오버헤드를 줄임으로써 프로세스 수행을 빠르게 만든다.
- 가장 쉬운 방법으로는 고정된 크기로 메모리를 나눠 프로세스에게 할당해주는 방식이 있고, 효율적인 메모리 분배를 위해 파티션을 프로세스 크기에 따라 나누는 방법이 있다.
- 내부 단편화(Internal Fragmentation)가 발생할 수 있다.
-
Contiguous Allocation에서 파티션으로 메모리를 관리하는 방식에는 두가지가 있다.
-
Fixed partition Multiprogramming
- 고정된 크기로 할당 (미리 분할되어 있다.)
- 똑같은 크기 X, 하지만 한번 정해진 간격이 바뀌진 않음
- 각 프로세스가 도착한다면 적당한 공간에 넣어주면 된다.
- 각 프로세스는 하나의 분할(Partiotion)에 적재한다
- 오버헤드 낮지만 Internal, External Fragmentation 둘 다 생김
- 각 Partition 별로 Boundary register 있음 (서로 관여 X)
-
Variable partition Multiprogramming
- 요청시 동적으로 분할하여 할당
- 종료되어도 파티션 유지
- External Fragmentation만 있음
- First fit (최초 적합), Best fit (최적 적합), Worst fit (최악 적합), Next fit (순차 최초 적합) 등의 최적화 방법이 있다
-
프로그램을 블록으로 나눠서 할당한다. (프로그램에 연속적인 메모리 공간을 할당하지 않고, 블록 단위로 쪼개서 할당)
-
필요한 블록만 가져와서 사용
-
나머지는 swap device에 존재
-
BMT
- 블록위치 정보를 저장하는 매핑 테이블
- Residence bit: 블록 적재 여부
- Real address: 블록의 실제 주소
-
BMT를 사용해 특정 메모리 주소 구하기
- BMT의 block b 칸 찾기
- redidence bit 검사
- 0인 경우: swap device에서 블록 가져와 테이블 갱신 후 real addr 확인
- 1인 경우: real addr 확인
- 실제 주소 r(a+d) 계산 및 접근
크게 Non-Contiguous Allocation은 block의 크기를 정적(page)으로 정하냐, 동적으로 정하냐(segmentation)에 따라 나눈 두가지의 방법이 있고, 거기에 두 방법을 합친 Hybrid 방법이 있다.
- page(p): 프로세스의 block
- page frame(p’): 메모리의 분할 영역, 페이지와 크기 같음
- ex) 프로그램 756, 페이지 150 → 페이지 총 6개
- There is no external fragmentation in paging but internal fragmentation exists
- simple and efficient
- PMT을 사용해 page mapping 정보를 저장함
- Direct Mapping
b + p * entrysize
- 진행순서
- PMT가 저장된 주소 b에 접근
- page p에 대한 entry 찾기
- 찾은 entry의 존재비트 검사, p’ 번호 확인
- p’와 변위 d를 사용해 주소 r 확인
- 문제점
- 접근 횟수 2배, 성능 저하
- PMT를 위한 공간 필요
- 해결
- TLB를 이용한 Associate Mapping
- Associate Mapping
- PMT를 위한 전용 기억장치 사용 → 캐시 = AMT, P’를 찾을 때, AMT 부터 접근
- page number를 병렬 탐색하여 p’를 빠르게 찾음
- 하드웨어 비싼 대신 오버헤드 낮고 속도 빠름
- 진행순서
- AMT에 있는 경우 → residence bit로 p’확인
- AMT에 없는 경우 → PMT 확인 후 AMT에 entry 적재
- PMT에서 사용되는 entry 지역성을 따져 AMT에 적재
- 서로 다른 크기를 갖는 논리적인 단위
- 서브루틴이나 함수, 행렬, 스택 등 단위로 이름 붙여 적재
- 미리 분할 X
- 공유 및 보호 용이
- 주소 매핑 및 메모리 관리 오버헤드가 큼
- Segment Map Table을 가짐
- SMT를 통해 물리주소를 찾는 순서
- SMT에 접근
- segment에 대한 entry 찾기
- 존재비트 검사
- 없으면 적재
- 변위 d가 segment 크기보다 크면 overflow 에러
- protection bit 상 접근 불가능한 상태면 Protection Exception
- 가상 주소와 변위로 실주소 확인
- 프로그램을 segment로 나누고 그걸 page로 나눔, 적재는 page 단위로.
- segmentation 방식에서 외부 단편화 없애기 위해 paging 방식과 섞음
- 외부보다 내부 단편화가 좀 더 안정적이기 때문
- SMT PMT 모두 사용
- 메모리 소모 많고, 매핑 복잡해 접근시간 김
- 외부단편화 X 내부단편화 O