티스토리 뷰

System/Windows

페이징 정리 1

Tribal 2016. 3. 2. 21:52

#------------------------------------------------- 페이징 -----------------------------------------------------------#

  여러개의 프로그램을 사용하는데 실제 주소모드와 같이 하나의 물리 메모리에서 모든 프로세스를 매핑할 경우 사용할 수 있는 메모리의 폭이 좁다. 때문에 가상 주소를 사용하여 여러 개의 프로그램이 각각의 메모리 할당을 할 때 혼자만의 메모리 공간을 가지도록 착각하게 되면 효율적이다.


  페이징을 할 때 메모리를 일정 크기 단위로 블록을 만드는데 이 페이지 블록을 페이지 프레임이라고 부른다. 그리고 이 페이지 블록은 0번지부터 만들어져 페이지 프레임 0, 1번지는 페이지 프레임 1 같은 식으로 번호를 매긴다.


  페이지 크기는 메모리 블록 하나가 디스크로부터 얼마만큼의 데이터를 읽어들여서 저장하는지를 결정하기에 크게 읽어 들일수록 디스크에 접근횟수가 줄어들어 효율적이다. 이 페이지 크기는 시스템 아키텍쳐에 따라 달라진다. 또 0번 페이지 프레임을 읽어왔는데 1번 프레임(다른 주소의 데이터)이 필요한 경우 페이지 프레임을 다른 것으로 변경해야 한다. 이를 페이지 교체 기법이라고 한다.


  이런식으로 페이지를 나눠 둔다고 해도 상대적인 주소(번지)만 알 수 있을 뿐 실제 주소로 사용할 수 없다. 때문에 이것을 가상주소이든 물리주소이든 변환해야 한다. 그래서 각각의 프로세스가 실제 메모리에 어떻게 매핑되는지를 나타내는 매핑 목록을 가지는데 이것이 페이지 테이블이다.

페이지 테이블은 이름에서 볼 수 있듯이 페이지의 목록이기 때문에 테이블 몇 번째 페이지 프레임인지와 페이지 프레임 내부에서의 Offset이 있어야 주소로 변환할 수 있다.

그렇다면 당연히 몇 번째 페이지 프레임인지와 페이지 프레임 내부에서의 Offset을 나타내는 녀석이 있을 것이다. 이 부분의 답은 선형 주소(Linear Address)에 있다.


  또 한 가지 프로세스마다 각자의 페이지를 가지고 그 페이지를 효율적으로 읽어오기 위해 페이지 프레임을 나눠서 사용한다. 그리고 페이지 프레임을 저장한 목록이 페이지 테이블이라고 했는데 한 개의 프로세스마다 수 많은 테이블을 생성할 테니 이럴 경우 프로세스가 많을 때 메모리가 매우 복잡하므로 이것을 분배해서 나눈 녀석도 있을 것이다.

  이 의문점을 해결해줄 녀석이 페이지 디렉토리라는 것이다. 그래서 1024*1024는 매우 크지만 2번에 걸쳐 만들경우 많은 페이지 테이블을 그대로 메모리에 올리지 않아도 되어 훨씬 효율적으로 찾을 수 있다. 그래서 메모리에는 일단 디렉토리의 목록만을 올린 후 사용한다. 그리고 이 디렉토리를 참고하여 테이블을 생성하여 메모리 낭비를 줄여 효율적으로 사용할 수 있도록 만든다.


※ 추가사항

TLB(Translation Lookaside Buffer) : 메모리를 접근할 때마다 계속 연산을 하게 된다면 시간 낭비가 생김, 그래서 여기에 어느정도 매핑 정보를 저장해둠


#-------------------------------------------------- 단편화 -----------------------------------------------------------#

  실제 메모리가 있다. 여기에 메모리를 매핑할 때 가상 페이지에서는 자신만이 사용하는 것처럼 보이겠지만 실제 메모리에서는 각자의 프로세스들이 매핑되게 될 것이다. 그리고 프로세스는 매핑될 때 실제 메모리에서 비어있는 메모리의 특정 부분마다 매핑이 될 것이다. 그리고 당연히 각자의 페이지를 가지고 프로세스끼리 접근할 수 없을 것이다.

  이 때, 이것이 반복되어 실제 메모리에 프로세스를 추가, 제거하다보면 프로세스마다 크기의 차이가 존재하기 때문에 결국 프로세스와 프로세스 사이에 빈 공간이 만들어지게 된다. 이 빈 공간이 늘어나는 상태가 반복될 경우 사용하지 않는 부분이 늘어나기 때문에 메모리 낭비가 점점 더 커지게 된다. 이것이 단편화이다.



  그래서 이런 문제점을 해결하기 위해 페이징과 세그먼트 기법의 장점을 합쳐서 사용하게 된다.

  페이징은 단변화가 존재하지 않도록 주기억장치(RAM)을 효율적으로 사용할 수 있고, 세그먼트는 가변적인 자료구조와 프로세스끼리를 보호하는 장점을 가지고 있다.

'System > Windows' 카테고리의 다른 글

Windows 특권레벨  (0) 2016.03.10
페이징 정리 2  (0) 2016.03.10
스레드의 상태  (0) 2016.03.02
Windows ROP  (2) 2016.02.12
Windows SEH Overwrite  (0) 2016.02.11
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31