Computer >> 컴퓨터 >  >> 시스템 >> Mac

CPU 내부:트랜지스터가 명령어 세트 아키텍처를 구축하는 방법

CPU 내부:트랜지스터가 명령어 세트 아키텍처를 구축하는 방법

CPU(Central Process Unit)는 컴퓨터의 두뇌이자 소프트웨어와 하드웨어를 연결하는 핵심 장치입니다. 하드웨어에서 소프트웨어를 작동하는 것이 가능해졌습니다.

그러나 이것이 어떻게 자세하게 작동합니까? 프로그램을 특정 컴퓨터 하드웨어에 어떻게 연결할 수 있나요?

이 글은 CPU가 어떻게 작동하는지 깊이 있게 설명함으로써 이러한 연결을 이해하도록 돕는 것을 목표로 합니다. 이 주제는 대학에서 컴퓨터 하드웨어 설계를 전공한 사람들에게만 친숙한 주제입니다.

종종, 많은 컴퓨터 공학 졸업생들은 고급 디지털 논리 수업을 전혀 들어본 적이 없습니다. 따라서 경험이 풍부한 프로그래머라도 CPU가 실제로 정보를 처리하는 방법을 이해하지 못할 수 있습니다.

트랜지스터로 논리 게이트를 설계하거나 논리 게이트로 CPU 구성 요소를 설계하지는 않지만 프로그래밍 언어로 작성된 프로그램에 의해 생성된 데이터를 CPU가 처리하는 방법을 이해하는 데 필요한 핵심 개념을 다룰 것입니다.

우리는 다음을 보게 될 것입니다:

  • 유추:CPU를 작동시키는 요소 소개
  • 메모리 허브:RAM 및 ROM 이해
  • 데이터의 길:CPU 데이터 경로 탐색
  • 트래픽 컨트롤러:CPU에서 상태 머신의 역할
  • 일상 루틴:가져오기-실행 주기 설명
  • 규칙집:명령어 세트 아키텍처(ISA) 디코딩
  • 프로그래밍 언어에서 기계어까지
  • 도시 과제:CPU 문제 해결
  • 결론:더 나은 제어 장치 및 데이터 부분

Intel 8008을 참고 자료로 사용하겠습니다.

유추:CPU를 작동시키는 요소 소개

컴퓨터가 어떻게 작동하는지 깊이 이해하기 위해 실제 시나리오로 도시를 상상해 봅시다. 컴퓨터 요소를 이 도시의 일부와 비교해보겠습니다.

이렇게 하면 다양한 CPU 부품과 해당 부품이 중요한 이유를 더 명확하게 볼 수 있습니다. 그런 다음 각 구성 요소를 자세히 살펴보겠습니다.

메모리 허브:RAM 및 ROM 이해

RAM(Random Access Memory)은 도시 공공 도서관과 같습니다. 사람들이 필요에 따라 빌리고 반납할 수 있도록 책과 정보를 저장합니다.

컴퓨터에서 RAM은 CPU가 데이터를 처리하는 데 필요한 컴퓨터 메모리로부터 데이터와 명령을 로드합니다.

ROM(읽기 전용 메모리)은 도시의 역사 기록 보관소와 같습니다. 절대 변하지 않고 대중에게 빌릴 수 없는 기록만을 저장합니다.

데이터의 길:CPU 데이터 경로 탐색

CPU 데이터 경로는 도시의 도로 네트워크입니다. CPU 데이터 경로의 버스와 레지스터는 도시의 도로망처럼 작동합니다.

도로가 자동차와 사람의 이동을 돕는 것처럼, CPU 데이터 경로는 CPU에서 데이터가 효율적인 방식으로 이동하도록 보장합니다.

트래픽 컨트롤러:CPU에서 상태 머신의 역할

상태 머신은 교통 통제 시스템 역할을 합니다.

교통 통제 시스템은 차량의 흐름을 관리하고, 상태 머신은 CPU에 제공된 명령에 따라 데이터의 흐름을 관리합니다.

일상 루틴:가져오기-실행 주기 설명

가져오기-실행 주기는 도시 거주자의 일일 통근입니다.

매일 사람들은 어디로 갈지 결정하고, 그곳으로 여행하고, 업무를 수행하고 집으로 돌아갑니다. 이 과정은 항상 반복됩니다.

같은 방식으로 CPU는 명령어를 가져와서 디코딩하고 반복적인 주기로 실행합니다.

규칙집:명령어 세트 아키텍처(ISA) 디코딩

명령어 세트 아키텍처는 도시 교통법과 같습니다.

도시 교통법은 사람의 교통과 관련하여 도시에서 할 수 있는 합법적인 일을 보여줍니다.

명령어 세트 아키텍처는 CPU가 실행할 수 있는 규칙 및 명령어 세트입니다.

