본문 바로가기
컴퓨터 일반

1. 컴퓨터 구조 - 컴퓨터와 동작원리

by 쬑께께 2026. 1. 13.

1. 컴퓨터

(1) 컴퓨터의 기능

- 입력 기능: 자료나 명령을 컴퓨터 안으로 들여보내는 기능

- 출력 기능: 처리된 결과(정보)를 컴퓨터 외부로 내보내는 기능

- 연산 기능: 산술적인 사칙 연산과 논리 연산을 수행하는 기능

- 제어 기능: 각각의 모든 장치들에 대한 지시 또는 감독을 수행하는 기능

- 저장 기능: 입력된 자료를 기억하거나 저장하는 기능

* 입력 기능, 출력 기능: 속도 빠름(cpu와 독립적으로 수행)

* 연산 기능, 제어기능: cpu가 처리 (cpu = 중앙처리장치 : 기억(저장))

 

(2) 디지털 컴퓨터 VS. 아날로그 컴퓨터

  디지털 컴퓨터 아날로그 컴퓨터
입력 형태 숫자, 문자 전류, 전압, 온도
출력 형태 숫자, 문자 곡선, 그래프
연산 형식 산술 논리 연산 미적분 연산
구성 회로 논리회로 증폭회로
프로그래밍 필요 불필요
정밀도 필요한 한도까지 제한적
기억 기능 있음 없음
적용 분야 범용 특수 목적용(제어)

 

(3) 처리 방법에 따른 분류

일괄처리(batch processing) - 데이터를 일정량 또는 일정기간 동안 모아두었다가 주기적으로 처리하는 방식
- 시스템 중심 -> 시스템 효율성 높음
실시간 처리(free-tine processing) - 데이터 입력 시 즉시 처리하는 양식으로 실시간으로 확인 가능
- 사람 중심 -> 시스템 효율성 낮음
시분할 처리(time-sharing processing) CPU의 처리시간을 분할해 여러 작업에 번갈아 할당해 CPU를 공유하여 처리하는 방식
다중처리(multi processing) - 2개 이상의 처리기(Processor)를 사용해 여러 작업을 동시에 처리하는 방식
- 듀얼(Dual) 시스템, 듀플렉스(Duplex) 시스템 2가지로 분류
- 강결합 시스템
분산처리(distrubuted processing) - 여러 대의 컴퓨터에 작업을 나누어 처리해 그 내용이나 결과가 통신망을 통해 상호교환되도록 연결되어 있는 형태
- 약결합 시스템

* 다중처리, 분산처리 - 네트워크 필요

 

* 다중 프로그래밍 시스템 VS 다중 처리 시스템

  CPU 프로그램 처리
다중 프로그래밍 시스템 1개 N개 병렬화 처리
다중 처리 시스템 N개 N개 병렬 처리

 

* 프로세서 = CPU = 처리기

* 프로세스 = 실행중인 프로그램

 

(5) 처리 능력에 따른 분류

슈퍼 컴퓨터 메인 프레임 미니 컴퓨터 워크스테이션 마이크로컴퓨터
- 초대형 컴퓨터
- 복잡한 계산: 초고속
- 이용분야: 우주항공, 기상예측, 첨단과학
- 대형 컴퓨터
- 대표 기종: IBM 360, IBM370
- 중형 컴퓨터 - RISC 마이크로프로세서 사용
- PC급 + 고성능 + 네트워크 기능 강화
- 마이크로프로세서가 장착된 컴퓨터
- 개인용 컴퓨터(PC: Personal Computer)임

 

(8) 유니버셜 게이트(Universal Gate) = 범용 게이트

- NAND 게이트와 NOR게이트를 유니버셜 게이트 또는 범용 게이트라고 함

- NAND 게이트와 NOR 게이트는 디지털 시스템에서 사용되는 모든 논리 게이트 구성 가능

