이메일을 적으시면 보안관련 소식을 받을수 있습니다.
이메일:



안녕하세요... 이번에 팀블로그 3기로 뽑힌 서동진이라고 합니다...

나중엔 어셈블러를 하겠지만 그전에.. 컴퓨터를 이해해야하는 부분도 있기에 먼저
컴퓨터구조를 설명하고 단계별로 진행하도록 하겠습니다.

지금 대부분의 컴퓨터에는 아마 윈도우라는 OS가 설치되어 있을 겁니다.
그리고 지금의 윈도우는 Win32형식으로 돌아가고 있죠
Win32 같은경우에는 32비트 방식으로 메모리를 다루고, 멀티테스킹이라는 기술도 지원해 주고 있습니다.

과거의 16비트 ms-dos시절에는 컴퓨터의 기본메모리를 응용프로그램이 직접 관리를 했습니다. 즉. 시스템이 사용하는 메모리와 응용프로그램이 사용하는 메모리가 같은 영역에서 돌고 있었다는 것이죠. 이로인해서 큰 문제가 생겼습니다. 나이가 아직 어린(?)분은 잘 모를수도 있겠으나 옛날 dos시절 게임을 해보신 분이라면 아마 와닫을 수도 있는 이야기 입니다. rpg게임같은거 할때 레벨 올리기 귀찮아서 에디터 프로그램을 이용해서 렙업을 하거나 아이템을 획득하는거 이 모든것들이 16비트 시절에는 응용프로그램도 서로 다른 응용프로그램끼리 접근이 가능했기 때문에 가능한 이야기 입니다. 이로 인해서 해킹?하기도 쉬웠구요.
ms-dos는 16비트이기 때문에 16비트 레지스터를 가지고 메모리 주소를 포인팅하기 때문에 한번에 65535byte이상의 메모리를 포인팅 할 수 없습니다. 이 문제를 해결하기 위해서 세그먼트:오프셋 이라는 형식으로 65535byte의 한계를 넘기긴 했었습니다...

이러한 문제점을 해결하기 위해서 만든 것이 32비트형식의 플랫폼입니다.
32비트로는 42억정도(4G)까지 메모리 수치가 표현이 됩니다 이로인해서 세그먼트:오프셋이라는 훼이크로 고생할 필요는 없어졌습니다. 즉. 논리적으로 4G까지 엑세스 할수 있다는 겁니다. 그리고 이렇게 대폭 향상되면서 접근되는 방식도 바뀌게 되었습니다. 운영제체와 일반 응용프로그램간의 영역이 구분되어 지게 되었고, 응용프로그램간에도 가상메모리라는 것에 의해서 하나의 완전한 독립적인 프로그램으로서 다른 곳에서의 주소값에 의한 접근은 더이상 불가능해졌다는 겁니다. 이것이 프로텍트모드라고도 하죠

저는 이런 Win32 플랫폼으로 바뀌게 되고, 가상메모리가 지원이 되면서 얼마나 편해지고 많은 혜택을 받고 있는지에 대해서 이야기 해보고 싶어서 글을 쓰게 되었습니다.

우선 메모리는 과거에도 그렇고 현재에도 그렇고 한계를 가지고 있습니다. 이러한 생각을 가지신 분도 있을 겁니다. 램하나 사는거야 머 그렇게 부담스러운가? 예 맞습니다. 현재에는 램값이 떨어져서 그렇게 부담스러워 지지 않았고 게다가 램디스크를 구성해서 사용하기까지 하는 여유를 갖는 시대가 되었습니다.(저도 램디스크를 구성해서 사용중이구요 정말 하드디스크랑은 비교가 되지 않게 엄청 빠르더군요....) 하지만 메모리가 아무리 많다고 하여도, 분명 4G면 4G, 8G면 8G 한계를 가지고 있을겁니다. 각종 수많은 응용프로그램이 실행될때도 메모리,, 변수들도 메모리,, 계산(스택)할때도 메모리,,, 여튼 지금 우리가 사용하는 이 모든 것들이 메모리에 저장이 된 후 cpu가 꺼내서 처리를 하죠. (하드디스크에 있는 정보는 cpu 관점에서 봤을때 데이터로서의 의미만 있는것입니다) Win32에서는 프로그램이 실행될때마다 4G의 고유 메모리 영역이 할당됩니다.(아까 말했던 프로텍티드모드와 동일) 하지만 프로그램 하나 실행할때마다 4G라면... 실제 자신의 램이 아무리 높다고 해도(넉넉잡아 8G라 처도 2개의 프로그램만 돌아도 넘치게 되죠 OS영역도 있으니..) 초기 OS설계자들은 이러한 문제점 때문에 가상메모리라는 것을 만들었습니다. 이렇기 때문에 자신의 컴퓨터가 아무리 메모리용량이 높다 하더라도 가상메모리는 필요합니다.

가상메모리가 실제 물리적인 메모리의 내용을 하드디스크로 저장하는 것을 페이지 아웃 디스크의 내용을 메모리에 옮겨지는 것을 페이지 인 이라고 합니다. (역시 여기서 이름을 짖는것만 봐도 메모리가 얼마나 중요한건지 알 수 있을겁니다.)

컴퓨터의 램 메모리가 512M라고 치더라도 여러분이 실행한 프로그램은 가상메모리방식으로 보조기억장치와의 페이징을 통해서 4G라는 논리적인 메모리가 할당이 되고 사용할 수 있다고 생각하시면 됩니다.

그럼 여기서 의문점이 하드디스크는 비트별로 저장이 되는데 메모리는 주소값으로 구분되지 않습니까? 어떻게 가상메모리가 동작하죠?라고 생각할 수 있는데 그렇습니다. 우리가 리눅스를 설치해봐도... 따로 swap이라는 파일시스템을 지정하죠? 이 가상메모리파일시스템 VFS같은 경우에는 논리적으로 메모리 주소를 형성하도록 되어있습니다.


여기까지 가상메모리에 대해서 기본적인 것만 이야기 해보았는데;;; 이해가 잘 갔을지 모르겠네요 텍스트밖에 없어서;;; 아무쪼록 이 글을 읽고 재미있었다고 생각하시는 분이 계신다면 저는 정말 기쁘고... 다음에 또 글쓸때도 자신감을 가지고 쓸수 있을거 같습니다;;;



****************************************************************************************************

본 포스팅의 저작권은 보안인닷컴과 작성자에 있으며 상업적 이용을 배제하며 콘텐츠 이용시에는 반드시 출처와 링크를 이용해 주시기 바랍니다. 무단도용은 저작권법에 저촉을 받습니다..

****************************************************************************************************

Posted by 알 수 없는 사용자
,