시스템 리소스부족과 프로그램의 속도저하의 관계
본문 바로가기

시스템 리소스부족과 프로그램의 속도저하의 관계


2016. 5. 2.

시스템리소스란 그래픽환경의 윈도우운영체제에서 그래픽요소들이저장되는 128KB
크기의 지역 힙(HEAP)을 말하며, 이 리소스영역에 저장되는 것들로 바탕화면, 아이콘,
폰트, 사운드등의 요소들과 레지스트리등의 요소들이 있다고 합니다.
그래서 아마도 "리소스가 부족하다면 부팅시 시간이 많이 걸린다" 는 말은 누구나 쉽게
이해가 갈것입니다. 그러나 부팅후 프로그램 실행시에도 리소스가 부족하면 속도가
느려진다고 하고, 프로그램 종료후에도 사용중인 리소스의 일부를 반환하지 않기 때문에 오래 사용할수록 리소스부족으로 컴퓨터가 느려진다고 하는데
리소스부족과 프로그램의 속도저하가 어떤 연관이 있는지에 관하여?



한마디로 설명 하기는 어려운 부분입니다. 여러 개념들을 포괄해야만 설명이 가능하나 최대한 이해가 쉽도록 설명은 해보겠으나 그래도 미심쩍은 부분이 있으시다면 운영체제관련 서적을 읽어보시는 것이 좋을 것 같습니다.



윈도우의 경우로 보면 부팅 시에 말씀하신 것처럼 여러 요소들을 등록합니다. 그리하여 그 요소의 개수와 관련된 항목이 많아지면 등록에 걸리는 시간도 늘어나겠지요. 사실 그런 등록보다는 스워핑공간의(뒤에 언급할 가상메모리등 시스템이 사용하기위해 하드상에 마련하는 공간입니다.) 확보를 위해 걸리는 시간이 더 비중이 큽니다. 그래서 부팅이 느려질 수 있는 것입니다. 이때 이것을 물리적인 메모리에 저장한다면 그래도 빠를 수 있으나 이런 항목은 하드디스크의 가상 메모리에 저장됩니다. 그러므로 하드디스크에 그러한 공간을 마련하고 그것들을 등록하다보니 채감하는 시간은 더욱 느려질 수 있는것입니다. 그럼 여기서 의문이 생깁니다. 아니 램이라고 하는 메모리가 있는데 왜 하드디스크에 쓸데없이 가상메모리를 만들고 거기다 등록을 하느냐 하는 것입니다.



이것을 이해하려면 윈도우에서 데이터의 처리방식을 알아야 합니다. 물론 램이라는 물리적으로 존재하는 메모리에 등록되는 부분도 있습니다. 외부적으로 명시되어 나타나지는 않으나 윈도우를 우리가 사용하듯이 GUI로 처리되기까지는 여러 서비스들이 내부적으로 실행되고 있습니다. 이러한것중 일부는 물리적인 메모리에 등록됩니다. 그래서 윈도우만을 설치한 상태에서 작업관리자의 성능탭을 보면 일정량의 메모리는 사용되고 있습니다. 여기에 응용프로그램들을 실행시키면 사용되는 양도 많아지지요. 이것은 상식적으로도 이해가 됩니다. 프로그램이 실행중이니 사용하는 메모리의 양이 늘어 난다는 것이니 말입니다.



이제 떠오르는 의문들은 잠시 뒤로하고 그렇다면 문제의 메모리의 필요성에 대해 얘기를 해보아야 할거 같습니다. 메모리가 왜 필요하다고 생각하십니까? 메모리는 컴퓨터내의 입출력장치둥 시피유의 속도에 가장 근접한 장치라 할 수 있습니다. 그래서 시피유가 처리를 해야하는 데이터는 거의 대부분 메모리를 거치게 됩니다. 시피유의 처리속도대로 결과들이 모니터로 바로바로 나타난다면 아마 우리가 알아볼 수 있는 것은 아무것도 없을 것입니다.




우리의 신체를 생각해 보십시요 뇌에서 판단하고 내린명령을 손발이 생각대로 따라준다면 아마 우리는 슈퍼맨이나 메트릭스의 네오같은 존재일것입니다. 이처럼 다른 장치들의 속도에는 아직 한계가 있습니다. 그것은 전기적 신호에 의한 속도와 물리적으로 어떤 동작을 하여 그 결과를 또한 사람이 인지하도록 나타내는 처리의 속도에는 차이가 있을 수 밖에 없기 때문입니다. 이때 필요한 것이 메모리입니다.



즉, 사용자의 요구에 의해 어떤 행동을 할때 어딘가에서 데이터를 가져와 메모리에 저장하고 메모리가 그 데이터들을 시피유에 전달하고 시피유는 그것을 처리한 결과를 다시 메모리에 저장하고 메모리는 이것을 다시 사용자의 요구를 충족시킬 장치에 전달하여 그 장치가 사용자가 원하는 결과를 사용자에게 보여주도록 그때 그때 시피유로부터 받아놓은 결과를 전해주는 것입니다.



