시작하기 전
이 글은 필자가 수업시간에 들은 내용과 강의록을 토대로 정리한 글입니다.
수업 필기이다 보니, 오류가 있거나 설명이 부족한 부분이 있을 수 있습니다.
궁금하신 점이나 지적하실 점이 있다면 댓글로 달아주세요! 확인 후 내용을 추가하거나 답변해드리도록 하겠습니다 :)
컴퓨터의 종류
- PC
- 서버 컴퓨터
- 슈퍼 컴퓨터
- 임베디드 컴퓨터
- 저성능, 저전력, 낮은 가격
- 8비트나 16비트 프로세서
- 가격, 크기, 성능 3가지 모두 최적화
중요한 것은 컴퓨터의 종류와 관계 없이 이 과목에서 배우는 모든 내용은 모든 종류의 컴퓨터에 적용 가능하다는 것이다.
우리의 프로그램 아래에서는 어떤 일들이 일어날까?
- 어플리케이션 소프트웨어(Application Software)
- 고수준 언어로 작성된다(HLL, high-level language)
- 예를 들어 C, C++, JAVA …
- 시스템 소프트웨어(System Software)
- 컴파일러(Compiler)
- 컴파일러는 사실 그 자체로 소프트웨어이다. 즉, 누군가는 컴파일러를 만들어야 한다.
- 고수준 언어를 기계어로 변환한다.
- 운영체제(OS, Operating System)
- Windows, Linux, macOS, Android, iOS, Unix and so on…
- 소프트웨어를 위한 서비스를 제공한다. 예를 들어 소프트웨어가 운영체제에 어떤 결과를 출력하도록 요청하면 운영체제는 그 작업을 수행한다. 즉, 소프트웨어를 도와주는 역할을 한다고 볼 수 있다.
- 작업을 스케쥴링(Scheduling)하고, 자원을 공유(Share)한다.
- 사실 CPU는 단 하나의 프로그램만을 실행할 수 있다. 다만, OS가 멀티태스킹(Multitasking)을 관리하여 이를 가능하게 한다. 예를 들어, 카카오톡을 10ms동안, 크롬을 10ms동안 실행하는 방식이다.
프로그램 코드의 레벨(Levels)
- 고수준 언어(High-level language)
- 예를 들어 C, C++, Java …
- 각각 다른 언어들은 각각 다른 목적을 위해 디자인되어 있다.
- 생산성(Productivity)과 이식성(Portability)을 제공한다.
- 생산성 : 조금 더 자연어에 가까운 언어로 생각하고 프로그램을 작성할 수 있다.
- 이식성 : 컴퓨터에 대하여 독립적이다.
한편, 이 책에서 컴퓨터(Computer) == 프로세서(Processor) == CPU
이다.
-
기계어(Machine Language)
- 하드웨어(Hardware) 친화적인 표현이다.
- 이진 숫자(Binary digit)들로 이루어져 있다.
- 예를 들어 110101001010111000001010101010 …
- 인코딩된 명령(Instruction)과 데이터(Data)이다.
- 읽고 디버깅 하기에 너무 불편하다. 그래서 ...
-
어셈블리 언어(Assembly language)
- 명령(Instruction)의 문자적 표현이다.
-
고수준 언어(HLL, 예를 들어 C) -> (컴파일러) -> 어셈블리 언어 -> (어셈블러) -> 기계어 -> (실행) -> 프로세서
- 만약 MIPS 프로세서라면
- 우리는 MIPS 컴파일러와 MIPS 어셈블러가 필요하다.
- 만약 Intel 프로세서라면
- 우리는 Intel 컴파일러와 Intel 어셈블러가 필요하다.
- 만약 AMD 프로세서라면
- 우리는 AMD 컴파일러와 AMD 어셈블러가 필요하다.
- 모든 각각 다른 프로세서는 각각 다른 컴파일러, 어셈블러, 어셈블리 언어 등을 사용한다.
-
자바(Java)의 경우 약간 다른 방식을 취한다.
- 고수준 언어(Java) -> (자바 컴파일러) -> 자바 기계어(Java Machine Code) -> (JVM에서 실행)
- JVM은 MIPS나 Intel과 같은 CPU들을 위해서 미리 컴파일된 가상의 가짜 컴퓨터이다.
- 고수준 언어에서 자바 컴파일러, 그리고 자바 기계어로의 과정에 사실 많은 것이 생략돼 있다.
컴퓨터의 구성
- 5가지 주된 구성
- 데이터 경로(Datapath) & 제어(Control) -> 프로세서(Processor)
- 메모리(Memory)
- 입력(Input) & 출력(Output)
- 입력 -> 메모리 -> 데이터 경로 -> 제어 -> 데이터 경로 -> 메모리 -> 출력
프로세서(CPU)의 내부
- 데이터 경로(Datapath), 제어(Control), 캐시 메모리(Cache Memory)가 있다.
추상화와 ISA
이 수업에서는 MIPS ISA에 초점을 맞추도록 한다.
- 알고리즘(Algorithm) + 자료구조(Data Structure) + 코딩 스킬(Coding skill)
- 고수준 언어에서 실행되어야 할 행동(Operation)의 수를 결정
- 프로그래밍 언어, 컴파일러, 아키텍쳐(Architecture)
- 고수준 언어 행동(Operation) 당 기계 명령(Machine instruction)의 수를 결정
- 같은 코드를 사용하더라도, 다른 수의 기계 명령(Machine instruction)을 얻을 수도 있다.
- 프로세서와 메모리 시스템
- 얼마나 빨리 기계 명령(Instruction)이 실행 될지를 결정 -> 자명
무어의 법칙, 그리고 성능?
- 전기 전자 기술은 계속해서 진화하고 있다.
- 무어의 법칙 : 집적 회로 수용력(IC capacity)는 매 18 - 24 개월 마다 2배 증가한다.
- 물론 그는 성능이 향상될 것이라고는 말하지 않았다.
- 그에 따라 여러 반도체의 가격이 감소되었다.
성능의 정의
- 성능을 정의하는 것은 시간이다.
- 성능의 명확한 정의는 오직 시간 뿐이다.