개요
컴퓨터 시스템은 기본적으로 하드웨어와 시스템 소프트웨어로 구성되며, 그러한 시스템에 각종 응용 소프트웨어들이 탑재되어 사용자와 상호 작용하면서 프로그램을 처리합니다. 컴퓨터가 프로그램 형태로 주어진 작업을 수행하기 위해서는 전기적 신호들로 표현된 정보들을 해석하거나 이동시키고 처리하여 새로운 정보를 생성해야합니다. 컴퓨터에서 각종 정보의 전송 통로를 제공해주고, 정보에 대한 처리가 실제 일어나게 해주는 물리적인 실체들을 하드웨어라 부릅니다. 소프트웨어란 정보들이 이동하는 방향과 정보 처리의 종류를 지정해주고, 그러한 동작들이 수행될 시간을 지정해주는 명령들의 집합입니다. 하지만 소프트웨어는 하드웨어에 의존적입니다. 소프트웨어는 하드웨어가 제공해주는 기능들을 이용하여 최종적인 결과를 얻을 수 있도록 도와주기때문 입니다.
컴퓨터의 기본 구조
중앙처리장치(Central Processing Unit): CPU는 프로세서라고 불리기도 하며, 사실상 컴퓨터의 특성과 성능에 가장 큰 영향을 미치는 구성요소입니다. CPU가 처리할 프로그램 코드와 데이터는 기억장치(memory; 저장장치(storage device))에 저장되는데, 기억장치는 특성과 속도 및 용도에 따라 주기억장치와 보조저장장치로 나누어집니다.
주기억장치(main memory): 메인 보드 상에서 CPU 가까이 위치하며, 반도체 기억장치 칩(semiconductor memory chip)들로 이루어져 고속의 읽기 및 쓰기가 가능하지만, 가격이 높고 면적을 많이 차지하기 때문에 저장 용량에 한계가 있습니다. 또 영구 저장 능력이 없기 때문에 프로그램 실행 중에만 일시적으로 사용되는 기억장치입니다.
보조기억장치(auxiliary storage device): 하드 디스크(hard disk)나 SSD(solid-state drive)와 같이 영구 저장 능력을 가진 기억장치들을 말하며, 저장 밀도가 높고 비트당 가격이 저렴하지만 기계적인 장치가 포함되거나 쓰기 동작이 복잡한 반도체 칩들을 이용하기 때문에 속도가 느립니다. 또한 CPU가 직접 엑세스(읽기/쓰기)하지는 못하고, 별도의 제어기를 통해서만 가능합니다.
입출력장치(I/O device): 키보드와 디스플레이 모니터 및 프린터 외에도 다양한 장치들을 나타내는 용어로, 이들은 CPU와 직접 데이터를 교환할 수 없으며, 별도의 제어기를 통하여 엑세스가 가능한 I/O 장치와 보조저장장치들을 나타냅니다.
정보의 표현과 저장
컴퓨터가 받아들이고 처리하는 정보의 종류로는 프로그램 코드와 데이터가 있습니다. 컴퓨터에서 처리하는 모든 정보들은 2진수(binary number)를 나타내는 비트들의 조합으로 표현됩니다. 사람들이 이해하기 편하게 작성된 고급 언어(high-level language)는 디지털 회로들로 이루어진 컴퓨터 하드웨어는 전혀 이해하지 못합니다. 따라서 컴파일러(compiler)라고 부르는 소프트웨어에 의해 하드웨어가 이해할 수 있는 언어로 변역되어야 합니다. 그렇게 번역된 언어를 기계여(machine language) 또는 기계 코드(machine code)라 부릅니다.
기계어는 CPU의 내부 구조에 따라 이해할 수 있는 언어가 다르기 때문에 이런 언어상의 차이를 해결하기 위하여 각 CPU 고유의 중간 언어인 어셈블리 언어(assembly language)가 존재합니다.
여기서 각 어셈블리 명령어가 지정하는 동작을 개략적으로 나타내는 기호인 ‘LOAD’, ‘ADD’, ‘STOR’를 니모닉스(mnemonics)라고 부릅니다. 명령어는 CPU가 수행해야 할 동작뿐 아니라, 처리할 데이터가 저장되어 있는 기억장치 주소나 레지스터 번호도 구체적으로 지정해줍니다. 이와 같이 명령어들은 CPU의 내부 구조와 밀접한 관계가 있기 때문에, 컴퓨터의 내부 구조를 알고 있어야 프로그램을 작성할 수 있습니다.
시스템의 구성
CPU와 시스템 내의 다른 요소들 사이에 정보를 교환하는 통로가 되는 시스템 버스(system bus)는 아래와 같은 세가지 하부 버스(sub bus)들로 이루어집니다.
주소 버스(address bus): CPU가 외부로 발생하는 주소 정보를 전송하는 신호 선들을로 각 주소 선은 하나의 주소 비트를 전송하는데 사용되며, 전체 주소 선들의 개수가 CPU와 접속 될 수 있는 최대 기억장치 용량을 결정합니다.
데이터 버스(data bus): CPU가 기억장치 혹은 I/O 장치와의 사이에 데이터를 전송하기 위한 신호 선들의 집합입니다.
제어 버스(control bus): CPU가 시스템 내의 각종 요소들의 동작을 제어하는데 필요한 신호 선들의 집합입니다.
주소는 CPU에 의해 발생되어 기억장치와 I/O 장치로 보내지는 정보이기 떄문에 주소 버스는 단방향성(uni-directional)입니다. 반면에 데이터 버스는 읽기와 쓰기 동작을 모두 지원해야 하므로 양방향 전송(bi-directional transfer)이 가능해야 합니다.
CPU와 기억장치의 접속
CPU가 데이터를 기억장치의 특정 장소에 저장하거나 이미 저장되어 있는 내용을 읽는 동작을 엑세스(access)라고 합니다. CPU가 특정 기억 장소로부터 데이터를 읽고자 할 때 기억장치로 보내주어야 하는 정보는 * *주소와 **읽기 신호입니다. 그리고 데이터를 저장하는 경우에는 해당 기억 장소의 주소와 데이터 및 쓰기 신호를 보내주어야합니다. 따라서 CPU와 기억장치 사이에는 그러한 정보들의 전송 통로인 주소 버스, 데이터 버스 및 제어 신호 선들이 접속 되어야 합니다.
CPU와 I/O 장치의 접속
I/O 장치에는 외부와의 데이터 입력 및 출력을 위한 각종 주변장치들이 모두 포합됩니다. CPU가 I/O 장치들을 직접 제어하거나 엑세스하지 못하기 때문에 별도의 인터페이스 회로(interface circuit) 혹은 제어기(controller)를 통해 접속되어야 합니다. CPU는 시스템에 접속되어 있는 I/O 장치들을 직접 제어하지는 않지만, 각 장치의 제어기가 수행할 동작을 지정하는 명령(command)를 보내거나 상태 정보와 데이터를 주고 받을 수 있어야합니다. 각 제어기 내에 있는 상태 레지스터와 데이터 레지스터를 각각 한 단어 길이의 기억장치로 간주하고 한개의 주소를 배정하여 CPU가 제어기 내부 레지스터들의 주소를 이용하여 해당 I/O 장치들을 제어할 수 있게 되는 것입니다.
전체 시스템의 구성
지금까지의 설명한 내용을 토대로 컴퓨터시스템이 수행할 수 있는 기능들을 주요 요소들과 연관시켜 설명하면 다음과 같습니다.
프로그램 실행: CPU가 주기억장치로부터 프로그램 코드를 읽어서 실행한다.
데이터 저장: 프로그램 실행 결과로서 얻어진 데이터를 주기억장치에 저장합니다.
데이터 이동: 디스크나 SSD에 저장되어 있는 프로그램과 데이터 블록을 주기억장치로 이동합니다.
데이터 입력 및 출력: 사용자가 키보드를 통하여 보내는 명령이나 데이터를 얽어 들입니다. 또한 CPU가 처리한 결과 값이나 기억장치의 내용을 출력합니다.
제어: 프로그램이 순서대로 실행되도록 혹은 필요에 따라 실행 순서를 변경하도록 조정하며, 각종 제어 신호들을 발생합니다.
결론
해당 글에서는 컴퓨터가 이와 같은 기능들을 수행하기 위해 갖추어야 할 구성요소들과 그들 간의 기본적인 접속 방법에 대해서 알아봤습니다. 하지만 이와 같이 구성된 컴퓨터는 성능을 높이고 기능을 다양화하기 위하여 계속적인 변화가 이루어져 왔습니다. 특히 CPU와 주기억장치에 비하여 보조저장장치나 I/O 장치들은 속도가 낮고 전송 방식도 다르기 때문에 직접 시스템 버스에 접속하는 것이 어려움에 있습니다.
따라서 이러한 장치들을 위한 확장 버스(expansion bus) 개념이 개발되어 새로운 장치들을 쉽게 시스템에 추가하면서도 시스템 성능을 높일 수 있는 계층적 버스 구조(hierarchical bus structure)가 채택되고 있습니다.
해당 글은 컴퓨터구조론(김종현 저)을 읽고 공부한 내용을 정리한 글입니다.
오탈자 및 오류 내용을 댓글 또는 메일로 알려주시면, 검토 후 조치하겠습니다.