티스토리 뷰

Study/OS

[Study] Virtual Memory

생각많은 소심남 2013. 2. 20. 00:42

컴퓨터의 구성 요소를 들어보라면 많은 것들을 들어볼 수 있다. 물론 가장 중추적인 역할을 하는 CPU를 필두로 저장장치, 입출력 장치를 들 수 있지만, 컴퓨터 본연의 역할을 하기 위해서는 Memory의 역할이 중요하다. 더구나 CPU도 내부에 들어있는 ALU를 사용하기 위해서는 메모리에서 인자를 받아와야 한다. 모든 장치들이 상호유기적으로 영향을 주기는 하지만 메모리도 CPU만큼 컴퓨터 내에서 차지하는 비중은 크다고 생각한다.

 아무튼 이 메모리의 역할은 앞에서 언급한 것처럼 CPU가 연산하는데 필요한 데이터를 제공하는 것이다. 더 풀어쓰자면 CPU가 연산을 하기 위해서는 사용자가 어떤 연산을 원하는지를 지시하는 Operation Code(opcode)와 data를 담고 있어서 필요할 때마다 호출할 수 있도록 해주는게 메모리인 것이다. 물론 그 data의 양이 엄청 많기 때문에 하나하나의 구획으로 나눠서 저장해놓고, 그 주소를 넘겨주면 데이터에 접근할 수 있는 방식으로 이용되어왔다. 그리고 만약 OS 상에서 특정 Application에 대한 소요가 발생할 경우에는 그 Application에 대한 정보를 메모리 상에 올리고 빠르게 처리할 수 있게 했다. 이 부분은 컴퓨터의 작업 관리자를 열어보면 확인할 수 있다.



당연한 이야기이겠지만, 시간이 점점 지날수록 사용자 입장에서 보면,많은 프로그램을 빠르게 실행시키길 원하고, 동시에 실행시키길 원한다. 이 때문에 OS에서는 Memory Management 의 역할이 중요하게 작용한다. 하지만 알다시피 메모리의 크기는 한정되어 있고, 이 한정되어 있는 공간상에 모든 프로그램을 올리기에는 효율성이 너무 떨어진다. 그도 그럴 것이, 시스템 운용에 필요한 필수 공간도 있을 뿐더러, 사용자가 모든 프로그램에 직접적으로 관여하며 사용하는게 아니기 때문에 이를 효율적으로 처리하는 방법이 필요했다. 그와중에 가장 많이 쓰이는 기법이 cache를 활용한 Virtual Memory를 적용하는 것이다. 

 Virtual Memory는 말 그대로 가상메모리이며, 외관상으로 전혀 보이지 않는다. 여기서 이게 왜 생겼는지를 알면 어디에 위치해있는지를 감잡을 수 있다. 바로 앞에서 언급했듯, 메모리 자체는 저장장치이며, 공간이 한정적이기 때문에 문제가 발생했다. 그 공간 문제를 해결하기 위해서 찾아보던 중에 달려있는 저장장치에서 그 공간적 문제를 해결할 수 있었는데 그게 하드디스크인 것이다. 즉, 접근 속도에 대한 한계가 존재하긴 하지만 그래도 공간적인 문제를 해결할 수 있는 방법에서 좋은 대안이었다. 



 예전에는 직접적으로 물리 메모리에 접근해서 필요한 정보를 받아왔는데 이 Virtual Memory가 나오면서 RAM의 일정 부분과 Disk의 일정부분을 통합한 것이다. 이를 통해서 얻을 수 있는 장점이 앞에서도 언급한 공간적인 측면이 컸지만, 다른 하나는 바로 프로세스별로 이 가상 메모리를 따로 관리할 수 있다는 것이다. 이미지에도 나와있다시피 가상 메모리는 프로세스 단위로 필요에 따라 크기가 할당된다. 하드디스크의 공간만 넉넉하면 얼마든지 RAM의 특정 부분과 HDD를 결합한 가상 메모리를 생성할 수 있는 것이다. 때문에 프로세스간에 메모리 간섭이 일어날 일이 없고, 독립적으로 실행시킬 수 있는 것이다. 최근에는 RAM의 발전으로 인해서 용량적 문제가 많이 해소된 반면, 이런 프로세스 보호의 역할로 인해서 가상 메모리 방식이 계속 적용되고 있다. 당연한 이야기이겠지만, RAM이 관여한 부분이 있기 때문에 전원이 나갈 경우에는 가상 메모리 역시 소실된다. 


------ 계속...

'Study > OS' 카테고리의 다른 글

[Process] Process Scheduling  (1) 2013.06.20
[Process] Process / Process Control Block  (2) 2013.06.19
[Study] POSIX  (0) 2013.02.21
[Study] Task / Thread  (5) 2013.02.15
[Study] Monolithic Kernel / Microkernel  (2) 2013.02.14
[Study] Copy On Write (COW)  (9) 2013.02.14
[OS] Mint64OS 31절 Symmetric I/O mode  (0) 2013.02.12
댓글