Hardware Organization 하드웨어 구조 CPU Memory 상호작용
시리즈 1편(Compiler 컴파일러란 ?)에서는 소프트웨어에서 우리가 하는 말이 컴퓨터의 언어로 어떻게 변환이 되는지 살펴보았는데요. 오늘은 컴퓨터의 또 다른 구성 요소인 하드웨어에 대해 살펴보려고 해요.
컴퓨터와 사용자
컴퓨터와 사람과의 상호작용을 살펴본다면, 한 사람은 요청을 하고한 사람은 계산하는 모습과 같습니다. 이 둘의 역할은 변함이 없습니다. 한 명은 요청을 하고 결과를 받아 가지만, 한 명은 계속해서 계산만 합니다. (이렇게 이야기하니까 꽤 가혹해 보이네요. ㅎㅎ)
오늘 더 집중적으로 살펴볼 부분은 바로 계산하는 사람(컴퓨터)이 어떻게 계산을 하느냐 입니다.
세세한 부분까지 다루기 전에 가장 중요한 몇 가지 요소만으로 먼저 설명하겠습니다.
기본적으로 컴퓨터가 하는 일 - CPU & Disk
하드웨어가 작동하는 가장 핵심적인 부분으로는 CPU 와 Disk입니다.
CPU는 계산을 담당하고, Disk는 데이터 저장을 담당하죠. 사용자가 컴퓨터에 요청하는 명령에 따라 Disk에 저장된 데이터를 가져다가 CPU에서 계산해서 결괏값을 내보내 주는 절차가 계속해서 진행되게 됩니다.
하드웨어의 구성요소 Hardware organization
이제 가장 큰 흐름을 인지했으니 좀 더 세세한 부분을 살펴보겠습니다. (프로그래밍 공부를 하다 보면, 정말 얼마 지나지 않아 세세한 내용에 대한 설명 없이 언급하는 강의들이 많기 때문에, 기본적으로 세세한 부분을 인지 정도는 하고 있어야 공부하기 편리합니다. 물론 이런 기본적인 부분까지 설명하기 시작하면 강의가 굉장히 길어지기 때문에 어쩔 수 없습니다.)
위의 구조가 바로 컴퓨터의 구조입니다. 개별적인 컴퓨터의 특징에 따라 조금은 달라질 수 있지만 기본적인 구조는 이와 유사합니다. 처음 이 도표를 보면 굉장히 당황할 수 있어요. 하지만 무엇이든 대략 살펴본 뒤에 자세한 부분을 들어가면 좀 더 이해가 쉬워집니다.
CPU
위의 그림에서 빨간색으로 표시되어 있는 부분은 바로 CPU 입니다. 계산이 이루어지는 공간이자, 컴퓨터에서 굉장히 중요한 부분 중 하나죠. CPU는 Central Processing Unit 의 약자 입니다. 이 부분은 컴퓨터의 효율을 위해 엔지니어들이 다양한 시도를 해보는 공간이기 때문에, 다양한 방식의 과정이 구현되는 곳입니다. 그저 데이터를 받고 출력하는 마우스, 키보드, 모니터 화면 같은 단순한 부분이 아니죠.
CPU 의 구성 요소도 간단하게 살펴보도록 할게요. 위의 그림에서 볼 수 있듯이 CPU는 PC, Register file, ALU, Bus interface 로 구성되어 있습니다.
- PC : CPU에는 PC 가 존재하는데요. 이는 program counter 의 약자로 명령어를 실행할 때마다 메인 메모리 명령어를 가리키는 역할을 합니다. 가게의 매니저라고 생각하시면 쉬울 것 같아요. 매니저는 알바생에게 업무 지시를 하게 되죠. 여기 청소해야 해, 손님 계산 좀 도와줘 등등의 명령 말이죠. 해야 할 일을 알려주는 역할입니다.
- Register : 다음으로는 Register file 이 있습니다. 이는 하나의 데이터 치수를 저장하는 Register 의 모음입니다. 각각의 Register는 주소를 가지고 있습니다. 아파트로 비유할 수 있겠네요. 각 집마다 사람들이 거주할 수 있고 호수가 있지만, 이사를 가게 되면 사람들이 바뀌게 됩니다. 실제 아파트와 다른 점으로는 새로 들어오는 집주인이 강제로 기존 집주인을 내쫒는 다는 점이겠네요.
- ALU : 그리고 가장 중요한 부분인 ALU는 바로 계산이 이루어지는 곳입니다. 이 다양한 요소들이 상호작용하는 과정은 아래 부분에서 좀 더 설명해 드리도록 할게요.
. CPU 에게 요청되는 명령의 예시로 몇 가지만 알려드리고 넘어가겠습니다.
- Load : main memory 에서 register 로 데이터를 가져오기. 이때 register에 이미 저장된 데이터 위에 덮어쓰기.
- Store : register 에 있는 데이터를 main memory 로 복사하기. 이때 main memory 자리에 있는 데이터를 덮어쓰기.
- Operate : register에 있는 두 개의 데이터를 ALU로 복사해서 두 데이터를 수학 연산 처리하여 그 결과를 register에 저장하기. 이전 데이터를 덮어쓰기.
- Jump : 명령어에서 데이터를 추출하여 PC에 저장하기. 이전 저장 데이터 덮어쓰기.
USB Graphic
위의 초록색 부분은 간단히 말해서 외부기기를 뜻합니다. I/O Devices. (Input/output Devices)라고도 하는 마우스, 키보드, 모니터 화면 과 연결되는 부분이죠.
Disk & Memory & Register
위의 파란 부분은 데이터를 저장하는 공간입니다. 디스크(Disk)는 장기 저장소이고, 메모리(Memory)는 단기 저장소 입니다. 이 공간들의 차이는 다음 포스팅에서 좀 더 자세히 다룰 예정입니다.
Buses
그리고 Bus 들이 있습니다. 이 Bus 들은 데이터를 이동시켜 주는 데요. 마치 대중교통 버스를 타고 이동한다고 생각하면 기억하기 쉬우실 것 같아요.
데이터 처리 과정
데이터 처리 과정을 간단하게 하나의 프로그램을 적용하는 순서로 알려드릴게요.
1. 컴퓨터 프로그램(shell program)은 사용자가 키보드를 통해서 데이터를 입력하기를 기다립니다.
2. 사용자가 키보드에 데이터를 입력하면, 컴퓨터 프로그램은 각각의 데이터를 register로 읽어냅니다. (이때 사용자가 enter 키를 누르지 않았습니다)
3. Register에 의해 읽힌 데이터는 memory로 이동하여 일시적인 저장이 이루어집니다.
4. 사용자가 enter 키를 누르면서 입력이 끝났음을 알리면, 컴퓨터 프로그램은 사용자가 요청한 프로그램에 관련한 데이터들을 Disk에서 가져와 memory로 복사합니다. 이로인해 드디어 입력된 데이터 문자가 출력됩니다.
(이때, DMA, direct memory access라는 기술로 인해 데이터가 disk에서 main memory로 바로 이동이 가능해집니다)
5. 이 데이터 파일이 memory에 입력되고 난 뒤에 CPU는 명령어를 실행하게 되고, 이후 입력된 데이터가 화면에 송출되게 됩니다.
정말 간단하게 표현한 하드웨어의 작동 방식이었지만, 컴퓨터에 대해 알지 못한 채 프로그래밍을 배우게 되시는 분들에게는 이 정도의 간단한 이해도 굉장히 도움이 된다고 생각합니다. 오히려 어려운 단어와 다양한 기술들을 언급하면, 더 혼란스러워지고 공부가 힘들어지기 때문이죠. 최대한 초보자들이 이해하기 쉽게, 해외에서 그리고 국내에서 유명한 원서를 참고해서 쓴 글입니다. 조금이라도 도움이 되었길 바라며, 다음 포스팅도 잘 준비해 보도록 하겠습니다. 그럼 오늘도 제 글을 정독해 주셔서 감사합니다.
참조 : Book : Computer Systems A Programmer's Perspective - Randal E. Bryant. David R. O'Hallaron.
댓글
댓글 쓰기