컴퓨터 구조를 알아야 하는 이유
좋은 개발자가 되기 위해서는 프로그래밍 언어의 문법과 함께 컴퓨터의 근간 (컴퓨터 구조, 운영체제)을 알아야 합니다.
이를 알게 된다면 문제 해결 능력 향상과 성능, 용량, 비용을 고려한 개발을 할 수 있게 됩니다.
문제 해결 능력 향상
개발을 하다 보면, 자신이 개발했던 환경에서는 문제가 없었으나 실제로 배포했을 때 문제가 생기는 상황이 종종 발생하곤 합니다. 심지어 컴파일 에러가 아닌데도 발생하기 때문에, 더 어렵게 느껴지기도 합니다.
이는 문법상의 문제가 아니라, 그를 넘은 영역의 문제입니다.
좋은 개발자가 되기 위해서는 컴퓨터 내부를 뜯어볼 줄 알아야 합니다. 그렇게 한다면 컴퓨터를 미지의 대상에서 분석의 대상으로 바라볼 수 있게 될 수 있기 때문입니다.
또한, 기업에서도 컴퓨터 구조에 대한 지식을 요구하기도 합니다. 이렇듯 깊이 있는 개발자가 되기 위해서는 컴퓨터 구조에 대해 반드시 알아야 합니다.
성능, 용량, 비용을 고려한 개발
성능, 용량, 비용은 개발 시 반드시 고려해야 할 요소입니다. 흔히 서버 컴퓨터가 대표적인 예시입니다.
무조건 저렴한 컴퓨터를 고르면 너무 성능이 떨어질 수도 있고, 최신 컴퓨터를 고르면 간단한 서비스인데도 돈을 너무 많이 지불할 수도 있습니다. 사용자가 백 명도 안되는데, 용량이 100 테라바이트 급인 서버 컴퓨터를 고를 필요는 없겠죠?
물론 저희가 개발을 할 때는 물리적인 서버 컴퓨터를 구입할 일이 없겠지만, AWS에서 클라우드 형태로 서버를 빌릴 때에도 마찬가지로 성능, 용량 등을 고려하게 됩니다.
컴퓨터 구조의 큰 그림
컴퓨터 구조 공부의 필요성을 알게 되었으니, 이제 대략적으로 어떻게 컴퓨터가 이루어져 있는지를 보겠습니다.
컴퓨터 구조는 크게 컴퓨터가 이해하는 정보와 컴퓨터의 네 가지 핵심 부품으로 구성됩니다.
컴퓨터가 이해하는 정보
컴퓨터는 정보를 이해할 때, 데이터와 명령어를 활용합니다.
데이터
- 숫자, 문자, 이미지, 동영상과 같은 정적인 정보를 뜻합니다.
- 컴퓨터와 주고받는, 또는 내부에 저장된 정보를 데이터라 총칭하기도 합니다.
- 0과 1로 숫자를 표현하거나, 0과 1로 문자를 표현할 수 있습니다. 이는 다음 장에서 다루겠습니다.
명령어
컴퓨터는 결국 명령어를 처리하는 기계입니다.
명령어란, 컴퓨터를 실질적으로 움직이는 정보입니다. 즉, 데이터는 명령어를 위한 일종의 재료 역할을 합니다.
명령어의 생김새와 동작 방식은 제각기입니다.
컴퓨터의 네 가지 핵심 부품
CPU
CPU는 컴퓨터의 두뇌 역할을 하는 장치입니다. 아마 가장 많이 들어보셨을 것입니다.
메모리에 저장된 명령어를 읽어 들이고, 해석하고, 실행하는 부품입니다.
내부에 있는 ALU (Arithmetic Logic Unit)은 계산 처리를 담당하며, 또 다른 장치로는 레지스터 (register)라는 작은 저장 장치가 있습니다.
핵심 구성 사항으로 제어 장치 (CU, Control Unit)도 있는데, 이것은 제어 신호를 내보내고, 명령어를 해석하는 데 사용됩니다.
이 외에도 캐시 메모리 등이 있으나, 핵심적인 것은 위 세 개의 장치입니다.
메모리 (= 주기억장치)
주기억장치는 크게 RAM (Random Access Memory)과 ROM (Read Only Memory) 두 가지가 있는데, 보통 RAM이 더 지칭되기에 RAM을 위주로 다룹니다.
메모리는 현재 실행되는 프로그램의 명령어와 데이터를 저장해 둡니다.
따라서, 프로그램이 실행되기 위해서는 해당 프로그램의 명령어와 데이터가 메모리 안에 저장되어 있어야 합니다.
또한 주소라는 개념이 있는데, 이는 메모리 안에 담을 수 있는 명령어와 데이터가 무수히 많기 때문에 (용량 덕분) 내가 원하는 명령어와 데이터가 메모리 내에 어디에 위치해 있는지 더 빠르게 파악시키기 위함입니다. 컴퓨터가 프로그램을 실행시킬 때 필요한 명령어와 데이터의 위치를 알고 있다면 그렇지 않았을 때 보다 당연히 더 빨리 찾을 수 있고, 그러면 접근 속도도 올라가겠죠.
보조기억장치
위에서 메모리는 현재 실행되는 프로그램의 명령어와 데이터를 저장해 둔다고 하였습니다. 그런데 만약 운이 좋지 않아 전원이 꺼졌을 때, 해당 프로그램의 데이터가 무사할까요? 메모리는 이렇게 전원이 꺼지면 저장된 내용을 잃게 된다는 단점이 있고, 이러한 이유로 메모리, 특히 RAM을 휘발성 메모리 (volatile memory)라 합니다. (전원이 꺼져도 메모리 내용을 잃지 않을 수 있는 것은 ROM으로서, 한번 저장하면 수정이 불가합니다. ROM을 비휘발성 메모리 (non-volatile memory)라 합니다.) 또한, 가격이 비싸 가진 용량도 적은 편입니다.
이렇게 전원이 꺼졌을 때 데이터가 날아감을 방지하기 위해 보조기억장치를 둡니다. 보조기억장치는 메모리보다 크기가 크고, 전원이 꺼져도 저장된 내용을 잃지 않아 메모리를 보조할 수 있습니다. 예시로는 HDD, SSD 등이 있습니다.
메모리와 보조기억장치의 비교로는 메모리는 실행할 정보를 저장하고, 보조기억장치는 보관할 정보를 저장하는 게 차이점이라고 할 수 있습니다.
입출력장치
입출력장치는 컴퓨터 외부에 연결이 되어 컴퓨터 내부와 정보를 주고받을 수 있는 부품입니다.
쉽게 말해 외장하드, USB, 모니터, 키보드, 마우스 등과 같은 외부 장비를 뜻합니다. 그런데 생각해 보면, 데이터를 백업시키기 위한 용도로 외장하드와 USB를 사용한 경험이 있으실 것입니다. 즉 보조기억장치의 역할을 수행할 수도 있는데, 이러한 점에서 보조기억장치와 입출력장치는 컴퓨터와 정보를 주고받는 양상을 보면 정확히 나뉘는 개념은 아닙니다. (이들을 엮어 주변 장치 - peripheral device라 부르기도 합니다.) 다만 보조기억장치는 메모리를 보조한다는 임무를 수행하는 특별한 입출력장치라고 표현될 수 있습니다.
메인 보드
이제 컴퓨터의 네 가지 핵심 부품들이 실제로 맞물리기 위해서는, 이들이 실제로 연결된 물리적인 장소가 필요합니다. 일을 하기 위해 직원들을 뽑았는데, 막상 그들이 모이지 못하면 의미가 없겠죠?
컴퓨터 구조에서 이렇게 각 핵심 부품이 모인 장소를 메인 보드 (Main board)라 합니다. (마더 보드 - Mother board라고 하기도 합니다.)
그리고 이 메인 보드 안에서 서로 부품들이 정보를 주고받기 위해 사용하는 통로를 버스 (bus)라 하며, 이 버스들 중 핵심 부품들 사이를 잇는 버스를 시스템 버스 (System bus)라 합니다.
시스템 버스의 종류로는 주소 버스 (address bus), 데이터 버스 (data bus), 제어 버스 (control bus)가 있습니다.
주소 버스
- 주소를 주고받는 통로입니다. 메모리에서 어느 주소에 위치한 명령어와 데이터를 가져오고 싶은지를 전달합니다.
데이터 버스
- 명령어와 데이터를 주고받는 통로입니다. 메모리 주소에 위치하는 명령어와 데이터를 전달합니다. 메모리로부터 가져온 명령어와 데이터는 CPU 내부에 있는 레지스터에 저장되며, 계산이 필요할 시 ALU가 계산을 하고 그 결과를 다른 레지스터에 저장합니다. 그리고 이는 메모리 쓰기 신호와 맞물려 메모리에 저장됩니다.
제어 버스
- 제어 신호를 주고받는 통로입니다. CPU가 메모리에게 어떠한 명령을 내리고 싶은지를 전달합니다.
- 메모리 읽기 신호: 메모리에 저장된 명령어를 읽기 위한 신호입니다.
- 메모리 쓰기 신호: 메모리에 값을 저장하기 위한 신호입니다.
Reference
'컴퓨터구조&운영체제' 카테고리의 다른 글
[혼공컴운] Ch02. 데이터 (0) | 2023.12.26 |
---|