개발자로 근무하면서 기획자나, QA, 운영하시는 분들께 종종 질문들을 받습니다.
위와 같은 다양한 질문들을 받고 설명할 때, 경력과 근무하시는 환경에 따라 CS에 대한 이해가 각각 다르시기 때문에 어떻게 설명을 드려야 하는지 가끔 막막할 때가 있었습니다.
그럴 때마다 CS에 대해 비전공자 분들도 이해하실 수 있는 문서가 있어서 이를 바탕으로 설명할 수 있었으면 좋겠다고 생각했습니다.
이 글은 이처럼, 개발자와 같이 협업하면서 일하시는 분들이 이해하시면 좋을 내용과 원활한 설명을 위한 레퍼런스로써 역할을 수행할 수 있도록 하기 위해 작성되었습니다.
이 포스트는 강민철 님의 [혼자 공부하는 컴퓨터 구조+운영체제] 를 읽고 요약・정리한 글입니다.
컴퓨터 구조 지식은 크게 2가지로 하나는 컴퓨터가 이해하는 정보이고, 다른 하나는 컴퓨터의 네가지 핵심 부품입니다.
컴퓨터는 0과 1로 표현된 정보만을 이해합니다. 그리고 이렇게 0과 1로 표현된 정보에는 크게 두 가지 정보가 있는데, 바로 데이터와 명령어입니다.
컴퓨터가 이해하는 숫자, 문자, 이미지, 동영상같은 정적인 정보를 가리켜 데이터라고 합니다.
컴퓨터가 이해하는 정보에는 데이터와 명령어가 있지만 이 둘 중 컴퓨터를 실질적으로 작동시키는 더 중요한 정보는 명령어입니다. 데이터는 명령어 없이는 아무것도 할 수 없는 정보 덩어리일 뿐이지만, 명령어는 데이터를 움직이고 컴퓨터를 작동시키는 정보이기 때문입니다.
즉, 명령어는 컴퓨터를 작동시키는 정보이고, 데이터는 명령어를 위해 존재하는 일종의 재료입니다.
컴퓨터의 외관과 용도를 막론하고 핵심을 이루는 부품들은 크게 다르지 않습니다. 컴퓨터의 핵심 부품은 중앙처리장치(CPU), 주기억장치(메모리), 보조기억장치, 입출력 장치입니다. 이 네가지 부품의 역할만 이해하고 있어도 대략적인 컴퓨터의 작동 원리를 대부분 파악할 수 있습니다.
메모리는 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품입니다. 즉 프로그램이 실행되려면 반드시 메모리에 저장되어있어야 합니다.
이때 컴퓨터가 빠르게 동작하기 위해서는 메모리속 명령어와 데이터가 중구난방으로 저장되어있으면 안됩니다. 저장된 명령어와 데이터의 위치는 정돈되어 있어야 합니다. 그래서 메모리에는 저장된 값에 빠르고 효율적으로 접근하기 위해 주소라는 개념이 사용됩니다.
아래는 주소라는 개념을 쉽게 이해하기 위해 단순화한 이미지입니다.
CPU는 컴퓨터의 두뇌입니다. CPU는 메모리에 저장된 명령어를 읽어들이고, 읽어들인 명령어를 해석하고 실행하는 부품입니다.
CPU의 역할과 작동 원리를 구체적으로 이해하기 위해서는 CPU 내부 구성요소를 알아야 합니다. 이후에 CPU 내부 구성요소 중 가장 중요한 세 가지는 산술논리연산장치(ALU), 레지스터, 제어장치(CU) 입니다.
ALU: 쉽게 말해 계산기입니다. 계산만을 위해 존재하는 부품이죠. 컴퓨터 내부에서 수행되는 대부분의 계산은 ALU가 도맡아 수행합니다.
레지스터: CPU 내부의 작은 임시저장장치입니다. 프로그램을 실행하는데 필요한 값들을 임시로 저장합니다. CPU 안에는 여러 개의 레지스터가 존재하고 각기 다른 이름과 역할을 가지고 있습니다.
제어장치: 제어신호라는 전기 신호를 내보내고 명령어를 해석하는 장치입니다. 여기서 제어신호란 컴퓨터 부품을 관리하고 작동시키기 위한 일종의 전기신호입니다. 일단 아래의 내용만 이해하면 됩니다.
CPU가 메모리에 저장된 값을 읽고 싶을 땐 메모리에 메모리 읽기리는 제어 신호를 보냅니다.
CPU가 메모리에 어떤 값을 저장하고 싶을 땐 메모리를 향해 메모리 쓰기라는 제어신호를 보냅니다.
위에서 메모리는 실행되는 프로그램의 명령어와 데이터를 저장한다고 했지만, 이 메모리는 두 가지 치명적인 약점이 있습니다.
이에 메모리보다 크고 전원이 꺼져도 저장된 내용을 읽지 않는 메모리를 보조할 저장장치가 필요한데 이 장치가 보조기억장치입니다. 하드디스크(자기디스크), SSD, USB 메모리, CD 같은 저장장치가 보조기억장치의 일종입니다.
입출력장치는 마이크, 스피커, 프린터, 마우스, 키보드처럼 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환하는 장치를 의미합니다. 위의 보조기억장치도 넓은 관점에서 입출력 장치에 해당합니다.
위에 설명한 컴퓨터의 핵심 부품들은 모두 메인보드라는 판에 연결됩니다. 메인보드에는 위에서 설명한 부품을 비롯하여 여러 컴퓨터 부품을 부착할 수 있는 슬롯과 연결 단자가 있습니다. 메인보드에 연결된 부품들은 서로 정보를 주고받을 수 있는데, 이는 메인보드 내부에 버스(BUS) 라는 통로가 있기 때문입니다.
컴퓨터 내부에는 다양한 종류의 통로, 즉 버스가 있습니다. 하지만 여러 버스가운데 컴퓨터의 네 가지 핵심 부품을 연결하는 가장 중요한 버스는 시스템 버스입니다.
시스템 버스는 주소 버스, 데이터 버스, 제어 버스로 구성되어 있습니다.
[데이터를 읽어올 때의 시스템 버스]
[데이터를 쓸 때의 시스템 버스]