본문 바로가기

개발기술/Computer Science

CS공부 - 컴퓨터구조

1. 컴퓨터 시스템

  • - 컴퓨터 시스템은 하드웨어와 소프트웨어로 구성되어 있다. 하드웨어는 CPU, 주기억장치(RAM,ROM), 보조기억장치, 네트워크로 구성되어있다.
  • - 폰노이만구조 : 메모리에 프로그램(코드)와 데이터를 저장하고 CPU에서 이를 순차적으로 연산해 나가는 구조. 물리적 회로의 변경없이 메모리 내의 소프트웨어만 교체하면 새로운 연산을 가능하도록 함.

 

2. 컴퓨터 3대 구성요소

  •  CPU(Centeral Process Unit) : 명령어를 해석하고 실행하는 부품으로 계산을 위한 산술논리연산장치(ALU), 부품들을 제어하고 명령어를 해석하는 제어장치(Control Unit), 임시저장장치 레지스터로 구성되어있다.
  • 메모리 : 코드와 데이터를 저장하는 장치
  • IO Devices : 컴퓨터 내외부 간 정보를 교환하는 입력장치와 출력장치
  • 이들은 시스템 버스로 연결되어 있다.

 

3. 회로에서 가산기까지

- 컴퓨터는 전기를 끄고 킨다(비트)만으로 동작한다.  비트는 2진로 숫자를 표현할 수 있으며, 특정 숫자들은 문자나 명령을 표현할 수 있다.

- 회로의 연결상태로 AND연산(직렬스위치), OR연산(병렬스위치), NOT연산(반대스위치)을 만들수 있고 이를 조합하여 NAND연산(NOT+AND), NOR연산(NOT+OR) 만들수있음.

- OR연산과 NAND연산을 AND연산으로 연결하면 XOR연산을 도출할 수 있음. 두 입력비트의 XOR연산결과를 결과비트에, AND연산결과를 CARRY비트에 저장하면 반가산기를 만들 수 있음

- 반가산기 두개를 연결하여 세가지 입력비트(그 중 하나는 CARRY-IN으로 한자리 아래자리의 반가산 결과임)를 계산하여 전가산기를 만들어 더하기 연산을 자유자재로 할 수 있게 완성함.

- 전가산기 8개를 연결하여 8비트 연산기를 만들고, 8비트 연산기 2개를 연결하여 16비트 연산기를 만들어 ... 64비트 연산기까지 만들 수 있음. 

 

4. 회로에서 메모리까지

- NOR연산을 두개 연결하면, Input스위치와 Clear스위치를 통해서 Input스위치를 연결하면 회로가 On된 상태로 유지하고 Clear스위치를 연결하면 회로가 Off되어 Input스위치의 입력사실을 기억하는 메모리를 만들어 낼 수 있다.

- NOR연산을 두개 연결하여 RS FlipFlop회로를 만들어 Set과 Reset버튼으로 메모리를 만들수 있다. 

- NOT스위치를 통해서 일정 주기단위로 전류가 흐르는 Oscilitator를 만들수 있고 이것이 데이터를 입력시키는 Write/Clock신호로 사용된다

- RS FlipFLop에 Holdthatbit로 Input과 Clear을 동시에 작동하지 못하게하고, Clock신호에따라 데이터를 입력하게 하는 메모리 최소단위를 만들고 이를 1bit latch라고 한다.

- 1bit latch를 8개 연결시켜 8bit latch를 만들수 있으며, 3bit 스위치로 8bit latch의 특정 위치 latch를 선택하여 읽을 수있는 8 to 1 Selector와 특정위치 latch를 쓸 수 있는 3to8 decoder을 만들 수 있다. 3bit 스위치를 메모리 주소라고 한다.

- 8bit latch회로를 8x1 RAM이라고 하며 RAM 여러개를 연결하여 m*n RAM으로 확장할  수 있다.

 

5. 컴퓨터구조에서 프로그램이 실행되기까지

- 8bit 가산기를 8bit latch에 연결하면 기초적인 CPU가 완성이된다. 연산의 결과 값을 Clear하기전에 결과값을 임시저장해야한다.

- 연산의 결과는 CPU와 메모리 계층구조상 가장 가까운 레지스터에 저장을 한다

-- 메모리 계층구조 : 레지스터(1사이클) - L1캐쉬(2사이클) - L2캐쉬(10사이클) - L3캐쉬(40사이클) - 메모리(200사이클) - SSD(10us) - HHD(10ms) *SSD와 HHD는 단위자체가 다르므로, 가급적 보조저장장치에 접근하지 않아야 효과적인 개발- 데이터를 불러오기, 데이터를 더하기, 데이터를 삭제하기, 데이터를 입력하기 등 CPU의 특정회로들을 Instruction Set이라는 명령어와 Mapping시켜놓고 이 명령어를 사용하여 연산을 수행한다.

