• 같은 코드를 다른 컴퓨터에서 실행하였을 때, 코드의 실행과 결과에 이상이 생길 수 있다!

  • 이 때 컴퓨터의 기본적인 구조를 알고있으면 트러블 슈팅에 매우 도움이 된다

컴퓨터의 이해

  • 컴퓨터는 명령어를 처리하는 기계라고 단순화할 수 있음

  • 컴퓨터가 이해하고 처리할 수 있는 정보에는 주로 데이터명령어가 포함

  • 명령어컴퓨터를 실제로 작동시키는 정보이며,
    데이터는 명령어에 의해 조작되고 사용되는 재료라고 볼 수 있음

  • 위의 정보 중 중요한건 정적인 데이터보다 동적인 명령어임!

  • 대표적인 명령어의 종류로는 프로그래밍 언어가 있음

image

Main Memory (주 기억 장치)

image

  • 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품

  • 저장된 값에 빠르고 효율적으로 접근하기 위해 주소(address)라는 개념이 사용됨

Secondary Memory (보조 기억 장치)

  • 메모리의 약점을 보완하여 전원이 꺼져도 데이터를 유지할 수 있게 해주는 역할

  • HDD(Hard Disk), SSD, DVD 와 같은 장치가 이에 해당

I/O Devices(입출력 장치)

  • 외부에 연결되어 컴퓨터 내부와 정보를 교환하는 장치

  • 입출력 장치로는 마이크, 스피커, 프린터, 마우스, 키보드 등이 해당됨

CPU (중앙 처리 장치)

  • 메모리에 저장된 명령어를 읽어들이고, 읽어들인 명령어를 해석하고, 실행하는 부품

  • 내부 구성 요소 중 중요한 세 가지 산술 논리 연산 장치(ALU: Arithmetic Logic Unit), 레지스터(register), 제어 장치(Control Unit)가 있음

  • ALU, 제어 장치, 레지스터와 같은 내부 구성 요소를 통해 복잡한 연산을 수행

  • 명령어 사이클과 인터럽트 메커니즘을 활용하여 프로그램을 효율적으로 처리

  • 멀티코어 CPU는 여러 개의 코어를 포함하여 동시에 여러 명령어를 처리함

  • 현대의 CPU는 멀티코어와 멀티스레드 기술을 통해 성능을 지속적으로 향상시키고 있음

Control Unit(제어 장치)

  • 제어 신호(control signals)라는 전기 신호를 내보내는데 이는 명령어를 해석하는 장치

  • 명령어를 해석하고 제어 신호를 발생시켜 컴퓨터 부품들을 관리

Clock Sign

  • 클럭(clock)컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위

  • 클럭의 “똑딱-똑딱” 주기에 맞춰 한 레지스터에서 다른 레지스터로 데이터가 이동되거나, ALU에서 연산이 수행되거나, CPU가 메모리에 저장된 명령어를 읽어들임

  • 그러나 컴퓨터의 모든 부품이 한 클럭마다 작동하진 않음, 컴퓨터 부품들은 클럭이라는 박자에 맞춰 작동할 뿐 한 박자마다 작동하는 것이 아님

  • 하나의 명령어가 여러 클럭에 걸쳐 실행될 수도 있음

작업 제어

  • CPU가 해석해야 할 명령어는 ‘명령어 레지스터’라고 불리는 특별한 레지스터에 저장됨

  • 명령어 레지스터에서 명령어를 받아들여 해석한 후, 제어 신호를 발생시켜 컴퓨터 부품들에게 수행할 작업을 지시

부품 제어

  • 제어 장치는 이러한 플래그 값을 고려하여 컴퓨터 부품들을 적절히 제어함

Register

  • 프로그램 실행에 필요한 값( 데이터와 명령어 )들을 일시적으로 저장

  • 매우 빠른 데이터 접근 속도로 데이터의 임시 보관소 역할을 수행함

  • CPU의 구조마다 조금씩 달라질 수 있으나 대표적으로 사용되는 레지스터 역할이 있음

  1. 프로그램 카운터 (PC; Program Counter)

    • 메모리에서 가져올 명령어의 주소, 즉 읽어들일 명령어의 주소를 저장

    • 일부 CPU에서는 이를 ‘명령어 포인터 (Instruction Pointer)’라고 부르기도 함

  2. 명령어 레지스터 (Instruction Register)

    • 방금 메모리에서 읽어들인, 해석할 명령어를 저장하는 레지스터

    • 제어 장치는 이 레지스터의 명령어를 받아들이고 해석한 뒤 제어 신호를 내보냄

  3. 메모리 주소 레지스터 (MAR; Memory Address Register)

    • 메모리의 주소를 저장하는 레지스터

    • CPU가 읽어들이고자 하는 주소 값을 주소 버스로 보낼 때 이 레지스터를 사용

  4. 메모리 버퍼 레지스터 (MBR; Memory Buffer Register)

    • 메모리와 주고받을 값(데이터와 명령어)을 저장하는 레지스터

    • 메모리에 쓰고자 하는 값이나 메모리로부터 전달받은 값은 이 레지스터를 거침

