- 컴퓨터 시스템은 기본적으로 하드웨어와 시스템 소프트웨어로 구성되며 그러한 시스템에 각종 응용 소프트웨어가 탑재되어 사용자와 상호 작용하며 프로그램을 처리한다.
하드웨어
- 컴퓨터에서 각종 정보의 전송 통로를 제공해주고 정보에 대한 처리가 실제 일어나게 해주는 물리적인 실체들
소프트웨어
- 정보들이 이동하는 방향과 정보 처리의 종류를 지정해주고 그러한 동작들이 수행될 시간을 지정해주는 명령들의 집합
- 하드웨어에 의존적이다. → 컴퓨터의 정보처리 능력, 속도 등 기본 능력은 하드웨어에 의해 결정된다.
- 시스템 소프트웨어 : OS(Windows 10, Unix, Linux 등), 각종 유틸리티 프로그램(프린터 드라이버 등)
- 응용 소프트웨어 : 워드 프로세서, 웹 브라우저, MS-Excel 등
컴퓨터의 기본 구조
CPU
- 프로세서(processor)이라 불리기도 하며 컴퓨터의 특성과 성능에 가장 큰 영향을 미치는 구성 요소
- CPU가 한 번에 처리하는 데이터의 길이(비트 수)에 따라 8비트, 32비트 등의 컴퓨터로 분류되며 컴퓨터의 이론적인 처리 속도는 CPU 성능에 의해 결정된다.
기억장치
- CPU가 처리할 프로그램 코드와 데이터는 기억장치(memory; 저장장치라고도함)에 저장된다.
- 주기억장치(main memory)
- 메인 보드 상에서 CPU 가까이 위치하며 반도체 기억장치 칩들로 이루어져 고속의 읽기 및 쓰기가 가능하다.
- 가격이 높고 면적을 많이 차지하여 저장 용량에 한계가 있다.
- 영구저장 능력이 없고 프로그램 실행중에 일시적으로 사용된다.
- 보조저장장치(auxiliary storage device; 2차기억장치라고도 함)
- 하드디스크, SSD 등
- 영구저장이 가능하다.
- 저장 밀도가 높고 비트당 가격이 저렴하지만 속도가 느리다.
- CPU가 직접 액세스하지 못하고 별도의 제어기를 통해 가능하다.
- 입출력 장치(I/O device)
- 키보드, 모니터, 프린터 등
- CPU와 직접 데이터를 교환할 수 없고 각 장치마다 별도의 제어기가 CPU의 명령을 받아 장치의 동작을 제어하고 데이터를 이동시킨다.
캐시 메모리 : 캐시 메모리는 CPU의 처리 속도와 주 기억 장치의 접근 속도 차이를 줄이기 위해 사용한다. 자주 쓰는 데이터를 미리 캐시메모리에 가져다 놓고 CPU가 필요한 데이터를 캐시 메모리에서 먼저 찾도록 한다.
→ cpu는 빠른데 기억장치는 느리기 때문
정보의 표현과 저장
- 컴퓨터가 받아들이고 처리하는 정보의 종류로는 프로그램 코드와 데이터가 있다.
- 이 정보들은 비트(bit)들의 조합으로 표현된다.
프로그램 코드
기계어(machine language or machine code)
- 컴퓨터 하드웨어 부품들이 이해할 수 있는 언어
- 2진 비트들로 구성
어셈블리 언어(assembly language)
- 고급 언어와 기계어 사이의 중간 언어
- 어셈블러(assembler)로 번역되며 기계어와 일대일 대응
고급 언어(high-level language)
- 영문자와 숫자로 구성되어 사람이 이해하기 쉬운 언어
- 컴파일러(compiler)를 통해 기계어로 번역
- C, C++, JAVA 등
컴파일러(compiler)
- 고급언어 프로그램을 기계어 프로그램으로 번역하는 소프트웨어
어셈블러(assembler)
- 어셈블리 프로그램을 기계어 프로그램으로 번역하는 소프트웨어
- 니모닉스(mnemonics)
- 어셈블리 명령어가 지정하는 연산을 가리키는 알파벳 기호
- ‘LOAD’, ‘ADD’, ‘STOR’ 등
프로그램 언어의 번역 과정 예
- Z = X + Y
- LOAD A,X : 기억장치 X번지의 내용을 읽어 레지스터 A에 적재(load)
- ADD A,Y : 기억장치 Y번지 내용을 읽어 레지스터 A에 적재된 값과 더하고 결과를 다시 A에 적재
- STOR Z,A : 그 값을 기억장치 Z번지에 저장
기계 명령어의 형식
연산 코드(op code)
- CPU가 수행할 연산을 지정해주는 비트들
- 만약 연산 코드가 3비트로 이루어진다면 2^3=8개의 연산들을 지정할 수 있다.
오퍼랜드(operand)
- 적재될 데이터가 저장되어 있는 기억장치 주소
- 만약 5개의 오퍼랜드 비트가 있다면 주소를 지정할 수 있는 기억 장소의 최대 수는 2^5=32개가 된다.
프로그램 코드와 데이터의 기억장치 저장
- 프로그램 코드(명령어)와 데이터는 지정된 기억 장소에 단어(word) 단위로 저장된다.
- 단어(word) : 각 기억 장소에 저장되는 정보의 기본단위로 CPU에 의해 한 번에 처리될 수 있는 비트들의 그룹
- 단어의 길이는 CPU의 하드웨어 구조에 따라 8비트, 16비트, 32비트 등으로 다양하다.
시스템의 구성
CPU와 기억장치의 접속
시스템 버스(system bus)
- CPU와 시스템 내의 다른 요소들 사이에 정보를 교환하는 통로
- 기본 구성
- 주소 버스(address bus)
- CPU가 외부로 발생하는 주소 정보를 전송하는 신호 선들의 집합
- 각 주소 선은 하나의 주소 비트를 전송하는데 사용되며, 주소 선의 수는 CPU와 접속될 수 있는 최대 기억장치 용량을 결정한다.
- ex) 주소 버스 비트 수=16비트라면 최대 2^16=64K개의 기억 장소들의 주소지정이 가능하다.
- 주소는 CPU에 의해 발생되어 기억장치와 I/O장치로 보내지는 정보이기 때문에 주소 버스는 단방향성이다
- 데이터 버스(data bus)
- CPU가 기억 장치 혹은 I/O 장치와의 사이에 데이터를 전송하기 위한 신호 선들의 집합
- 데이터 선의 수는 CPU가 한 번에 전송할 수 있는 비트 수를 결정한다.
- ex) 데이터 버스 폭 = 32비트라면 CPU와 기억장치 간의 데이터 전송은 한 번에 32비트씩 가능
- 읽기,쓰기 동작을 모두 지원하기 때문에 양방향성이다.
- 제어 버스(control bus)
- CPU가 시스템 내의 각종 요소들의 동작을 제어하기 위한 신호 선들의 집합
- I/O 읽기/쓰기 신호, 인터럽트 신호, 버스 제어 신호 등
- 읽기,쓰기 동작을 모두 지원하기 때문에 양방향성이다.
CPU의 기억장치 액세스
- 기억장치 쓰기 동작
- CPU는 데이터를 저장할 기억 장소의 주소와 저장할 데이터를 각각 주소 버스와 데이터 버스를 통하여 보내는 동시에 쓰기 신호를 활성화 시킨다.
- 이 신호들은 기억장치 쓰기 동작이 완료될 때까지 유지되어야 한다.
- 기억장치 쓰기 시간
- CPU가 주소와 데이터를 보낸 순간부터 저장이 완료될 때까지의 시간
- 기억장치 읽기 동작
- CPU는 기억 장치 주소와 주소 버스를 통하여 보내는 동시에 읽기 신호를 활성화 시킨다.
- 일정 지연 시간이 경과한 후 기억장치로부터 읽혀진 데이터가 데이터 버스 상에 실리고 CPU는 그 데이터를 버스 인터페이스 회로를 통해 읽는다.
- 기억장치 읽기 시간
- 주소를 발생한 시간부터 기억장치의 데이터가 CPU에 도착할 때까지의 시간
I/O 장치 제어기(I/O device controller)
- CPU로부터 I/O 명령을 받아서 해당 I/O 장치를 제어하고 데이터를 이동함으로써 명령을 수행하는 전자회로 장치 (ex. 키보드 제어기, 프린터 제어기 등)
상태 레지스터
- I/O 장치의 현재 상태를 나타내는 비트들을 저장한 레지스터
- 준비 상태 비트, 데이터 전송 확인 비트 등
데이터 레지스터
- CPU와 I/O장치 간에 이동되는 데이터를 일시적으로 저장하는 레지스터
I/O장치의 접속 사례
- 키보드로부터 데이트를 읽어들이는 과정
- 키보드의 키 누름
- 그에 대응되는 8비트(ASCII코드 7비트 + 패리티비트) 데이터가 키보드 제어기로 전송되어 데이터 레지스터에 저장되며 동시에 상태 레지스터의 지정된 Ready 비트 set
- CPU는 데이터 입력을 원하는 시점에서 상태 레지스터의 Ready 비트가 set되어 있는지 검사
- set되어 있다면 데이터 레지스터의 내용을 CPU로 읽어들임으로써 데이터 입력과정 완료
- set되어있지 않다면 CPU는 상태 레지스터의 내용을 읽고 검사하는 동작을 반복하며 대기
보조저장장치의 접속
- 보조 저장 장치들(디스크, 플래시 메모리, SSD, CD-ROM 등)도 각 장치를 위한 제어기를 통하여 키보드나 프린터와 유사한 방법으로 접속
- 차이점 : 데이터 전송 단위
- 키보드 : 바이트 단위 전송
- 보조저장 장치 : 블록(512/1024/4096 바이트) 단위로 전송
- 제어기 내에 한 블록 이상을 임시 저장할 수 있는 데이터 기억 장치(버퍼) 필요
전체 시스템의 구성
- 프로그램 실행 : CPU가 주기억장치로부터 프로그램 코드를 읽어서 실행
- 데이터 저장 : 프로그램 실행 결과로서 얻어진 데이터를 주기억장치에 저장
- 데이터 이동 : 디스크나 SSD에 저장되어 있는 프로그램과 데이터 블록을 주기억장치로 이동
- 데이터 입력/출력 : 사용자가 키보드를 통하여 보내는 명령이나 데이터를 읽어들임. 또한 CPU가 처리한 결과값이나 기억장치의 내용을 프린터 또는 모니터로 출력
- 제어 : 프로그램이 순서대로 실행되도록 또는 필요에 따라 실행 순서를 변경하도록 조정하며 각종 제어 신호들을 발생
컴퓨터 구조의 발전 과정
주요 부품들의 발전 과정
- 릴레이 → 진공관 → 트랜지스터 → 반도체 집적 회로
- 발전 과정에서 개선된 특성
대표적인 컴퓨터들
- ENIAC(Electronic Numerical Integrator And Computer)
- 1940년대 초, 폰노이만이 개발
- 진공관을 사용한 최초의 전자식 컴퓨터
- 폰 노이만의 설계 개념(stored-program 원리) 발표
- 프로그램과 데이터를 내부에 저장
- 2진수 체계 사용
- IAS 컴퓨터
- 프로그램 저장과 변경이 가능한 최초의 디지털 컴퓨터
- 주요 구성 요소
- 프로그램 제어 유니트
- 산술논리연산장치(ALU)
- 주기억장치
- 입출력장치
- 폰 노이만 아키텍쳐
- 프로그램 코드들을 기억장치에 저장된 순서대로 실행하며 그 주소는 CPU의 내부 레지스터인 프로그램 카운터에 의해 지정됨
- VLSI의 출현으로 개인용 컴퓨터가 개발됨
- VLSI (Very Large Scale IC)
- 수만 개 혹은 수십만 개 이상의 트랜지스터들이 집적되는 초대규모 IC
- 마이크로프로세서 칩들과 대용량 반도체 기억장치 칩