Etc./공부 요약2017. 5. 15. 01:14

1. 가상 메모리 관리 기법


Paging 메모리 관리 기법

논리주소의 고정된 페이지(Page)라고 불리는 블록들로 분할 관리하는 기법

각각의 페이지는 물리 메모리의 프레임과 맵핑

페이지를 가리키는 논리주소에서 프레임을 가리키는 물리주소로 변환한다


TLB에서 가상 기억장치와 주기억장치를 매핑 ( TLB는 MMU(Main Memory Unit) 내에 있어 빠른 매핑 가능)

+TLB 내에 매핑 정보가 없으면 Page Table에서 매핑을 수행하고 Real Address와 매핑하여 Main Memory를 참조한다


※   TLB(Translation Look aside Buffer)

페이지 테이블 접근에 따른 지연 문제를 해결하기 위한 변환 버퍼

가장 최근에 사용된 페이지 테이블 항목을 유지

주기억장치의 Cache Memory와 유사하게 관리

MMU(Memory Management Unit)

주기억장치와 캐시의 메모리 주소를 변환하는 역할을 수행

캐시의 통제하에 관리

캐시에 먼저 사용된 후 메모리에 쓰임


Segmentation 메모리 관리 기법

메모리를 세그먼트 세트로 나눠 관리

세그먼트는 해당 세그먼트의 시작 주소인 Base Address와 세그먼트의 크기를 지정하는 길이값으로 구성

주소 지정은 세그먼트의 Base Address를 지시하는 Segment Selector와 세그먼트 내의 변위(Offset) 값을 통해 지정

가상 메모리 주소는 세그먼트 번호와 변위 값으로 구성