* NAND게이트는 AND 게이트의 반대값, NOR 게이트는 OR 게이트의 반대값을 나타냄

A B AND NAND
0 0 0 1
0 1 0 1
1 0 0 1
1 1 1 0

 

명령어 파이프라이닝

- CPU의 프로그램 처리 속도를 높이기 위해 CPU 내부 하드웨어를 여러 단계로 나누어 동시에 처리하는 기술 -> 처리 속도 향상

- 하나의 명령어를 여러 단계로 나누어 처리함 -> 한 명령어의 특정 단계를 처리하는 동안 다른 부분에서는 다른 명령어의 다른 단계를 처리할 수 있음 => 동시에 여러 개의 명렁어 실행 가능

 

(1) 2-단계 명령어 파이프라이닝

- 명령어를 실행하는 하드웨어를 인출단계(fetch stage)와 실행단계(execute stage) 두 개의 독립적인 파이프라인 모듈로 분리하여 수행

- 두 단계에 동일한 클럭을 가하여 동작 시간 일치시킴

- 1. 첫 번째 클럭 주기 동안 인출 단계가 첫 번째 명령어 인출

- 2. 두 번째 주기에서 그 명령어가 실행 단계로 보내져 실행됨, 그와 동시에 인출 단계는 두 번째 명령어 인출

클럭주기 1 2 3 4
명령어 1 ←인출 → ← 실행 →    
명령어 2   ← 인출 → ← 실행 →  
명령어 3     ← 인출 → ← 실행 →

* 직렬로 수행 시 한 명령어 당 클럭주기 (2) * 명령어 갯수(3) = 6 클럭주기 필요

 

(2) 4-단계 명령어 파이프라이닝

- 명령어 인출(IF) 단계, 명령어 해독(D)단계, 오퍼랜드 인출(IF) 단계, 실행(EX) 단계라는 네 개의 독립적인 파이프라인 모듈들로 분리해 수행 

 

(3) 파이프라이닝에 의한 속도 향상 관계식

: 전체 명령어 실행시간 = 파이프라인 단계 수 + (실행할 명령어들의 수 -1)

 

(4) 파이프라인 해저드

- 명령어 실행이 불가하여 지연 또는 중지가 발생하는 현상

구조적 해저드 - 포트가 하나인 메모리에 동시에 접근하려고 하거나 ALU 등의 하드웨어를 동시에 사용하려고 할 때 발생
- 해결 방법: 메모리를 명령어 영역과 데이터 영역으로 분리하여 사용 또는 ALU 등의 하드웨어를 여러 개 사용
데이터 해저드
= 충돌 발생
- (동일 사이클 내에서) 이전 명령어에서 레지스터의 값을 바꾸기 전에 후속 명령어가 그 값을 읽거나 쓰려고 하는 경우 = 데이터 의존성이 있는 경우 발생
- 해결 방법: 명령어 재배치, 전방전달(Data forwarding), No-operation insertion 사용
* 명령어 재배치: 지연 발생 없음, 무조건 해결되는건 아님
* No-operation insertion: 지연 발생, 무조건 해결됨 (S/W적 해결방법)
제어 해저드 - 조건 분기로 인해 명령어의 실행 순서가 변경되어 명령어가 무효화 되는 것
- 해결 방법: 분기 예측, stall 삽입법 사용

 

(5) RISC 파이프라인

- 명령어 집합이 단순 -> 한 클럭 사이클에 수행되는 소수의 부연산들로 파이프라인 구성 가능

- 고정된 길이의 명령어 형식을 사용 -> 연산의 디코딩과 레지스터의 선택을 동시에 할 수 있음

- 모든 피연산자가 레지스터에 있는 것 -> 유효 주소를 계산하고 메모리로부터 미연산자를 읽어올 필요 없음

- 3/4/5단 명령 파이프라인

