더북(TheBook)

복잡한 요소들

여러분은 컴퓨터의 메모리에 무슨 일이 일어나는지 생각해 본 적이 없을 것입니다. 2010년대 후반에 랩톱의 시스템 메모리는 4기가나 8기가였습니다. 제 워크스테이션은 32기가 메모리를 가지고 있지요. 크기에 관계없이 시스템 메모리는 컴퓨터에서 돌아가는 모든 실행 중인 프로그램으로 공유됩니다. 메모리를 관리하고 그것을 사용하려는 애플리케이션 요청에 대응하는 것이 윈도, macOS, 리눅스 같은 운영 시스템의 역할입니다. 운영 시스템(OS)은 여러 프로그램 간 메모리 공유를 관장하는 놀이터 관리자 같은 것이죠.

우리의 작은 파이썬 프로그램도 이 놀이터에서 뛰어놀고 있습니다. 그 역시 다른 프로그램들과 자원을 공유해야 합니다. 놀이터의 그네를 타는 시간에 비유할 수 있는 메모리 자원을 요청하게 되면, 운영 시스템은 그 요청에 반응하고 우리에게 메모리 조각을 줍니다. 요청한 것보다 조금 더 많은 메모리를 받을 수도 있습니다(이것은 조금 후에 더 자세히 다룰게요). 마찬가지로 메모리 조각을 다 사용하고 나면, 놀이터의 예의 바른 아이들처럼 놀이터 관리자에게 조각을 반납합니다. 메모리를 요청하고 반납하는 과정은 관리 오버헤드를 발생시킵니다. 운영 시스템이 처리 과정을 간소화하고 오버헤드를 줄이는 두 가지 방법이 있습니다. (1) 필요한 것보다 조금 더 많은 메모리 조작을 하거나 (2) 메모리를 다 사용했다고 하더라도 또 다른 누군가가 요청하기 전까지 메모리를 계속 사용하도록 두는 방법이죠. 그 결과, 운영 시스템이 할당한 메모리양보다 실제로 사용하는 메모리양을 측정하는 것은 매우 까다로울 수 있습니다. 실행 중인 프로그램 내부에서 발생하는 추가적인 요청을 측정하는 것은 그보다 더 어렵습니다.

문제를 더 복잡하게 만드는 또 다른 이슈가 있습니다. 파이썬은 메모리 관리 기능이 있는 언어입니다. 파이썬 자체의 메모리 관리 기능은 운영 시스템 위에 위치합니다. 앞의 셀들을 주피터 노트북에서 다시 돌려 보면 추가적인 메모리 증가가 0.00MiB인 것을 보고 어딘가 회로가 탄 것은 아닌지 걱정할 수도 있어요. 메모리가 증가하지 않은 이유는 과거에 사용하고 반환한 메모리를 다시 사용했기 때문입니다. OS가 그 메모리를 다른 사용자에게 재분배하지 않은 것이지요. 그래서 더 많은 메모리가 필요해지더라도 과거에 할당받은 메모리를 다시 사용할 수 있기 때문에 운영 시스템에 메모리를 새로 요청할 필요가 없는 것입니다. 이는 메모리가 풀려나고 다시 재요청하는 것이 엄청 빨리 이루어지기 때문에 실질적으로 사라지지 않은 것이지요! 자, 메모리 증가를 보거나 보지 않는 것은 (1) 노트북의 셀이 무엇을 하고 있는지 (2) 프로그램이 어떤 다른 메모리를 요청하고 사용하고 있는지 (3) 컴퓨터에서 돌아가는 다른 프로그램들 (4) 운영 시스템 메모리 관리자의 실제 세부 사항에 달려 있습니다. 더 알고 싶다면 운영 시스템에 대한 코스나 다른 책을 참고하세요.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.