주제 - “컴퓨터 구조(1)”
부제 - 하드웨어와 소프트웨어, 컴퓨터의 성능
참고 서적
컴퓨터 구조 및 설계 (하드웨어/소프트웨어 인터페이스) - David A. Patterson, John L. Hennessy
운영체제 - Silberschatz , Peter B. Galvin, Greg Gagne
컴퓨터 하드웨어는 아주 단순한 저수준의 명령어만을 실행할 수 있습니다. 오직 0, 1로만 이루어진 수 그 명령어가 이루어져 있습니다.
따라서 사용자들이 일반적으로 사용하는 복잡한 응용 프로그램(소프트웨어)은 사실 하드웨어에서 실행되기 위해 번역의 과정을 거칩니다. 높은 수준의 작업을 저수준의 명령어로 번역하는 여러 단계의 과정, 이에 시스템 소프트웨어가 필요합니다.
이러한 소프트웨어들은 계층적으로 구성되는데, 크게 하드웨어와 응용 소프트웨어(프로그램) 사이에는 여러 가지 시스템 소프트웨어가 존재한다고 보면 됩니다.
-
사용자가 컴퓨터를 켜서 사용하는 프로그램들 = 응용 소프트웨어
-
응용 소프트웨어가 하드웨어에서 실행되도록 만드는 소프트웨어 = 시스템 소프트웨어
-
실제 소프트웨어가 실행되는 곳 = 하드웨어
1. 대략적인 구성을 살펴보기
1-1. 하드웨어
컴퓨터의 5대 구성 요소 : 입력, 출력, 메모리, 데이터패스(datapath), 제어 유닛(control unit)
-
입력장치 : 마이크, 키보드 등 컴퓨터에 정보를 공급하는 장치
-
출력장치 : 스피커, 디스플레이 등 연산의 결과를 사용자나 다른 컴퓨터로 보내주는 장치
-
메모리 : 실행 중인 프로그램과 프로그램이 필요로 하는 데이터를 기억
-
메모리(RAM, Random Access Memory)는 어떤 부분을 읽든 같은 시간 소요
-
메모리는 DRAM(Dynamic Random Access Memory) 칩으로 구성
-
메모리는 휘발성 메모리로, 컴퓨터에 연결된 전원이 끊어지면 모두 삭제됨
-
데이터와 프로그램을 저장할 비휘발성 메모리로 ‘디스크’가 추가적으로 사용됨
-
-
프로세서(CPU) : 데이터패스 + 제어유닛, 프로그램의 지시대로 일을 하는 부분으로 연산을 수행하고 입출력장치에 신호를 보내 작동을 지시
-
데이터패스 : CPU 내부 구성 요소 중 제어 유닛을 제외한, 데이터를 연산·저장하는 부분
- 제어 유닛 : 명령이 뜻하는 바에 따라 데이터패스, 메모리, 입출력 장치가 할 일을 지시
- 프로세서의 내부에는 메모리의 버퍼 역할을 하는 작고 빠른 메모리인 ‘캐시 메모리’가 존재
- 캐시 메모리는 SRAM(Static Random Access Memory) 기술을 이용
-
1-2. 시스템 소프트웨어
주요 시스템 소프트웨어 : 운영체제, 컴파일러
- 운영체제(OS, Operating System) : 사용자와 하드웨어 사이의 중재자 역할을 하는 프로그램
- 컴파일러 : C, C++, Java와 같은 상위 수준 언어로 작성된 프로그램을 하드웨어가 실행할 수 있는 명령어로 번역하는 프로그램
1-3. 응용 소프트웨어
게임이나 문서 작성 프로그램과 같이, 흔히 사용자가 사용하는 일반적인 프로그램을 모두 응용 소프트웨어라고 칭할 수 있습니다.
사용자가 설치한 프로그램은 컴퓨터의 전원이 꺼졌다가 다시 켜진 후에도 존재해야하므로, 비휘발성 메모리인 디스크에 저장됩니다. 이 디스크에 존재하는 프로그램을 실행시키면, 프로그램이 동작하기 위해 다양한 연산이 수행됩니다.
이에 관한 자세한 내용은 2. 동작원리를 살펴보기 에서 다루도록 하겠습니다.
컴퓨터의 성능에 대한 이야기
컴퓨터 간 성능을 비교할 때는 기준이 있어야 하며, 보통 속도나 작업 처리량을 그 기준으로 두곤 합니다.
속도가 기준이 되는 경우, 작업이 시작되고 종료되기까지의 시간인 ‘응답시간(실행시간)’이 더 빠른 쪽을 성능이 좋다고 말할 수 있습니다. 여기서 응답시간이란, 컴퓨터가 작업을 완료하기까지 소요한 디스크 및 메모리 접근, 입출력 작업, 운영체제 오버헤드 및 CPU 시간을 모두 포함합니다.
CPU 시간(CPU 실행시간) : 프로세서가 특정 프로그램을 실행하기 위해 소비한 시간
작업 처리량이 기준이 되는 경우, 일정한 시간 동안 처리하는 작업의 양인 ‘처리량(대역폭)’ 이 더 많은 쪽을 성능이 좋다고 말할 수 있습니다. 여기서 처리량이란, 단위 시간당 완료하는 작업의 수를 나타내는 성능 척도입니다.
이 중 일반적인 사용자가 체감하기 좋은 기준인 시간에 대해 조금 더 살펴봅시다. 보통 사용하고자 하는 프로그램이 빠르게 실행되는 경우, 사용자는 컴퓨터의 성능이 좋다고 느낍니다.
프로그램이 빠르게 실행되려면, 프로그램의 CPU 실행시간이 줄어들면 됩니다. 이 CPU 실행시간에 대해 이야기하기 전에, 클럭에 대해 먼저 알아보도록 하겠습니다.
모든 컴퓨터는 클럭(clock)을 이용하여 만들어집니다. 클럭은 하드웨어 이벤트가 발생하는 시점을 결정합니다. 컴퓨터는 전원이 들어오는 시점부터, 시계추가 똑딱똑딱 움직이는 것과 같이 클럭이라는 일종의 신호가 주기적으로 반복됩니다. 그리고 이러한 클럭 간의 시간 간격을 클럭 사이클(clock cycle)이라고 합니다.
클럭을 가지고 CPU의 실행시간을 보면 아래와 같이 나타낼 수 있습니다.
CPU의 실행 시간 = 프로그램의 CPU 클럭 사이클 수 * 한 클럭 사이클에 걸리는 시간
여기서 프로그램의 CPU 클럭 사이클 수란, 프로그램을 실행하기 위해 필요한 클럭 사이클입니다.
프로그램이 실행되기 위해 필요한 CPU 클럭 사이클 수는 프로그램에 따라 정해져 있을테니, 곧 CPU의 실행시간을 줄이기 위해선 한 클럭 사이클에 걸리는 시간이 줄어들어야함을 알 수 있습니다.
CPU의 실행 시간 =
프로그램의 CPU 클럭 사이클 수* 한 클럭 사이클에 걸리는 시간
한 클럭 사이클에 걸리는 시간이 줄어들기 위해선, 클럭 사이클이 빨리 돌아야 합니다. 즉 클럭 속도가 높아야 합니다. 이 클럭 속도가 CPU를 구입할 때 흔히 볼 수 있는 GHz 단위로 표시된 값입니다. 결국 이 값이 높을수록 CPU의 실행 시간이 빨라져, 흔히 말하는 ‘성능이 좋다’라고 느낄 수 있는 것입니다.
추가 정보)
프로그램의 CPU 클럭 사이클 수 = 프로그램을 구성하는 명령어 수 * 명령어당 평균 클럭 사이클 수
명령어당 클럭 사이클 수(clock cycles per instruction, CPI)은 명령어마다 다르므로 위의 식에서는 평균값을 사용하도록 표시합니다. 이 CPI 값은 알고리즘, 프로그래밍 언어, 컴파일러의 영향을 받습니다.
이어서 - 내 마음대로 컴퓨터 구조 정리하기 (2)