3단 파이프라인 Fetch instruction - Decode/Select Register - Excute/Store
4단 파이프라인 Fetch instruction - Decode/Select Register - Excute - Store
5단 파이프라인 Fetch instruction - Decode - Select Register - Excute - Store
명령어 인출 (IF) - 명령어 해독(ID) - 데이터인출(SR) - 실행(EX) - 저장(ST)

- 문제점

데이터 충돌 - 한 명령어가 결과값을 어떠한 레지스터에 저장, 다른 명령어가 그 값을 오퍼랜드로 사용 시 발생
분기 충돌 - 분기나 점프문에서 충돌 문제 발생하는 것
- 데이터 충돌과는 다르게 잘못된 데이터 값이 사용되는 것이 아니고, 중앙처리장치가 실행되어서는 안될 때 명령어를 실행시켜 야기됨

- 충돌 해결 방법

No-operation insertion - S/W적 해결 방법(컴파일러)
- 컴파일러가 데이터 충돌을 감시하여 충돌을 피하기 위해 No-operation을 삽입하는 방법
- 충돌 문제 해결 가능하나 성능저하시킴(지연 발생)
- 최적의 방법은 아님
Instruction reordering - S/W적 해결 방법(컴파일러)
- 데이터 충돌을 피하기 위해 몇몇 명령어를 재배치하는 방법
- No-operation insertion과 다르게 클럭 주기를 낭비하지 않고, 데이터 충돌 해결할 수 있음
- 항상 사용할 수 있는 것X, 프로그램에 의해 계산 결과가 변경되지 않을 때에만 가능
- 항상 데이터 충돌 문제 해결할 수 있는 것은 아니며, 이 방법으로 해결되지 않을 경우 No-operation insertion  방법 사용해야 함
Stall insertion - H/W적 해결 방법(OS)
- 부가적인 하드웨어가 데이터 충돌을 감지, 해결하기 위해 Stall을 넣거나 지연 주는 방법
- 프로그램이 컴파일되는 동안 컴파일러에 의해 다루어지는 것이 아니라 프로그램이 실행되고 있는 동안 하드웨어에서 다루어진다는 것을 제외하면 No-operation insertion과 유사함
- 데이터 충돌 문제를 해결하지만, 전체적인 시스템 성능 저하시킴
Data forwarding - H/W적 해결 방법(OS)
- 하나의 명령어가 실행된 후에 그 결과가 저장되면서 이 결과가 레지스터를 선택하는 단으로 직접 전달되는 방법
- IF - -> D/SR - -> EX/ST
               ↑_________|

 

* 슈퍼스칼라(superscalar): CPU 내 파이프라인을 여러 개 두어 명령어를 동시에 실행하는 기술

- 파이프라인과 병렬 처리의 장점을 모은 것

* VLIW(Very Long Instruction Word): 동시 실행이 가능한 여러 명령을 하나의 긴 명령으로 재배열하여 동시 처리함

 

부울대수

부울 대수 공리

공리 1 공리 2 공리 3 공리 4 공리 5
A ≠ 0 이면 A = 1
A ≠ 1이면 A = 0
A = 0이면 Ā = 1
A = 1이면 Ā = 0
0 ⋅ 0 = 0
0 + 0 = 0
1 ⋅ 1 = 1
1 + 1 = 1
0 ⋅ 1 = 0
0 + 1 = =
Ī = 0
ō = 1

 

부울 대수 기본 정리

정리 1 정리 2 정리3 정리4
A + 0 = A A + Ā = 1 A + A = A A + 1 = 1
A ⋅ 0 = 0 A ⋅ Ā = 0 A ⋅ A = A A ⋅ 1 = A

* A + 0 = A  |  0 + 0 = 0  |  1 + 0 = 1

 

 

논리함수의 간소화

- 논리함수가 회로를 설계하기 위해 입력변수와 조합에 따른 것을 부울 대수식으로 표현하는 것

- 간단한 회로 설계 가능