예를들어 인터넷을 통해 미디어플레이어로 동영상을 본다고 가정하면 플레이어가 버퍼링이라는 것을 한후 화면이 나오기 시작합니다. 이때 버퍼가 메모리의 역할을 하는것입니다. 대부분의 경우 전송되는 양이 영상을 처리할 수 있는 양보다 적기때문에 미리 일정량을 받아놓고 그것을 처리하여 사용자에게 보여주는 동안 내부적으로는 그 버퍼링을 계속하는 것이지요 그런 데이터의 처리량의 차이를 버퍼를 통해 극복하고 사용자는 불편없이 동영상을 감상할 수 있는것입니다.



그럼 궁금해하신 부팅후의 리소스문제를 봐야겠군요. 여기서 리소스란 우리말로 자원 즉, 윈도우가 어떤 행동을 취하기 위해 필요로 하는 자원이라는 말입니다. 그럼 윈도우가 행동을 취할때 어떤 자원을 필요로 할까요? 경우에따라 달라지겠지만 그래도 시피유와 메모리, 그래픽카드, 하드디스크 정도는 거의 항상 필요로 할것입니다. 이중 부족할 만한것이 무엇일까요? 속도의 문제라면 몰라도 양이 부족하다면 메모리와 하드정도가 그부류에 속하겠지요.



그런데 하드디스크의 양이 부족하면 공간이라는 표현을 쓰지 리소스가 부족하다는 말은 쓰지 않습니다. 그것은 하드디스크의 양도 순간순간으로 보면 고정적이라 할 수 있기 때문이지요 우리가 하드디스크에 어떤 데이터를 저장하는 경우를 제외하고는 하드디스크의 양이 순간순간 변할까요? 그러니 데이터를 저장하고 지울때를 제외하고는 하드디스크 또한 고정적인 양을 갖는다고 할 수 있습니다. 그렇다면 범인은 메모리겠군요? 메모리가 부족한데 왜 컴퓨터가 느려질까요? 그것은 페이징 등 메모리관리기법 때문입니다. 엥? 이건 또 뭐야? 그렇습니다. 저도 죄송스럽지만 이것까지는 설명을 드려야 앞뒤가 맞게 전개가 될듯합니다.



메모리관리기법이란 부족한 메모리를 대체하는 기법이라 할수 있습니다. 그럼 아니 왜 메모리가 부족하지 그럼 안 부족하게 넉넉히 달아주면 되는거 아냐? 라고 생각하실 수 있습니다. 그렇습니다. 부족하지 않게 윈도우용으로 몇 기가 쓸 프로그램용으로 몇기가 프로그램을 통해 작성되고 사용될 데이터용 몇 기가 이렇게 거의 하드에 육박하는 메모리를 설치한다면 있는 메모리만 잘 관리하면 문제가 없습니다.




하지만 이렇게 하기에는 현실적으로 부딪치는 문제가 많습니다. 메모리설치비용, 그 방대한 실제메모리관리와 이 관리를 위해선 또 많은 비용이 들것이며등등 이것은 이미 Personal Computer가 아닙니다. 이런비용으로 장비를 구축하느니 사람을 고용하여 원하는 결과를 얻는것인 어쩌면 더 저렴할것입니다. 그래서 페이징과 같은 메모리관리기법이 나온것입니다.(어찌보면 대체 기법이라할 수도 있지요)



가장 손쉬운 하드디스크를 이용하여 가상메모리를 만들고 사용우선순위가 높은것은 실제메모리에 조금은 덜 필요하다 싶은것은 하드에 마련한 가상메모리로 옮겨놓고 이제 별 필요없겠다 싶은 것은 가상메모리에서도 제거하여 버리는 것이지요. 그래서 실제메모리가 부족하면 하드의 가상메모리를 억세스하는 비중이 높아져 하드디스크를 너무 자주 억세스하다보니 컴퓨터가 느려지는 것입니다. 생각해보십시요.




억측스런 예이나 10메가의 데이터를 하드디스크에서 읽어와 처리를하고 다시 저장을 하려하는데 남은 리소스(실제메모리라하면)에서는 5메가정도의 여유밖에 없다하면 2.5메가정도는 리소스에 나머지 7.5메가정도는 가상메모리에(그런데 이곳도 역시 하드네요, 그럼 하드를 죽이는 거지요.) 하드로부터 읽어와서 나눠서 저장을 하고(근데 왜 2.5메가지요? 그것은 시피유에 주기위한것과 시피유의 결과를 받기위한공간을 같이 생각해야하기때문이지요. 실질적으로는 조금 다르나 이정도로 주고 받음에 여분이 있음을 설명하기 위한 설정입니다.) 다시 처리후에 나누기를 반복하지요 끝날때까지 그럼 리소스에 여유가 있을때와 비교하여 얼마나 많은 불필요한 반복이 실행되는지 짐작이 가시지요 그래서 컴퓨터가 느려질 수 밖에 없는 것입니다.