메모리 허브:RAM 및 ROM 이해

CPU 내부:트랜지스터가 명령어 세트 아키텍처를 구축하는 방법 발렌타인 Tanasovich의 사진:https://www.pexels.com/photo/black-and-gray-computer-motherboard-2588757/

RAM은 Random Access Memory의 약자로 데이터를 읽고 쓰는 데 사용할 수 있습니다.

CPU는 긴 대기 시간을 피하기 위해 먼저 컴퓨터 메모리에서 RAM으로 데이터를 가져옵니다.

그런 다음 RAM의 데이터를 사용하여 명령을 완료합니다.

메모리는 휘발성이기 때문에 컴퓨터와 많은 전자 장치에 사용됩니다. 즉, 컴퓨터가 켜져 있는 동안에만 데이터가 존재하므로 장치가 작동하는 동안 임시 저장하는 데 이상적입니다.

ROM은 읽기 전용 메모리를 나타냅니다. 거기에는 컴퓨터 제조 과정에서 추가된 데이터만 존재합니다.

이는 장치, BIOS 및 소형 임베디드 시스템용 펌웨어에 널리 사용됩니다.

ROM은 비휘발성 메모리이기 때문이다. 즉, 기기의 전원이 꺼져도 메모리에 남아 있으므로 영구적인 데이터 저장에 매우 중요합니다.

데이터의 길:CPU 데이터 경로 탐색

CPU 내부:트랜지스터가 명령어 세트 아키텍처를 구축하는 방법 Rogeer Marques의 사진:https://www.pexels.com/photo/close-up-shot-of-a-chip-processor-11272008/

CPU 데이터 경로는 다음과 같이 서로 작동하는 많은 구성 요소로 구성된 복잡한 디지털 회로입니다.

  • 산술 논리 장치(ALU): CPU 데이터 부분 내에서 산술 및 논리 연산을 수행합니다.
  • 등록: RAM에서 검색된 임시 데이터를 위한 작고 빠른 저장 위치입니다.
  • 버스: 데이터, 제어 및 주소 버스는 정보를 전송하기 위해 CPU 데이터 경로 내부에서 사용되는 전선입니다.

Intel 8008 이후 CPU가 많이 바뀌었지만, 이는 여전히 모든 CPU의 기반이 되는 구성 요소 중 일부입니다.

덕분에 데이터 흐름을 허용하지만 실제 흐름을 제어할 수는 없습니다. 이는 Intel 8008에서 상태 머신으로 생성된 CPU의 제어 장치가 수행하는 작업입니다.

트래픽 컨트롤러:CPU에서 상태 머신의 역할

상태 머신은 작업을 수행하기 위해 여러 상태 사이를 전환하는 시스템입니다.

이는 여러 상태와 전환으로 구성됩니다. 명령을 처리하는 데 필요한 작업 순서를 관리하는 구조와 효과적인 방법으로 인해 Intel 8008에서 제어 장치를 만드는 데 사용되었습니다.

각 상태는 특정 조립 명령을 처리하기 위해 하나 이상의 CPU 구성 요소를 활성화할 수 있습니다.

이런 방식으로 특정 CPU 데이터 경로 부분이 명령 완료를 위해 활성화됩니다.

또한 이러한 상태 머신 덕분에 CPU는 완전해지며 가져오기-실행 주기라는 연속 루프에서 사용자가 원하는 모든 명령을 수행할 수 있습니다.

일상 루틴:가져오기-실행 주기 설명

CPU의 상태 머신은 주어진 명령을 수행하기 위해 CPU 데이터 경로가 함께 작동하는 방식을 제어합니다.

요즘 모든 컴퓨터는 초당 수백만 개의 명령을 받습니다. 이런 방식으로 상태 머신은 명령을 받고 실행하는 루프 역할을 합니다.

이 프로세스는 CPU가 명령을 검색하고 실행하는 가져오기-실행 주기로 알려져 있습니다.

  • 가져오기: CPU는 메모리에서 명령어를 가져옵니다.
  • 디코드: 가져온 명령은 디코딩되어 필요한 조치를 결정합니다.
  • 실행: 디코딩된 명령은 적절한 CPU 구성 요소를 사용하여 실행됩니다.
  • 후기입: 실행 결과는 메모리나 레지스터에 다시 기록됩니다.

가져오기 단계에서 제어 장치는 RAM에 다음 명령을 CPU에 제공하라고 지시합니다.

디코드 단계에서는 CPU가 명령어를 해석하고, 실행 단계에서는 연산을 수행합니다. 그 후 다시 쓰기 단계에서는 결과가 올바르게 저장되었는지 확인합니다.

이 주기는 PC가 켜져 있는 동안 계속됩니다. 이런 방식으로 최신 프로세서에서는 초당 수십억 개의 명령을 처리합니다.

