C 언어 | 컴퓨터 시스템 개발 | 하드웨어 구성

표준 컴퓨터의 하드웨어 구성과 그 관계를 소개한다.

컴퓨터의 구조

다른 프로그래밍 언어의 경험으로 충분히 컴퓨터에 대한 이해를 하고 있는 경우나, 컴퓨터의 조립해 본 경험이 있으며, 하드웨어에 대한 지식이 있는 경우는 이 항목을 넘어 “개발 환경 및 컴파일러"로 이동 바란다.

C 언어는 고급 언어이면서 저급 언어에 가장 가까운 언어이기도 하다. 따라서 C 언어를 구사하기 위해서는 어느 정도의 컴퓨터에 대한 지식이 필요하다. C에서 좌절하는 사람의 대부분은 C 언어 지식보다 컴퓨터에 대한 지식이 부족하고 있기 때문에 이해하기 힘든 경향이 있다. 그래서 이 자리에서는 컴퓨터 시스템에 대한 기본을 설명한다.

원래 컴퓨터는 어떤 데이터를 입력하고 데이터를 적절한 방법으로 계산하여 그 결과를 출력하는 도구로 생각할 수 있다. 이를 실현하기 위해 필요한 최소한의 장치가 입력 장치, 출력 장치, 연산 장치, 제어 장치, 기억 장치 5개에 이를 컴퓨터의 5대 요소라고 한다.

표1 - 컴퓨터 5 대 요소

장치명 설명
입력 장치 데이터를 컴퓨터로 전송하는 장치
출력 장치 계산 결과 데이터를 추출 장치
연산 장치 데이터를 프로그램에 따라 계산하는 장치
제어 장치 다른 장치의 작동을 제어하는 장치
저장 장치 데이터를 저장하기위한 장치

그림1. 컴퓨터 5 대 요소와 관계

컴퓨터의 5 대 요소와 관계

입력 장치는 문자나 숫자를 입력하는 키보드나 좌표를 입력하는 포인팅 장치(마우스와 펜, 터치 스크린 등), 영상을 입력하는 스캐너, 마크 시트를 읽는 OMR, 시간을 입력하는 타이머 등 다양한 존재한다.

출력 장치는 디스플레이가 대표적이지만, 그 외에도 프린터나 플로터 등이 존재한다.

연산 장치와 제어 장치는 한 세트에서 중앙 처리 장치라고 한다. CPU라고 하면 알기 쉬울지도 모르겠다. 중앙 처리 장치는 입출력을 관리하고 컴퓨터 전체를 제어한다. 이것이 없으면 컴퓨터는 계산할 수 없기 때문에 컴퓨터의 중추 신경이라고 생각된다.

저장 장치는 계산하는 데이터 및 계산 결과를 저장하기위한 장소로, 특히 CPU와 직접 회선으로 연결되어있는 중요한 기억 장치를 주기억 장치라고 한다. 프로그램은 데이터의 저장과 계산 결과를 저장하는 주기억 장치를 사용하기 때문에 주기억 장치에 대한 이해는 중요하다. 저장 장치는 메모리라고도 하지만, 일반적으로 메모리라는 용어를 사용하는 경우, 주기억 장치를 말한다. 컴퓨터는 이 밖에 하드 드라이브 또는 ROM과 같은 다른 저장 장치가 존재하고 이를 보조 기억 장치라고 한다. 주기억 장치는 컴퓨터의 전원을 끄면 저장했던 데이터가 삭제되지만, 보조 기억 장치는 전원을 꺼도 데이터가 저장되어 있다. 대신 주기억 장치는 데이터 액세스 속도가 빠른 CPU와 직접 데이터 주고 받는 것에 적합하지만, 보조 기억 장치는 데이터 액세스 속도가 주기억 장치보다 느린 CPU와의 데이터 교환에 적합하지 않다. 이와 같이, 기억 장치는 그 역할에 따라 성질이 다른다.

이러한 저장 장치에 저장되는 데이터는 “2진수와 16진수"에서 학습한 2진수 바이너리 데이터이다. 이 때, 1자리 2진수 값을 ‘비트’라는 단위로 나타냈지만, CPU와 1비트 단위로 계산을 할 수는 없다. 최소 CPU의 계산 단위를 ‘바이트’라고 부르며, 일반적으로 8비트가 1바이트이다. 즉 많은 컴퓨터가 8비트를 하나의 덩어리로 취급한다.

단, 8비트 = 1바이트가 아니기 때문에 주의해야 한다. 어디까지나 바이트는 컴퓨터의 최소 처리 단위를 나타내는 1바이트의 비트 수는 컴퓨터 아키텍처에 의존하는 문제이다. 그러나 일반적으로 8비트 단위로 처리되는 경우가 많고, 확실하게 8비트를 나타내는 단위가 필요하다. 그래서 네트워크 관련 서적에서는 8비트를 나타내는 단위 “octet"를 사용한다. 1바이트는 8비트 컴퓨터에 특화한 대화는 1바이트를 8비트로 한정하여 이야기를 진행시킬 수 있지만, 네트워크 관련 서적 등에서는 컴퓨터를 제한할 수 없기 때문에 octet이 사용된다 . 그러나 까다로운 때문에 이 책에서는 원칙적으로 1바이트를 8비트로 처리한다.

저장 장치에는 어떤한 방법으로 1비트씩 데이터가 저장되어 있다. 데이터는 각각 바이트 단위로 취급되기 때문에, 저장 장치는 바이트마다 주소로 대체되는 숫자를 할당한다. 저장 장치의 데이터의 위치를 나타내는 이 숫자를 메모리 주소라고 하고, 프로그램은 메모리 주소를 사용하여 원하는 정보에 액세스한다. 이 아이디어는 C언어에서 중요한 “포인터"에서 자세히 설명한다. 이 장에서는 컴퓨터에서 처리되는 모든 데이터는 프로그램이 데이터에 액세스하기 위한 주소가 반드시 존재한다는 것을 기억하자. 어쨌든 프로그래밍 세계에서는 데이터를 참조하려면 데이터가 존재하는 위치를 지정해야 한다. 따라서 모든 데이터에 고유하게 식별할 수 있는 주소가 필요하다.




최종 수정 : 2017-11-26