(1) 부울 대수식 이용한 간소화

* 부울 대수식: 입력과 출력 사이의 기본적인 법칙에 관한 관계를 나타낸 것

* 최소항(minterm): 변수들이 AND로 결합된 것

* 최대항(maxterm): 변수들이 OR로 연결된 것

- 논리식의 각 최소항(Minterm) 사이의 공동 변수를 찾아내고 정리식에 따라 간소화

 

(2) 카르노 맵(Karnaugh Map)

- 도식적 표현 사용해 부울 대수 간소화하는 방법

- 최소항의 합 방식과 최대항의 곱 방식 모두 표현 가능

* 최소항의 합 방식으로 간소화

1) 함수식의 진리값을 카르노 맵에 표시

2) '1'로 표시된 진리값 중 인접한 값을 1,2,4,8,16개씩 묶음

3) 가능하면 큰 개수로 묶기(그래야 최소화 가능)

4) 진리값들은 각각 다른 묶음에 여러 번 중복하여 묶일 수 있음

5) 인접한 값이 없는 경우 단독으로 묶이며, 단독으로 묶인 집합은 간략화 불가능

6) 각각의 묶인 집합을 간략화

7) 각각의 간략화 된 함수식을 OR 연산함

 

부호기(= 인코더, Encoder)

- 여러 개의 입력단자 중 어느 하나에 나타난 정보를 여러 자리의 2진수로 코드화하여 전달

- 2개의 입력신호로부터 n개의 출력신호 만듦

(회로도 사진 필요)

 

병렬 가감산기

- 병렬 가산기의 Y에 부호 S(sign)와 XOR하여 입력하면 덧셈과 뺄셈 모두 가능

- S가 1이면 Y의 값은 반전이 되어 1의 보수 입력됨

* 캐리어 값은 1이 입력되어 결과적으로 Y의 2의 보수가 만들어짐

- XOR 게이트에 입력되는 부호 선택의 값이 0이면 덧셈을 수행, 1이면 뺄셈 수행

 

플립플롭(Flip Flop)

- 쌍인정 멀티바이브레이터(bistable multivibrator)의 입력신호에 의해서 상태를 바꾸라는 명령이 있을 때까지 현재 상태를 유지하는 순서논리회로

- 출력이 다시 입력으로 피드백되어 최종적인 출력을 결정하는 순차논리회로의 가장 기본적인 회로

- 상태를 바꾸는 신호는 클릭 신호가 되거나 혹은 외부의 입력신호가 될 수 있음

- 플립플롭의 종류

RS 플립플롭 - S(Set)과 R(Reset)인 두 개의 상태 중에서 하나의 상태를 안정정되게 유지시키는 회로
- 외부에서 입력되는 펄스가 1인 경우: S, 0인 경우: R 
* 어느 펄스가 입력되었는지 그 상태를 보존
JK 플립플롭 - RS = 11 입력은 허가 되지 않는 회로(쌍안정성 위배로 사용금지)
- 단점: 입력이 둘 다 될 경우 불안정해짐
D 플립플롭 - RS의 단점을 보완한 회로
- 하나의 입력단자를 가지며, 입력된 것과 동일한 결과를 출력
- S입력이 NOT게이트를 거쳐 R쪽에서도 입력되도록 연결한 것 -> {R=1, S=0} 또는 {R=0, S=1}만 입력 가능
T 플립플롭 - JK 플립플롭을 이용해 만들 수 있음
- T의 값이 0일 경우, J와 K값이 둘 다 0이 되어 변하지 않음
- T의 값이 1일 경우, J와 K값이 둘 다 1이 되어 출력값이 반전되는 효과 있음
* T: 0 일 경우 불변,    T:1일 경우 반전(현 상태 보수)

* T플립플롭 진리표 * Ā = A' = NOT A

입력 출력
T Q Q'
0 Q Q'
1 Q' Q