그런데 키보드나 마우스의 데이터는 어떻습니까?

이 데이터는 RAM에서 제공되지 않지만 인터럽트라는 메커니즘을 통해 처리됩니다. CPU가 명령을 실행하는 동안 주변 장치에서 데이터가 들어오는 시기를 감지할 수 있습니다.

이런 일이 발생하면 CPU는 현재 작업을 중지하고 주변 장치의 명령을 우선적으로 처리합니다. 그 후, CPU는 이전 작업을 재개합니다.

인터럽트를 관리하는 방법에는 여러 가지가 있으며 가장 널리 사용되는 방법은 다음과 같습니다.

  1. 폴링된 인터럽트 :CPU는 인터럽트가 발생했는지 주기적으로 확인합니다.
  2. 벡터 인터럽트 :인터럽트 장치는 CPU를 적절한 인터럽트 서비스 루틴으로 지시합니다.
  3. 우선순위가 지정된 인터럽트 :인터럽트에는 다양한 우선순위 레벨이 할당되어 중요한 작업이 먼저 처리됩니다.

이러한 메커니즘을 통해 CPU는 주변 장치와 상호 작용하면서 성능을 유지합니다.

규칙집:명령어 세트 아키텍처(ISA) 디코딩

제어 장치, 완전한 CPU 및 RAM을 사용하면 많은 명령을 수행할 수 있습니다.

하지만 주어진 CPU에서 어떤 명령을 수행할 수 있습니까? 그리고 몇 명입니까? 이것이 바로 ISA(명령어 세트 아키텍처)가 해결하는 문제입니다.

ISA는 특정 CPU가 실행할 수 있는 일련의 명령을 정의합니다. 이는 프로그래머가 프로세서 내부의 모든 디지털 로직 하드웨어를 이해하지 않고도 프로세서가 할 수 있는 것과 할 수 없는 것을 이해할 수 있게 해줍니다.

이런 방식으로 소프트웨어와 하드웨어 사이의 인터페이스 역할을 합니다.

ISA의 주요 측면:

  • 명령 유형: 산술, 논리, 제어 및 데이터 전송 명령이 포함됩니다.
  • 주소 지정 모드: 명령어의 피연산자를 지정하는 방법.
  • 등록: 명령어에 의해 사용 가능한 레지스터 세트.

일반적인 ISA:

  • x86: 데스크탑 및 서버 프로세서에 널리 사용됩니다.
  • ARM: 전력 효율성으로 인해 모바일 및 임베디드 장치에서 가장 많이 사용됩니다.
  • RISC-V: 다양한 응용 분야에 맞게 설계된 개방형 표준 ISA입니다.

각 CPU에는 종종 자체 버전의 명령어 세트 아키텍처가 있습니다. 그리고 명령어 세트 아키텍처는 어셈블리 프로그래밍 언어로 정의되는 경우가 많습니다.

이것이 어셈블리 프로그래밍 언어의 버전이 너무 많은 이유입니다.

각 CPU에는 고유한 하드웨어 사양이 있으므로 각 CPU에는 다른 CPU와 유사한 구성 요소가 있으므로 유사한 어셈블리 프로그래밍 언어가 연관됩니다.

ISA의 선택은 CPU의 설계, 성능, 소프트웨어와의 호환성에 영향을 미칩니다.

예를 들어, x86의 복잡성은 강력한 데스크톱 애플리케이션을 가능하게 하는 반면, ARM의 단순성은 에너지 효율적인 모바일 장치를 선호합니다.

프로그래밍 언어에서 기계 코드까지

CPU 내부:트랜지스터가 명령어 세트 아키텍처를 구축하는 방법 사진:Luis Gomes:https://www.pexels.com/photo/close-up-photo-of-programming-of-codes-546819/

각 프로세서에는 고유한 어셈블리 언어가 있지만 어셈블리에서 코드를 관리하고 큰 프로그램을 만들기 위해 어셈블리에서 코드를 작성하는 것은 복잡할 수 있습니다.

이는 매우 복잡하며, 더 빠르고 쉬운 방법으로 프로그램 개발을 관리하고 실제로 개발하는 대신 사항과 세부 사항을 수정하는 데 시간을 낭비하게 될 수 있습니다.

이 문제를 해결하기 위해 많은 프로그래밍 언어가 어셈블리로 만들어졌습니다. 우리는 프로그래밍 언어로 코드를 작성한 다음 어셈블리로 변환합니다.

이렇게 하면 세부적인 사항에 시간을 쏟는 대신 시스템 개발, 알고리즘 설계 등 더 중요한 일에 집중할 수 있습니다.

