컴퓨터 구조론 Lecture 1 - 1

D0Lim·2021년 1월 7일
1

컴퓨터 구조론

목록 보기
1/13
post-thumbnail

시작하기 전

이 글은 필자가 수업시간에 들은 내용과 강의록을 토대로 정리한 글입니다.
수업 필기이다 보니, 오류가 있거나 설명이 부족한 부분이 있을 수 있습니다.
궁금하신 점이나 지적하실 점이 있다면 댓글로 달아주세요! 확인 후 내용을 추가하거나 답변해드리도록 하겠습니다 :)

컴퓨터의 종류

  1. PC
    • 말그대로 개인용 컴퓨터
  2. 서버 컴퓨터
    • 네트워크 기반
  3. 슈퍼 컴퓨터
    • 하이엔드, 과학연산
  4. 임베디드 컴퓨터
    • 저성능, 저전력, 낮은 가격
    • 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)
      • 예를 들어 Cache, RAM, Disk …
    • 입력(Input) & 출력(Output)
  • 입력 -> 메모리 -> 데이터 경로 -> 제어 -> 데이터 경로 -> 메모리 -> 출력

프로세서(CPU)의 내부

  • 데이터 경로(Datapath), 제어(Control), 캐시 메모리(Cache Memory)가 있다.

추상화와 ISA

  • 추상화는 우리로 하여금 복잡성을 이겨내게 한다.

    • 저수준의 자세한 작업들을 감춘다.
    • 따라서 우리는 저수준에서 어떤 일이 일어나는지 알 필요가 없어진다 -> 행복
    • 더 자세한 것(Details), 적용(Implementation), 복잡성(complexity)[HW] ||||| 사용 [SW]
    • ||||| 는 인터페이스(ISA)이다.
  • ISA

    • 하드웨어와 저수준 소프트웨어 사이의 인터페이스이다.
    • 매우 중요한 추상화
    • 예를 들어 퀄컴이 새로운 CPU를 만들었고, 삼성이 그것을 사용하기를 원한다고 하자. 삼성이 알아야 할 것은 그저 ISA이다. CPU에 대한 모든 것을 알 필요는 없다.
    • 만약 동일하게 동작한다면, 동일한 아키텍쳐의 다른 적용도 가능하다. 예를 들어 ISA가 동일하다면, 그 내부에서는 어떠한 적용을 하더라도 상관이 없다.
    • 가끔은 새로운 혁신을 막기도 한다. 만약 퀄컴이 새로운 더 나은 성능의 칩셋을 개발했다고 하더라도, ISA가 변한다면 삼성 등의 기업에서 사용하지 않을 가능성도 있다.

이 수업에서는 MIPS ISA에 초점을 맞추도록 한다.


성능(Performance)에 대한 이해

  • 알고리즘(Algorithm) + 자료구조(Data Structure) + 코딩 스킬(Coding skill)
    • 고수준 언어에서 실행되어야 할 행동(Operation)의 수를 결정
  • 프로그래밍 언어, 컴파일러, 아키텍쳐(Architecture)
    • 고수준 언어 행동(Operation) 당 기계 명령(Machine instruction)의 수를 결정
    • 같은 코드를 사용하더라도, 다른 수의 기계 명령(Machine instruction)을 얻을 수도 있다.
  • 프로세서와 메모리 시스템
    • 얼마나 빨리 기계 명령(Instruction)이 실행 될지를 결정 -> 자명

무어의 법칙, 그리고 성능?

  • 전기 전자 기술은 계속해서 진화하고 있다.
    • 무어의 법칙 : 집적 회로 수용력(IC capacity)는 매 18 - 24 개월 마다 2배 증가한다.
    • 물론 그는 성능이 향상될 것이라고는 말하지 않았다.
    • 그에 따라 여러 반도체의 가격이 감소되었다.

성능의 정의

  • 성능을 정의하는 것은 시간이다.
  • 성능의 명확한 정의는 오직 시간 뿐이다.

0개의 댓글