ALU(산술 논리 연산 장치)

  • 컴퓨터 내부에서 수행되는 대부분의 계산을 담당

  • 피연산자와 연산을 받아 다양한 연산을 수행하고, 결과와 함께 플래그를 생성함
    ( 플래그 : ALU는 결과 값뿐만 아니라 연산 결과에 대한 추가적인 정보를 내보내야 할 때 보내는 값)

image

명령어 사이클과 인터럽트

  • 명령어 처리 과정에서 일정한 흐름이 있으며, 이 흐름을 반복해 명령어를 처리해감

  • 이 일련의 흐름은 명령어 가져오기 -> 해석 및 실행 으로 되어있으며 이를 명령어 사이클이라 함

  • CPU의 명령어 사이클이 끊어지는 상황과 이를 대응해주는 매커니즘인터럽트라 함

명령어 사이클

image

  1. 인출 사이클(fetch cycle)

    • 명령어를 메모리에서 CPU로 가져오는 단계
  2. 실행 사이클(execution cycle)

    • 명령어를 인출한 후에는 이제 명령어를 실행하는 단계

    • 제어 장치가 명령어 레지스터에 담긴 값을 해석 후 필요한 제어 신호를 발생시키는 단계

  3. 간접 사이클(indirect cycle)

    • 명령어를 인출하여 CPU로 가져왔다 하더라도 곧바로 실행할 수 없는 경우

    • 메모리 접근 등 추가적인 작업을 하는 사이클

인터럽트

  • 컴퓨터 시스템에서 CPU의 현재 작업을 일시 중단시키는 신호

  • 긴급하거나 우선적으로 처리해야 할 상황을 알리는 메커니즘

  • 인터럽트는 하드웨어/소프트웨어 로 구분될 수 있으며 이를 통해 CPU는 더욱 효율적으로 실행됨

  • 동기 인터럽트(Synchronous Interrupt)(=소프트웨어)

    • 프로그램 실행 중 예상치 못한 상황 발생

    • 주로 ‘예외(Exception)’로 불림

    • 예: 프로그래밍 오류, 잘못된 메모리 접근

  • 비동기 인터럽트 (Asynchronous Interrupt)(=하드웨어)

    • 입출력 장치에 의해 발생

    • 예: 프린터 작업 완료 알림, 키보드/마우스 입력, 타이머 만료

  • 인터럽트 서비스 루틴 (ISR)

    • CPU가 인터럽트 요청 시 실행하는 프로그램

    • ‘인터럽트 핸들러’라고도 함

    • 다양한 인터럽트 유형에 대응하는 처리 방법 정의

  • 인터럽트 벡터

    • 각 인터럽트에 대응하는 서비스 루틴의 시작 주소 정보

    • CPU가 특정 인터럽트 식별 및 처리하는데 사용함

  • 처리 과정

    1. 입출력 장치는 CPU에 인터럽트 요청 신호를 보냄

    2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전에 항상 인터럽트 여부를 확인

    3. CPU는 인터럽트 요청을 확인하고, 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인

    4. 인터럽트를 받아들일 수 있다면, CPU는 현재의 작업을 백업

    5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행

    6. 인터럽트 서비스 루틴 실행이 끝나면, CPU는 백업해둔 작업을 복구하여 실행을 재개함

성능

  • 상용 CPU의 성능 지표에 영향이 있는 개념들에 대해 간단히 요약!

클럭

  • CPU와 컴퓨터 부품의 동작 주기를 결정하는 신호

  • 속도 단위는 헤르츠(Hz)로 측정

  • 클럭 속도 ↑ → CPU 성능 향상 ( 그러나 무작정 속도를 높이면 발열 문제 발생 )

  • 성능 향상에 한계 존재

코어

  • CPU 내 명령어를 실행하는 독립적인 처리 장치

  • 종류

    • 싱글 코어: 1개의 처리 장치

    • 멀티 코어: 여러 개의 처리 장치

  • 코어 수 ↑ ≠ 성능 비례 증가

  • 작업 분배의 효율성이 중요

스레드

  • 하드웨어적 스레드

    • 하나의 코어가 동시에 처리하는 명령어 단위

    • 예: 2코어 4스레드 CPU = 한 번에 4개 명령어 처리하는 코어가 2개인 CPU

  • 소프트웨어적 스레드

    • 프로그램 내 독립적으로 실행되는 작업 단위

    • 예: 워드 프로세서의 동시 실행 기능