Segment Table에서 Base Segment의 주소를 획득하고 변위 값(과 결합하여 물리 메모리 주소 구함


Segment는 가변 공간을 할당하기 때문에 계산을 통해 주소를 매핑

Virtual Address는 Segment Table 주소를 매핑하고 Main Memory와 매핑한다.


Paged Segmentation 기법

페이지들로 세그먼트를 구성하고 세그먼트 표 참조 후 페이지 표를 참조

논리주소는 세그먼트 번호, 페이지 번호, 오프셋으로 구성

외부 단편화는 제거되지만 내부 단편화 발생 가능성 존재

Posted by BadSchool
Etc./공부 요약2017. 5. 14. 17:17

1. 캐시 메모리 일관성(Cache coherence)


일관성 유지 메커니즘

멀티프로세서 환경에서 각 프로세서가 캐시를 보유하며 캐시에 로드된 데이터를 벼경한 경우 주기억장치의 데이터와 동일하게 유지됨


2. 캐시 불일치


캐시 쓰기 정책

불일치 상황을 설명하기 전 캐시 쓰기 정책은 두가지로 나누어 진다.


Write-Through 정책

모든 쓰기를 캐시와 메모리에 동시에 쓴다.

Write-Back 정책

캐시에 우선 반영 후 메모리에 쓴다. 캐시 라인이 교체시에만 메모리에 쓴다.

Write-back 정책 사용 가정시 발생하는 불일치

첫번째 프로세서의 값을 2로 갱신하였을 때, 캐시라인이 교체되지 않을 때 까지 캐시와 메모리의 값이 불일치 한다.


Write-Through 정책 사용 가정시 발생하는 불일치

첫번째 프로세서의 값을 2로 갱신하였을 때, Proc1과 주 메모리의 값은 같이 갱신되지만 Proc2와 Proc3은 갱신되지 않아 불일치 한다.


3. 가상 메모리 시스템 (Virtual Memory System)

이름만 봐도 알겠지만 주 기억장치(ex. ram)의 용량이 부족하여 보조기억장치(ex. hdd)를 주기억장치 처럼 사용하여 메모리의 공간을 확대한다.

가상 메모리를 사용하기 위해 VAS(Virtual Address Space)를 사용한다.


※VAS(Virtual Address Space)? = 가상 주소 공간

가상 메모리 기법으로 제고되는 주소 공간으로, 프로세스의 관점에서 사용하는 주소이다.

-위키백과-


가상 메모리 관리 단위

페이지(Page) : 가상 기억장치 상에서 동일한 크기의 최소 논리 분할 단위

세그먼트(Segement) : 사용자 주소 공간을 용도별로 논리적 단위로 나눈 것


 이름

Paging 기법 

Segement 기법 

할당

고정 분할 

가변 분할 

적재 

요구 페이지에 일부 적재 

프로그램 전체 적재 

관점 

메모리 관리 측면 

파일 관리 측면ㅇ

장점 

요구 페이지만 적재
외부 단편화를 해결
교체시간 단축 

사용자 관점
개발, 프로그래밍 용이
내부 단편화 해결

코드, 데이터 공유 용이 

단점 

내부 단편화 발생
Thrashing, 잦은 디스크 I/O유발 

외부 단편화 발생

메인 메모리 다량 요구 



관리 정책

이름

내용 

예 

할당 기법

Allocation 

프로세스에게 할당되는 메모리 블록의 단위 결정 

고정 할당

가변 할당

Paging

Segmentation 

호출 기법

Fetch Policy 

보조기억장치에서 주기억장치로 적재할 시점 결정 

Demand Fetch

Pre Fetch 

배치 기법 

Placement

요구된 페이지를 주기억장치의 어느 곳에 적재할 것인지 결정 

First fit

Best fit

Next fit

Worst fit 

교체 기법

Replacement 

주기억장치 공간 부족 시 교체 대상 결정 

Random

FIFO

LRU

LFU

NUR

SCR

Optimal 


할당 정책(Allocation Policy)

이름

종류 

내용 

 연속 할당

고정 분할 

고정된 크기의 단위 메모리 할당

내부 단편화 발생 

가변 분할 

할당 단위를 요청마다 다른 크기로 할당 

비연속 할당 

Paging 

가상 메모리 블록을 페이지 단위 관리

TLB와 MMUm Page Table로 관리 

Segmentation 

가변 크기인 세그먼트로 분할

Segement Table로 관리 


Posted by BadSchool
Reversing/Skill2017. 5. 13. 02:43

어셈블리 언어는 리버싱을 하기 위한 가장 기초 지식이다.

프로그래밍탭에 쓸까 이곳에 쓸까 고민많이 했는데, 깊게 들어가진 않을 거라 이곳에 쓴다.


레지스터

CPU에서 사용 하는 기억장소로, C언어로 빗대어 표현하자면 변수라고 봐도 무방하다.

이 곳에서는 80x86 프로세서를 기반으로 설명한다.


레지스터의 종류

데이터 레지스터

EAX, EBX, ECX, EDX


포인터 레지스터

ESP, EBP


인덱스 레지스터 (Index register)

ESI, EDI


세그먼트 레지스터 (Segment register)

CS, DS, SS, ES


명령어 구성

명령어 종류

push

push eax

eax의 값을 스택에 저장 

pop 

pop eax

스택의 값을꺼내 eax에 저장 

mov 

mov eax, ebx

ebx의 값을 eax에 옮김 

lea 

lea eax, ebx 

ebx의 주소값을 eax에 옮김

inc 

inc eax 

eax++ 

dec 

dec eax 

dec-- 

sub 

sub eax, ebx 

eax에서 ebx를 뺀 값을 eax에 저장

call 

call abc 

abc라는 함수를 호출 

ret 

ret 

호출한 바로 다음 지점으로 이도 

cmp 

cmp eax, ebx 

eax와 ebx값을 비교 (매우 자주 나옴) 

jmp 

jmp abc 

abc라는 곳으로 이동 

int 

int 3

인터럽트, 안티디버깅 기법중 하나로도 쓰임

nop 

nop 

아무 동작도 하지 않음 




'Reversing > Skill' 카테고리의 다른 글

[Shell coding] msfvenom 쉘코딩  (0) 2017.05.10
Posted by BadSchool