-
[ 컴퓨터 구조론 ] 1. 컴퓨터 구조를 알아야 하는 이유와 큰 그림Study/CS 2023. 7. 1. 23:17
1. 컴퓨터 구조를 알아야 하는 이유.
1 ) 문제 해결
- 개발을 하다 보면, 같은 코드라도 다른 환경에서 실행했을 때, 기대와 다른 결과나 에러가 발생하는 상황이 빈번하게 겪을 수 있다. 그렇게 문제를 인식하고 코드를 다시 한번 봐도, 문제가 없다면 어떻게 문제를 해결해야 할까?
- 이러한 상황에서 컴퓨터에 대해서 이해도의 격차에 따라서 개발자의 실력의 차이가 드러난다. 내가 작성한 코드들이 컴퓨터에서 어떻게 동작하는지 어렴풋이 아는 개발자라면 동시적으로 발생하는 다양한 문제를 빠르게 대응하기 어렵다.
- 단순히 컴퓨터라는 기계에 코드를 입력하는 경험으로는 부족할 것이다. 컴퓨터 구조를 이해하고 있다면 문제 상황을 빠르게 인지하고 문제 해결의 실마리를 다양하게 찾을 수 있다. 컴퓨터는 미지의 대상이 아닌 분석의 대상이 되기 위해서 우리는 컴퓨터 구조를 공부해야 한다.
2 ) 내가 개발한 코드가 어느 수준의 환경에서 잘 돌아갈까?
- 내가 구현한 웹 사이트는 어느 규모의 서버가 감당할 수 있을지 생각해본 적이 한 번도 없다. 만약 내가 새로운 웹 서비스를 개발한다면, 이 서비스의 트래픽을 버티는 서버 컴퓨터와 유저들의 다양한 정보들을 어떠한 저장소에 저장해야 한다.
- 이런 상황에 처해있다면, 나는 어떤 서버 컴퓨터와 저장소를 골라야 적합한 환경일까?
- 스스로 개발한 코드들이 어떤 성능을 가져야 하고 어느 정도의 용량이 필요하며, 결과적으로 얼만큼이 적당한 비용인지 생각해볼 수 있어야 한다.
- PM이 전달해준 기능들이 어떤 유저들이 사용하고 어떤 환경인지 인지하고 개발한다면 조금 더 좋은 결과를 기대할 수 있지 않을까? 최고급 컴퓨터와 최상의 네트워크 인프라를 갖춘 환경이라면 사실 크게 고민하지 않아도 되겠지만, 반대인 환경이라면? 우리는 더 숙고해서 개발해야 하지 않을까?2. 컴퓨터 구조의 큰 그림
컴퓨터 구조를 크게 두 가지로 나누면 컴퓨터가 이해하는 정보와 이를 다루는 네 가지 핵심 부품으로 나눌 수 있다.
1 ) 컴퓨터가 이해하는 정보
컴퓨터가 이해하는 정보는 데이터와 명령어 크게 두 가지이다.
- 데이터 : 컴퓨터가 이해하는 숫자, 문자, 이미지, 동영상과 같은 정적인 정보
- 명령어 : 컴퓨터를 실질적으로 작동 시키는 중요한 정보
명령어는 컴퓨터를 작동 시키는 정보이고, 데이터는 명령어를 위해 존재하는 일종의 재료 역할이다. 이러한 점에서 컴퓨터 프로그램은 '명령어들의 모음'으로 정의되기도 한다.
2 ) 컴퓨터의 네 가지 핵심 부품과 메인보드
- 중앙처리장치(CPU)
- CPU는 컴퓨터의 두뇌 역할을 한다. 메모리에 저장된 명령어를 읽어 들이고, 명령어를 해석하고, 실행하는 부품
- CPU 구성요소 중, 가장 중요한 세 가지는 산술논리연산장치(ALU), 레지스터, 제어장치이다.
- ALU는 계산만을 위해 존재하는 부품, 컴퓨터 내부에서 수행하는 대부분의 계산은 ALU가 담당한다.
- 레지스터는 CPU 내부의 작은 임시 저장 장치이다. 프로그램을 실행하면 필요한 데이터를 임시로 저장한다. 하나가 아닌 여러 개의 레지스터가 존재하고, 각기 다른 이름과 역할을 가지고 있다.
- 제어장치는 제어신호(컴퓨터 부품들을 관리하고 작동시키기 위한 전기 신호)라는 전기 신호를 내보내고 명령어를 해석하는 장치이다.
- 주기억장치(Memory)
- 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품
- 우리가 흔히 프로그램을 실행하면 반드시 메모리에 온전히 저장되어 있어야 된다.
- 컴퓨터가 빠르게 작동하기 위해서는 메모리에 저장되는 데이터와 명령어가 명확한 기준에 의해서 정리가 되어 있어야 한다. 그래서 메모리에 주소 개념이 필요하다. 각 주소 안에 정보들이 저장되어있고, 주소 값을 사용해서 빠르게 접근이 가능하다.
- 보조기억장치
- 위의 주기억 장치는 상당히 가격이 비싸고, 컴퓨터 전원이 꺼지면 저장된 내용을 잃는다는 단점을 가지고 있다. 프로그램을 실행할 때만 메모리에 정보들이 저장되고 컴퓨터가 꺼지면 모두 사라진다.
- 그럼 우리가 작성한 글, 이미지, 동영상 등의 데이터들은 어디에 저장될까? 바로 보조 기억 장치이다.
- HDD, SSD, USB 메모리, DVD, CD-ROM과 같은 보조기억장치를 사용한다.
- 입출력장치
- 마이크, 스피커, 프린터, 마우스, 키보드처럼 컴퓨터 외부에 연결되어 컴퓨터 내부의 정보를 교환하는 장치
- 메인보드
- CPU, RAM, 보조기억장치, 입출력장치 등 컴퓨터에 필요한 모든 핵심 장치들은 메인보드를 통해 연결된다.
- 메인보드에 연결된 부품들은 서로 정보를 주고받을 수 있는데, 이러한 역할을 하는 친구들이 바로 버스(BUS)이다.
- 다양한 종류의 버스 중에서 우리가 알아야 하는 중요한 버스는 시스템 버스이다.
- 시스템 버스는 주소 버스, 데이터 버스, 제어 버스로 구성된다.
- 주소 버스 : 주소를 주고받는 통로
- 데이터 버스 : 명령어와 데이터를 주고받는 통로
- 제어 버스 : 제어 신호를 주고받는 통로
- CPU가 1번 메모리 주소에 '10'이라는 데이터를 저장하고 싶으면, CPU는 주소 버스에 '1번 메모리 주소'를 태우고 데이터 버스에 '10'을 태우고 제어 버스에 '메모리 쓰기'라는 제어신호를 태워서 내보낸다.
3. 정리해보기
1 ) 컴퓨터 구조를 알아야하는 이유
컴퓨터는 단순히 프로그래밍 언어를 입력하면 어찌어찌 알아서 돌아가는 기계가 아니다. 내가 입력하는 코드들은 각각 역할을 하는 장치들이 컴퓨터가 이해할 수 있는 정보로 변환해서 처리한다. 누군가, 어디서, 어떠한 방법으로 컴퓨터가 이해할 수 있는 정보로 변환하고 이 정보를 통해서 어떠한 처리를 하고 결과를 구현한다. 실력 있는 개발자가 되기 위해서는 이러한 컴퓨터 관점에서 사고할 수 있는 능력이 필요하다. 이런 사고를 할 수 있다면, 어려운 문제의 원인을 빠르게 파악하고 해결할 수 있다.
또한, 내가 구현한 프로그램이 어떤 환경에서 최적화가 되는지 이해할 수 있다. 이는 비용 절감과 높은 성과를 가져온다. 작은 사과를 수박을 담는 상자에 담을 필요가 없고, 킹사이즈 침대를 작은 경차로 옮길 수 없다.2 ) 컴퓨터 구조의 큰 그림
컴퓨터는 '명령어'와 '데이터'라는 정보를 이해해서 다양한 역할을 수행한다. 명령어는 컴퓨터의 동작을 제어하고, 데이터는 명령어를 통해 작동하는 다양한 동작을 위한 재료이다. 그럼 이걸 누가? 어떻게? 수행하는 건데? 라는 질문을 해결하기 위해서 우리는 컴퓨터의 핵심 장치에 대한 이해도가 있어야 한다.
CPU는 이러한 명령어와 데이터를 처리하는 두뇌 역할을 한다. CPU는 계산기 역할을 하는 산술논리연산장치(ALU), CPU 내 임시 기억 장치인 레지스터, 명령어를 해석하고 제어신호를 내보내는 제어장치로 구성되어있다. 프로그램이 실행되면 주기억장치(Memory)에 명령어와 데이터가 저장되고 CPU는 이를 읽어서 레지스터에 명령어와 데이터를 임시로 저장하고 이를 제어장치가 해석하고 산술논리연산장치에서 연산하여 결과를 다시 제어장치가 제어신호를 내보내서 처리한다.
이 과정에서 우리는 빠르게 처리하기를 원한다. 위의 과정을 봐도 순서와 체계의 중요성에 대해서 느낄 수 있지 않은가? 만약 수천개의 데이터와 명령어가 규칙 없이 산발적으로 흩어져있다면 CPU는 원하는 시점에 빠르게 RAM에 접근하여 필요한 정보들을 레지스터로 가져올 수 없다. 그래서 메모리에는 주소라는 개념이 꼭 필요하다. 메모리의 어떤 주소에 접근하면 어떤 정보(명령어, 데이터)를 읽어올 수 있어 혹은 저장할 수 있으라는 조건이 있어야 빠르게 처리가 가능하다.
그래 이제 정보들을 누가 어떻게 처리하고 어디에 저장하는지 알았어 근데 이 정보들이 어떻게 왔다 갔다 하는 거야? CPU는 정보를 임시로 저장하고 연산하고 신호를 내보내는 역할밖에 안 하고 메모리는 단순히 각각 공간에 특정한 주소 값만 가지고 읽고 쓰는 제어신호를 받고 응답하고 정보의 저장소 역할만 하는데? 누가 이 제어 신호들을 옮겨주고 데이터를 옮겨주는가? 바로 메인보드이다.
메인보드는 컴퓨터에 필요한 장치들이 원활하게 소통할 수 있게 해주는 역할을 한다. 컴퓨터를 조립하는 과정에서 알 수 있듯이, 위의 컴퓨터 장비들을 메인보드라는 큰 판에 꽂아서 사용한다. 각 장치가 원하는 소통을 하기 위해서 메인보드의 버스를 사용한다. 이 버스는 다양한 역할을 수행한다. 여기서 핵심은 시스템 버스이다.
시스템 버스는 '주소 버스', '데이터 버스', '제어 버스'로 구성된다. 잘 보면 우리가 이미 언급했던 단어들이 보인다. CPU가 메모리의 특정 주소에 있는 데이터를 읽어오기 위해서는 이 시스템 버스를 적절히 사용해야 한다. 주소 버스에는 메모리의 주소를 태우고, 데이터 버스에는 읽어오는 데이터를 태우고, 제어 버스에는 '읽어오기'라는 제어신호를 태워서 메모리와 소통한다.4. 생각
컴퓨터는 데이터와 명령어를 각자의 역할을 하는 장치들을 통해서 처리하는 기계라는 간단하고 짧은 정의가 명확하게 설명되었다. 이제 이 구조를 바탕으로 내가 사용하는 언어도, 웹 브라우저도 이해할 수 있을 것 같다. Javascript 엔진이 브라우저에서 왜 그렇게 돌아갔는지 조금 더 명확하게 이해할 수 있을 것 같다.
출처
- 한빛미디어 / 강민철 / '혼자 공부하는 컴퓨터 구조 + 운영체제 '
- 중앙처리장치(CPU)