메모리 Flashcards
시스템 메모리 구조
[메모리 구조]
1. Stack : 지역변수, 매개변수 할당 (LIFO, 컴파일시 크기 지정)
2. Heap : 사용자 동적 할당 (LILO, C언어 malloc()호출시 할당)
3. Data : 전역변수, Static 변수 저장 (프로그램 시작시 할당)
4. Code : 실행코드 저장 (함수, 제어문, 상수)
- Stack영역은 상위에서 하위로 할당, Heap 영역은 하위에서 상위로 할당
- 버퍼 오버플로 공격에 취약
- 데이터 길이에 대한 불명확한 정의를 악용, 스택의 경계선 침범을 통한 악의적 코드 공격 수행 가능
메모리 계층구조
[정의] 고가의 고속 메모리와 저가의 저속 메모리를 계층적으로 배치하여 낮은 가격에 컴퓨터 성능을 최적화 시키는 Computer Architecture
[필요성] 속도차이 개선(CPU와 DISK사이 배치), 시스템 성능 향상, 비용문제 최적화
* 메모리 계층구조 설계 시 비용 대비 성능의 Trade-Off 를 잘 고려하여 설계해야 함
[메모리 계층 구성] CPU 레지스터 > 캐시 메모리 > 주기억 장치(Main Memory) > 디스크 (가상 메모리)
[접근단위] 레지스터(워드), 캐시(블록), 메모리(페이지), 디스크(세그먼트)
메모리 할당 방식
[메모리 할당]
1. 연속 메모리 할당 방식
- 단일 사용자 연속 메모리 할당
- 고정분할 다중프로그래밍(MTF) : 버디 시스템
- 가변분할 다중프로그래밍(MVT) : 버디 시스템
- 중첩(Overlay)
2. 분산 메모리 할당 방식 (불연속)
- 페이징(Paging) 기법 : 고정 분할, Page가 고정 크기 블럭 메모리(Page Frame)에 할당, 내부 단편화
- 세그먼트(Segment) 기법 : 동적(가변) 분할 기법, 사용자 관점에서 할당, 외부 단편화
주 기억장치
[정의] 컴퓨터가 동작하는 동안에 현재 시용되는 정보를 저장하고 있는 빠른 속도의 메모리
[종류] ROM, RAM
[단편화]
- 주기억장치 상에서 프로그램에 의해 사용되지 않고 낭비되는 부분적인 기억공간
[단편화 해결방안]
- 재배치, 통합, 압축
[메모리 할당 구조] (코데힙스)
- 코드, 데이터, 힙, 스텍
메모리 단편화
[리드] 메모리의 공간 낭비
[정의] 메모리상에서 프로그램에 의해 사용되지 못하고 낭비되는 부분적인 공간이 발생하는 현상
[특징]
- 낭비되는 공간, Read/Write 성능 저하
- 외부 단편화에 비해 낭비되는 내부 단편화의 메모리 공간이 매우 미비
[유형]
1. 내부 단편화 : 고정분할방식의 메모리 공간에 할당되고 남는 낭비된 공간 (고정분할, 페이징 기법),
2. 외부 단편화 : 동적분할방식 메모리에서 할당 및 해제가 반복적으로 일어나 할당이 불가능한 낭비 공간(가변분할, 세그먼트 기법)
[해결방안]
- 공통 : 재배치 (번지 부분을 조정), 통합 (인접한 단편화 영역을 찾아 하나로 통합), 압축 (빈 분할 영역을 주기억장치의 한 곳으로 합치는 작업, Garbage Collection)
- 외부 단편화 : Buddy Memory Allocation, 페이징 기법
- 내부 단편화 : Slab Allocator, 세그먼트 기법
Slab Allocator
[정의] 미리 할당 받은 캐시 내 메모리요청시 작은 크기로 메모리 할당/해제 하는 동적 메모리 관리기법
[특징] kmalloc에서 사용, 시스템 성능 향상
[구성요소]
- 구조체 : kernel_cache, cache_chain
- 유형 : slabs_full(모두 할당), slabs_partical(부분 할당), slab_empty(할당되지 않은 Slab)
- 저장단위 : 메모리 블록→객체할당 (slab→page→object)
* cache는 slab으로, slab은 page/object로 구성
[비교] 슬랩할당자 vs 버디시스템
- 개념 : 자주 사용 오브젝트 선할당 재구성 통한 메모리 관리 / 메모리 페이지를 크기 순서별 정렬 할당관리
- 사용목적 : 내부메모리 단편화해결 / 외부메모리 단편화해결
- 메모리관리 : 사전object필요 메모리 구성 / 2n단위로 버디구성
Buddy Memory Allocation
[정의] 메모리 2^n 크기로 분할하면서 가장 알맞은 크기에 메모리 할당하는 외부 단편화 해결 기법
* 가능할때마다 free 버디를 합치는 과정 반복
[특징] 외부 단편화는 해소되나 내부 단편화 문제는 존재 -> Slab Allocator 적용
메모리 인터리빙
[정의] 메모리의 접근시간을 최소화하기 위해 메모리를 복수개의 모듈로 나누고 동시에 접근 하는 기법
[방식]
- 상위 : 상위 비트 모듈 선택, 하위 비트 기억 장소
- 하위 : 상위 비트 기억 장소, 하위 비트 모듈 선택
- 혼합 (MSB, LSB) : 상위 비트 뱅크, 하위 비트 모듈 선택
[데이터 엑세스 방식]
- C-Access : 상위 인터리빙 방식, 순차적
- S-Access : 하위 인터리빙 방식, 병행적
[활용사례]
- Pipeline : 하위인터리빙, S-Access
- SPOF방식 : 상위,혼합, C-Access
- DDR DRAM : 하위인터리빙, S-Access
DMA
[리드] CPU 개입 없는 I/O
[정의] DMA 제어기가 버스 제어권을 획득 CPU 개입 없이 I/O 장치와 기억장치 간 직접 데이터 전송하는 제어방식
[필요성] I/O로 인한 CPU 성능 감소 방지
[특징] I/O 장치와 기억장치 간 직접 데이터 전송 방식
[동작]
1. IO 요청 : CPU 에서 DMA Controller 로 IO 요청
2. 제어 획득 : DMAC가 CPU로 부터 제어권 획득
3. ACK 전송 : DMAC는 I/O인터페이스에 데이터 적재하도록 DMA Ack 전송
4. 데이터 전송 : I/O 인터페이스는 데이터 전송
5. 제어 반환 : DMAC가 CPU에 제어권 반환 (결과 Interrupt 발생)
* 한 개의 명령에 여러 블럭 입출력, 임시저장소 등 대용량 처리위한 채널제어방식 존재
[동작모드]
- Burst Transfer Mode(Block) : 입출력 완료시까지 버스 점유
- Cycle Stealing Mode(Word) : 중앙 처리 장치와 번갈아 가면서 동작
- Demand Transfer Mode : Burst모드에서 DREQ 신호 비활성화시 전송 중지, 활성화시 재시작
- Interleaved Mode : CPU가 시스템 미사용시 DMA가 버스 사용
[비교] DMA vs 채널제어
- 처리단위 : 하나의 Instruction에 하나의 Block I/O / 하나의 Instruction에 여러 Block I/O
- 메모리 : 기억장치 필요 | 로컬 메모리 기반 데이터 블록 저장
- 활용 : 소형 컴퓨터, PC, 테블릿 | 대형 컴퓨터, 대용량 서버