이는 대부분의 프로그래밍 언어가 코드를 어셈블리로 변환하는 프로세스입니다.

  1. 컴파일러나 인터프리터를 통해 코드를 어셈블리 코드로 변환합니다.
  2. 그러면 어셈블리 코드가 원시 기계 코드로 변환되어 CPU에 의해 실행됩니다.
  3. CPU 상태 머신의 특정 루프가 완료되었습니다.
  4. 이후 CPU는 다음 명령어를 가져와 실행합니다.

이를 수행하는 프로그래밍 언어의 두 가지 예를 살펴보겠습니다!

C 프로그래밍 언어

C 프로그래밍 언어는 1970년대 초반에 어셈블리로 만들어졌습니다. 하드웨어 조작도 허용하는 효율적인 시스템 수준 프로그래밍을 위한 상위 수준 언어를 제공하기 위해 만들어졌습니다.

컴파일러를 사용하면 C 코드가 어셈블리로 변환된 후 전체 CPU에서 처리됩니다.

이러한 변환 덕분에 C 프로그래밍 언어로 프로그램을 작성하면 다음과 같은 많은 문제를 보다 효율적인 방식으로 해결할 수 있습니다.

  • 메모리 관리 오류
  • 버퍼 오버플로
  • 수동 최적화 문제

요즘에는 간단한 작업에도 C 컴파일러에서 변환된 어셈블리 코드가 사람이 어셈블리 코드를 작성하는 것보다 훨씬 더 효율적이고 안정적입니다.

C 컴파일러에 대해 더 자세히 알고 싶다면 다음을 확인해 보세요:

파이썬 프로그래밍 언어

Python 프로그래밍 언어는 1980년대 후반에 C에서 만들어졌습니다.

그 목표는 가독성과 단순성을 강조하여 신속한 애플리케이션 개발을 가능하게 하는 사용자 친화적인 고급 프로그래밍 언어를 제공하는 것이었습니다.

Python에서는 인터프리터가 Python 코드를 한 줄씩 바이트코드로 변환합니다.

그리고 이 바이트코드는 CPU에서 기계어 코드로 변환되어 가져오기-실행 주기로 처리됩니다.

이렇게 하면 사람들이 더 쉬운 방법으로 프로그래밍하고 다음과 같은 더 큰 프로그램에 집중할 수 있습니다.

  • 인공지능 모델
  • 웹 앱
  • 데이터 분석
  • 과학 컴퓨팅

그러나 모든 프로그래밍 언어에서 CPU의 문제점은 데이터를 순차적으로 처리한다는 것입니다.

도시 과제:CPU 문제 해결

CPU 내부:트랜지스터가 명령어 세트 아키텍처를 구축하는 방법 Peng LIU의 사진:https://www.pexels.com/photo/timelapse-photography-of-vehicle-on-concrete-road-near-in-high-rise-building-during-nighttime-169677/

기존의 1코어 CPU는 데이터를 순차적으로 처리합니다. 처리할 지침이 많은 경우 이는 제한이 됩니다.

이를 해결하기 위해 GPU(그래픽 처리 장치)가 등장했습니다. GPU 덕분에 명령을 병렬로 처리할 수 있어 컴퓨팅 시간이 크게 단축됩니다.

이러한 병렬 처리 기능을 사용하면 다양한 애플리케이션에서 훨씬 더 빠른 계산과 향상된 효율성을 달성할 수 있습니다.

결론:더 나은 제어 장치 및 데이터 부품

CPU 내부:트랜지스터가 명령어 세트 아키텍처를 구축하는 방법 사진:Miguel Á. 파드리냐:https://www.pexels.com/photo/green-circuit-board-343457/

최신 CPU는 멀티코어일 뿐만 아니라 제어 장치와 데이터 경로의 발전도 프로세서 성능을 향상시키는 데 중요한 역할을 합니다.

제어 장치는 종종 마이크로프로그래밍이나 배선된 제어 장치를 사용하여 설계됩니다.

마이크로프로그래밍은 제어 로직에 더 큰 유연성과 더 쉬운 업데이트를 제공하는 반면, 하드와이어 제어 장치는 제어 신호를 직접 구현하여 더 빠른 성능을 제공합니다.

또 다른 중요한 발전은 논리 게이트의 트랜지스터를 위한 새로운 재료를 탐구한 것입니다.

연구자들은 실리콘에만 의존하는 대신 더 빠르고 효율적인 프로세서를 만들기 위해 대체 재료를 조사하고 있습니다.

기술이 계속 발전함에 따라 이러한 기본 개념을 이해하는 것은 해당 분야의 열성팬과 전문가 모두에게 필수적입니다.

이러한 발전을 따라가면 CPU 설계와 기능의 지속적인 혁신과 개선이 보장됩니다.

무료로 코딩을 배우세요. freeCodeCamp의 오픈 소스 커리큘럼은 40,000명 이상의 사람들이 개발자로 취업하는 데 도움을 주었습니다. 시작하세요