⚠️ 공부한 내용을 정리하는 공간입니다. 설명이 부족하거나 옳바르지 못한 부분이 있을 수 있습니다. 옳바르지 못한 내용을 발견하셨다면 댓글로 알려주시길 부탁드립니다. 수정하도록 하겠습니다.
오늘의 사족
어디서 보았는지 기억은 나지 않으나 어떠한 행동이 습관으로 자리 잡기까지 걸리는 시간은 3주라고 합니다.
최근에 일찍 일어나기 프로젝트를 하고 있습니다. 이 프로젝트 역시 현재 진행하고 있는 1일 1포스트 프로젝트처럼 자의로 그 누구도 강제하지 않은 '될대로 되라지!' 생각으로 시작한 프로젝트입니다. 사실 프로젝트라고 이름 붙이는 것도 너무 거창합니다.
그래도 노력은 하고 있는 프로젝트입니다.
그동안 알람을 맞춰야만 일찍 일어났는데 오늘은 저절로 눈이 6시 10분에 떠졌습니다.
정확히 오늘이 21일째 되는 날입니다!
프로젝트 시작 날짜를 생각해보니 11월 16일부터 시작했더군요 정말 놀랍습니다.
제 글을 보기 위해 방문해주신 분들도 이런 소소하지만 건강에 도움되는 프로젝트를 한 번 해보시는 걸 추천드립니다.
시도해보고 3주 뒤에 습관으로 자리가 잡혔다면 비밀 댓글로 어떤 프로젝트를 실행했고 3주 후에 성과가 어떻게 됐는지 알려주셨으면 합니다!
< 목차 >
1. 컴퓨터란 무엇인가?
2. 컴퓨터의 핵심 부품 4가지
2-1. CPU
2-2. Main Memory (주기억장치)
2-3. Secondary Storage (보조기억장치)
2-4. I/O Device (입출력장치)
3. 컴퓨터가 이해하는 정보 Data, Instruction
1. 컴퓨터란 무엇인가?
필자는 이전에 System Programming 카테고리에서 컴퓨터란 무엇인지에 대한 생각을 정리한 글을 작성했었다.
그래도 Computer Architecture에 대한 글을 작성하려면 Computer가 무엇인지에 대해 다시금 언급할 필요가 있다고 생각하여 다시 새롭게 글을 작성하고자 한다.
컴퓨터란 무엇인가?
컴퓨터는 정말 다양한 일을 한다. 우리는 컴퓨터를 어떤 용도로 사용하는가?
음악을 듣기 위해, 영상을 보기 위해, 영상을 만들기 위해, 개발을 하기 위해, 쇼핑을 하기 위해 등 컴퓨터는 정말 다양한 용도로 사용된다.
컴퓨터는 어떻게 이렇게 다양한 용도로 사용되는 것인가?
간략히 위 질문에 대한 필자의 생각을 말하자면 우리는 개발자가 작성한 명령어들로 이루어진 프로그램을 사용하기 위해 컴퓨터를 사용한다. 즉, 컴퓨터는 인간의 명령을 수행할 수 있는 제어장치와 명령을 수행하는데에 필요한 데이터를 연산할 수 있는 연산장치를 갖추고 있어 다양한 명령들을 수행할 수 있기에 정말 다양한 용도로 사용된다.
어떻게 컴퓨터가 프로그램을 실행하는 걸까?
컴퓨터는 이전 필자가 작성한 글에서 언급했다시피 계산을 하기 위해 만들어진 기계이다.
기계라 함은 인간이 더욱 편안하게 살고 싶어서 인간의 일을 대신해주는 물건을 인간이 만든 것이다. 여러 기계들 중에서도 컴퓨터는 정말 인간의 삶에서 빼놓을 수 없을 정도로 많은 일을 대신해준다. 가령 컴퓨터가 없었더라면 우리는 집에서 편안하게 옷을 구매할 수도 생필품을 구매할 수도 없었을 것이다. 이렇게 인간의 삶을 보다 편안하게 만들어준 컴퓨터는 도대체! 어떻게 다양한 일을 할 수 있는 것인가?
이는 컴퓨터 구조에 대해 이해할 필요가 있다. 조립 컴퓨터를 직접 조립해서 실행해본 사람이라면 컴퓨터 부품에 대한 이해도가 높을 것이다. 가령 CPU가 비싼 이유를 안다거나 자신이 컴퓨터를 어떤 용도로 사용하려는지에 따라 어떤 부품에 더 많은 비용을 투자해야 하는지를 안다거나 말이다. 예를 들어 게임을 정말 좋아하는 사람이 컴퓨터를 맞추려고 할 때 자신이 즐기는 게임이 그래픽이 아주 중요한 게임이라면 그래픽카드에 많은 투자할 것이다. 이처럼 컴퓨터는 사용하려는 개인의 목적에 따라 다양한 부품을 추가하여 사용할 수 있다.
당장 웹사이트 검색창에 '조립PC'를 검색하여 나온 PC의 부품을 확인해보자!
위 사진에 나오는 정보처럼 컴퓨터를 구성하는 여러 부품들이 있다. 그렇다면 위 부품들 중에서 컴퓨터를 구성하는 아주 핵심적인 부품들이 있다. 과연 무엇일까? 이미 목차를 보고 눈치 챈 사람도 있을 것이다. 우리가 조립 PC를 맞추기 위해 아무 사이트 들어가서 부품을 보면 항상 확인할 수 있는 부품들이 컴퓨터에 없어서는 안될 부품들이다. 왜 없어서는 안되는지에 대해서는 추후에 자세히 설명해보이도록 하겠다.
2. 컴퓨터의 핵심 부품 4가지
컴퓨터에 핵심부품으로는 CPU, Main Memory, Secondary Storage, I/O Device가 있다. 이 부품들 중 하나라도 없다면 컴퓨터는 바보가 된다. 바보 컴퓨터는 우리가 원하는 다양한 용도를 충족시켜줄 수 없다.
2-1. CPU; Central Processing Unit (중앙처리장치)
CPU에 대한 구조도 이전에 작성한 적이 있다.
4가지 부품은 모두 중요한 부품이지만 그 중에서도 핵심 부품이 바로 CPU이다. CPU에 대한 설명에서 항상 강조되는 말이 있다.
'CPU는 컴퓨터의 뇌이다'
CPU 내부에는 연산할 수 있는 장치(ALU)와 명령어를 수행하는데 필요한 제어 장치(CU)가 있다. 필자가 도입부에서 '컴퓨터를 사용한다는 것은 프로그램을 사용한다는 것이며 컴퓨터는 인간의 명령을 수행할 수 있는 제어장치와 명령을 수행하는데에 필요한 데이터를 연산할 수 있는 연산장치를 갖추고 있어 다양한 명령들을 수행할 수 있기에 정말 다양한 용도로 사용된다.'고 말했다.
이처럼 프로그램을 수행하는 데에 가장 핵심적인 역할을 하는 것이 CPU이다.
CPU가 하는 역할에 대해 간략히 말하면 CPU는 메모리에 저장된 명령어를 읽어오고(Fetch), 읽어온 명령어를 해석하고(Decoad), 해석한 명령어를 실행(Execute)한다.
2-2. Main Memory (주기억장치)
주기억장치는 RAM(Random Access Memory)과 ROM(Read Only Memory) 두 가지가 있다. 이 두 메모리에 대한 설명은 추후에 하도록 하겠다. 일단 우리가 사용하는 컴퓨터의 주기억장치는 RAM이라는 것을 알아두자.
위에서 CPU는 명령어를 읽어올 때 Memory에서 읽어온다고 했다. 메모리는 현재 컴퓨터에서 실행되는 프로그램의 명령어(Instruction)와 데이터(Data)를 저장하는 부품이다.
여기서 핵심은 메모리는 현재 실행하려는 프로그램의 명령어와 데이터가 저장되어있다는 것이다. 즉, 프로그램이 실행되려면 메모리에 해당 프로그램에 대한 명령어와 데이터가 저장되어있어야 한다는 것이다. 예를 들어 우리가 컴퓨터를 키고 게임을 실행해본다고 해보자. 컴퓨터에 게임 아이콘을 마우스로 클릭하면 그때 프로그램이 메인 메모리로 올라가서 CPU가 메인 메모리에 올라온 명령어와 데이터를 읽어오면서 프로그램이 실행되는 것이다.
메인 메모리는 휘발성 메모리로 프로그램을 실행하는 중에만 데이터를 저장하고 프로그램이 종료되면 사라진다.
이번 글은 컴퓨터를 구성하는 핵심 부품의 역할을 간략하게 설명하는 글이기 때문에 메모리에 대한 구조와 어떤 원리로 메모리에 프로그램의 명령어와 데이터가 올라가고 CPU가 읽어가는지는 추후에 자세히 설명해보도록 하겠다.
2-3. Secondary Storage (보조기억장치)
보조기억장치는 비휘발성 메모리로 프로그램이 종료되어도 저장된 내용이 사라지지 않는 메모리이다.
보조기억장치로는 흔히 알고 있는 USB, Hard Disk, SSD 등이 있다.
2-4. I /O Devie (입출력장치)
입출력 장치는 우리가 컴퓨터를 사용할 때 화면이 출력되는 모니터와 필자가 현재 쓰고 있는 글을 입력하는 키보드와 화면과 상호작용하는 마우스, 프린트 등이 입출력 장치이다. 입출력장치는 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환하는 역할을 한다.
3. 컴퓨터가 이해하는 정보 Data, Instruction
메모리는 현재 컴퓨터에서 실행되는 프로그램의 명령어(Instruction)와 데이터(Data)를 저장하는 부품이라고 했다. 여기서 명령어와 데이터를 CPU가 이해한다.
CPU가 어떻게 메모리에서 명령어와 데이터를 읽어오고 처리하는지에 대한 과정을 설명한 글이 있다.
컴퓨터는 0과 1로만 이루어진 저급 언어를 사용한다. 대부분의 프로그램은 사람이 이해할 수 있는 고급언어인 프로그래밍 언어로 작성된다. 이때 프로그래밍 언어로 작성된 파일이 실행하기위해 컴퓨터가 이해할 수 있는 저급언어로 바꾼다. 그러면 어떻게 0과 1로만 다양한 프로그램을 만들 수 있을지 의문이 생긴다.
'아니 0과 1로만 어떻게 다양한 명령어를 수행하게 만들 수 있는거지?'
컴퓨터는 0과 1로만 이루어진 데이터만 이해한다. 명령어는 데이터를 '어떻게' 처리할 것인지에 대한 뜻을 담은 데이터이다.
예를 들어 "1과 3을 더하라"라는 명령은 '1과 3'이라는 데이터와 '더하라'라는 명령으로 이루어져 있다. 이때 더하라라는 뜻을 담은 데이터를 임의로 정해보자. 필자는 '더하라'라는 명령을 0x01라는 데이터에 할당했다. 그렇다면 상수 1과 3을 각각 16진법으로 바꾸면 0x01, 0x03이 된다. 이런 방식으로 명령어의 뜻을 담은 데이터를 생성하여 CPU가 해당 명령 데이터와 상수 데이터를 읽으면 상수 데이터를 어떻게 처리할 것인지를 명령 데이터를 통해 해석한 다음 명령 데이터에 맞도록 명령어를 실행하는 것이다.
이렇게 글로만 설명해서 이해가 안될 수 있으니 시각적으로 어떻게 CPU가 명령을 수행하는지에 대해 알아보고 싶다면 위에 첨부한 글을 읽어보는 것을 추천한다.