익숙함에 속아 컴퓨터를 잃지말자-1

KIM 쥬얼리 (vs0610)·2020년 12월 27일
2
post-thumbnail

"익숙함에 속아 소중함을 잃지 말자" 라는 말이 있다.

글을 시작하기 전에

필자는 1990년대 중반에 태어났다. 필자를 포함한 현재를 살아가고 있는 현대인들중 '컴퓨터'를 모르는 현대인이 몇이나 될까? 아무리 생각해봐도 컴퓨터를 모르는 사람은 거의 없을 것이라는 결론에 도달하게 된다. 그렇다면 컴퓨터를 '제대로' 알고 있는 사람은 몇이나 될까?

필자 본인도 초등학교를 채 입학하기도 전에 컴퓨터를 접했고 그때 스타그래프트라는 게임을 했었다. 그것들이 무엇인지도 모른채 말이다. 아마 대부분의 컴퓨터를 사용하는 사용자들도 그럴 것이다. 컴퓨터로 할 수 있는 것(게임, 웹서핑, 영상편집 등등)인 기능에 대해서는 해박하지만 컴퓨터의 역사부터 어떤 구조를 통해 그런 기능들을 담아내고 구현해내는지에 대한 근본적인 지식은 부족하리라 실제로 부족한 필자 본인을 대중에 일반화하여 그럴 것이라고 생각한다.

그래서 무엇을 쓸 것인가

개발자가 되기로 마음을 먹은 이상 컴퓨터와 더 가까워져야하는(?) 사이가 되었다. 단순히 이것의 기능만 사용할 줄 아는 개발자가 아닌 이것의 시초부터 알고싶게 되었고 이것의 가장 작은 단위는 어떤 역할을 해내는지, 이 단위체들이 모여서 어떤 시너지를, 어떤 과정을 통해 해내는지 알고 싶게 되었다. 마침 읽게된 두꺼운 전공책(컴퓨터 시스템)을 읽으며 알게된 사실들과 또 몰랐던 사실(너무 많다...)들을 그나마 이해하기 쉽게 서술해보려고 한다. 책이 두꺼운 만큼 긴 시리즈로 게재될 예정이다.

오늘의 주제

한번 긴 숨을 들이마시고 시작해보자.

버퍼 오버플로우 취약성

일단 버퍼는 무엇인가? 버퍼란 데이터를 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역이다. 버퍼 오버플로우는 메모리의 영역 바깥쪽까지 데이터가 들어올 때 메모리의 한계치 등을 설정하지 않아서 바깥쪽의 데이터가 새로 들어온 데이터로 덮어씌어지는 현상을 말한다. 다시 말해 인접 메모리를 침범한다는 뜻인데 그 인접 메모리에는 다른 데이터가 포함되어 있을 수도 있는데 그 데이터에 손상이 생길 수도 있다는 뜻이다. 만약 그 데이터에 프로그램에 중요한 데이터가 포함되어 있었다면 프로그램이 이상하게 작동할 수도 있고, 메모리 접근 오류, 프로그램 종료 혹은 시스템 보안 누설이 발생할 수도 있다. 따라서 많은 소프트웨어 취약점의 근간이 되어 악의적으로 이용될 수 있다.

이는 데이터를 저장할 메모리의 위치가 유효한지 검사함으로 방지할 수 있다. 요즘엔 취약점 방지가 많이 이루어졌다고는 하나 프로그래머입장에서는 꼼꼼하게 살펴봐야한다. 관련된 언어는 C와 C++이다.

(출처:(https://ko.wikipedia.org/wiki/%EB%B2%84%ED%8D%BC_%EC%98%A4%EB%B2%84%ED%94%8C%EB%A1%9C)(https://namu.wiki/w/%EB%B2%84%ED%8D%BC%20%EC%98%A4%EB%B2%84%ED%94%8C%EB%A1%9C)

캐시 메모리를 이해하자

캐시 메모리를 이해하기 위해서는 한가지 대전제가 필요하다.

물리학의 법칙 때문에 더 큰 저장장치들은 보다 작은 저장장치들보다 느린 속도를 갖는다.
-컴퓨터시스템-

주기억장치는 많은 데이터를 담을 수 있다. 하지만 주기억장치에서 매번 데이터를 탐색하고 꺼내는 과정에서 많은 시간을 소요하게 하였고 이는 속도를 빠르게 할 다른 방법을 낳게 되었다. 그것은 더 작은 저장장치를 만들어 그곳에서 데이터를 꺼낸다는 생각이었다. 이는 캐시메모리가 되었고 캐시는 주기억장치와 CPU 사이에서 몇가지 자주쓰는 프로그램과 데이터를 기억하면서(적은 양을) 컴퓨터의 빠른 처리속도를 가질 수 있게 만들어주었다.

그래서 컴퓨터에는 메모리 계층구조가 생겼는데 주요아이디어는 아래와 같다.

한 레벨의 저장장치가 다음 하위레벨 저장장치의 캐시역할을 한다.

끝마치며...

처음 생각했던 의도의 글보다 굉장히 불친절하고 맘에 안드는 글이 나와버렸다... 스스로 반성하며 생각한 원인은

1 . 책을 읽고 한참뒤에 글을 씀으로서 어떻게 글을 써야겠다 했던 생각의 흐름을 놓쳤다.
-> 이제 책읽고 글을 조금이라도 써두고 바로 마무리 하든가 최대한 빠르게 마무리하는 습관을 가지자.
2 . 글을 쓰면서도 확실하게 내가 아는 느낌이 들지 않는다.
-> 본인도 확신이 없는데 어떻게 좋은 글이 나올리가... 조금 더 공부하고 글을 쓰겠다.
3 . 처음이다!
-> 시작이 반이라는 말이 있다. 그 반을 멋있고 화려하게 시작했으면 더 좋았겠지만 필자는 시작이 중요한 만큼 끝도 중요하다고 생각한다. 끝으로 갈 수록 멋있어지는 모습을 기대하며 글을 마친다.

시작은 미약하지만 끝은 창대하리라 라는 말을 외치며 오늘의 글을 마친다.

시작은 미약하지만 끝은 창대하리라!!!

ps. 그림은 필자가 직접 그렸다. 앞으로도 그럴 예정이다.

0개의 댓글