6. 컴퓨터 동작과 프로그램의 실행

 

CPU의 기본구조

  • 코어(프로세서) : CPU 내부에서 명령어를 실행하는 단위로 ALU, 제어장치, 레지스터 세트로 구성
  • 쓰레드 : 하나의 코어가 동시에 처리하는 명령어 단위
  • 멀티스레드 : 하나의 코어당 두개의 스레드를 처리가능한 코어. 하나의 코어에  두개의 레지스터 세트(PC, SP 등)가 연산장치를 공유하는 구조이며, 연산장치가 레지스터 세트를 오가며 두가지 명령어를 동시에 처리함.
    • 프로그램의 스레드와는 다른 개념으로, 프로세스 내 스택을 갖은 프로그램의 실행흐름을 소프트웨어적 스레드라고한다.
  • 레지스터 세트
    • PC(Program Counter) : 다음실행할 명령어 주소를 가리키는 레지스터, Clock신호에 따라서 1씩 증가한다.
    • SP(Stack Pointer) : 스택영역의 최상단의 주소를 가리키는 레지스터 (가장 최근에 불러온 함수의 데이터가 저장됨)
    • IR(Instruction Register) : 가장 최근에  인출한 명령어를 저장하는 레지스터
    • 누산기(ACC, Accumlator) : 데이터 일시 보관 레지스터
    • MAR(Memory Address Register) : CPU가 메모리 참조를 위해 보관하는 데이터 주소를 가진 레지스터
    • MBR(Memory Buffer Register) : CPU가 메모리로부터 읽거나, 저장할 데이터 자체를 보관하는 레지스터

 

프로그램의 실행과정

  • - Instruction Fetch : 실행할 명령어를 메모리에서 읽어 CPU로 가져옴
  • -> PC가 가리키는 주소를 MAR에 보냄
  • -> MAR에 적힌 주소를 메모리에서 읽어서 MBR에 보냄
  • -> MBR에 있는 명령어를 IR에 저장
  • -> 다음 명령어를 가르키도록 PC는 주소값 증가
  • - Instruction Decode : 인출한 명령어에 포함된 데이터 가져오고 명령어 해독
  • - Instruction Execution : 명령어 실행
  • -> MBR의 데이터와 ACC(Accumulator)의 데이터로 연산 후, ACC(ACcumlator)에 저장
  • - Write Back : 실행 결과를 저장

 

7. CPU 성능을 높이는 기법 - 파이프라인

- 명령어 파이프라인(Instruction Pipeline)은 CPU의 성능을 향상시키기 위해 명령어 처리를 여러 단계(세그먼트)로 나누어 동시에 실행하는 명령어 병렬 처리 기법, 테스크는 이러한 세그먼트들을 통해 수행되는 실제 작업.

- 하나의 명령을 실행하는데 필요한 세부작업을 나눠보자, 명령이 세부적으로 나눠지면 나눠질수록 파이프라인이 효율적일 수있다.

- 1. 명령어 인출 2. 명령어 해독 3. 오퍼랜드 인출 4. 명령어 실행 5. 실행결과 저장

- 각 세부작업은 CPU의 개별적 회로를 작동시킴으로 인해서 실행되며, 명령인출 회로는 하나의 명령에서 1번 활성화되고 데이터를 다음 하드웨어로 넘겨버리기 때문에 공백이 생김, 이러한 공백을 없애기 위해서 파이프라인으로 여러가지 명령어를 시간차를 두고 줄을세워 병렬실행하여 낭비를 최소화한다.

- Assembly 언어는 기계어로서 CPU의 회로를 1:1 관계로 조작한다. 때문에 CPU 제조사 및 종류에 따라서 명령어 셋이 상이하다. 그중에서 Intel의 CISC(Complex Instruction)와 ARM의 RISC(Reduced Instruction)이 다른 철학을 갖고있다.

- CISC : 하나의 명령어로 가능한 많은 작업을 수행함. 명령어의 복잡도에 따라 명령어의 인자개수 수행시간 등이 다양해서 서브프로세스의 소요 사이클 수 예측이 어려움

- RISK : 하나의 명령어로 최소한의 작업을 수행하고, 명령어를 조합해서 실행. 사이클 수의 예측이 쉬움으로 효율적 파이프라인을 하기에 적합함

'개발기술 > Computer Science' 카테고리의 다른 글

CS공부 - 네트워크  (0) 2024.06.22
CS공부 - 기타공부  (0) 2024.06.17
CS공부 - 운영체제  (0) 2024.06.16
CS를 위한 이산수학 정리  (0) 2023.12.20