컴퓨터시스템구조
· 약 62분
컴퓨터의 역사
세대별 구분
1세대
- 진공관
- 프로그램 내장방식
- 전력소모 크고 발열 심함
- 기계어, 어셈블리어
2세대
- 트랜지스터
- 진공관 컴퓨터에서 1/100 축소
- 고급언어 (COBOL)
3세대
- 집적회로 (IC: Integrated Circuit)
- 고급언어 (베이직)
4세대
- 고밀도 집적회로 (LSI: Large Scale Integrated circuit)
- 초고밀도 집적회로 (VLSI: Very Large Scale Integrated Circuit)
- PC
- 고급언어, 문제지향적 언어
컴퓨터 시스템의 전체적 구성
시스템 버스
- CPU, 기억장치, I/O 장치들을 상호 연결해주는 중심 통로
- 단방향 어드레스 버스, 양방향 데이터 버스, 양방향 제어버스로 구성
입력장치
출력장치
기억장치
중앙처리장치
- 연산장치, 제어장치, 레지스터로 구성
사람 | 컴퓨터 |
---|---|
감각 | 입력장치 |
뇌세포 | 기억장치 |
신경망 | 중앙처리장치 |
움직임 | 출력장치 |
운영체제
- HW와 SW 자원을 관리하고 제어
- 편리한 인터페이스 제공
- 입출력의 보조적 기능 수행
- 오류 처리
자원관리
- 프로세스 관리
- 주기억장치 관리
- 보조기억장치 관리
- 입출력장치 관리
- 파일 관리
컴파일러, 인트프리터: 고급언어를 기계어로 변환하기 위한 번역기
분류
성능과 규모
- 마이크로 컴퓨터: 현재 범용컴퓨터
- 미니컴퓨터: 멀티유저 시스템
- 메인프레임: 범용목적의 대형컴퓨터, 다수의 터미널 사용
- 슈퍼컴퓨터
구조
- 병렬컴퓨터: 동시에 여러 개의 마이크로프로세서 사용
- 분산컴퓨터: 데이터가 네트워크 상에 분산되어 있을 때
- 클라우드컴퓨터
사용목적
- 전용컴퓨터: 군사용, 기상예보용, 천문학 등
- 범용컴퓨터: 여러 분야의 다양한 업무 처리할 목적으로 설계된 컴퓨터 (과학계산, 통계 등)
처리방법
- 일괄처리 컴퓨터: 일정 시점 단위로 한꺼번에 처리
- 실시간 처리 컴퓨터: real-time, 온라인 처리 시스템, 즉시처리 시스템
자료표현
- 디지털 컴퓨터
- 아날로그 컴퓨터: 자료를 입력받아 곡선이나 그래프로 출력하는 컴퓨터
- 하이브리드 컴퓨터: 아날로그, 디지털 데이터 모두 처리, A/D (Analog-Digital conveter) 변환기, D/A(Digital-Analog converter)로 데이터 변형 출력 가능
발달과정
특징 | 컴퓨터 |
---|---|
최초 기계식 | 마크원 |
최초 전자식 | ENIAC |
최초 프로그램내장 | EDSAC |
최초 상업용 | UNIVAC-I |
진공관 > TR > IC > LSI > VLSI 폰노이만 모델: 기억장치에 프로그램과 데이터를 넣고 순서대로 처리하는 방식 (프로그램 내장방식) 시스템버스: 어드레스 버스, 데이터 버스, 제어 버스
컴퓨터 명령어
주소필드
- mode, operation code, address 필드로 구성
- mode = 0 => 주소가 직접번지, mode = 1 => 주소가 간접번지
- 주소필드는 주소 || 레지스터 || 데이터를 나타냄
- 16bit 명령어의 경우: 1bit, 3bit, 12bit
3주소 명령어
- 범용 레지스터 구조의 컴퓨터에서 사용
- 연산코드와 3개의 주소필드로 구성
- 프로그램은 간단하나 명령어의 길이가 너무 길다
2주소 명령어
- 범용 레지스터 구조의 컴퓨터에서 사용
- 연산코드와 2개의 주소필드로 구성
- 연산시에 주소1의 내용은 실행 후에 출력값으로 저장되므로 원래 주소1의 내용은 없어진다.
1주소 명령어
- 단일 누산기 방식의 컴퓨터에서 사용
- ACC와 Operand의 연산결과는 다시 ACC에 저장되는 형식
- 입력으로 사용된 누산기는 결과값이 저장되어 원래 값은 없어진다.
0주소 명령어
- STACK
주소지정방식
의미주소지정
- Implied Addressing Mode
- 묵시적 주소지정방식
- 데이터의 위치를 지정하지 않아도 묵시적으로 정해져 있음
- PUSH, POP: Stack Pointer 사용
- SHL, SHR: ACC의 내용을 시프트
- 명령어가 짧다
즉치주소지정
- Immediated Addressing Mode
- Operand의 내용이 연산에 사용될 실제 데이터
- 프로그램상에서 레지스터나 변수의 초기값을 설정하는데 사용
레지스터 주소지정
- Register Addressing Mode
- 레지스터에 데이터가 존재
- 레지스터를 지정하는 오퍼랜드가 4bit라면 16개의 레지스터를 지정할 수 있음
- 메모리를 액세스하지 않아 실행시간 단축
- 데이터를 저장하는 공간이 레지스터로 한정
레지스터 간접주소지정
- Register Indirect Addressing Mode
- 레지스터의 내용이 유효주소가 되기 때문에 지정된 레지스터의 내용이 메모리 주소가 되어 유효 데이터를 가져옴
- 레지스터가 10bit면 2^10B, 20bit면 1MB의 메모리 영역을 지정 가능
- 데이터 인출을 위해 한 번만 메모리를 액세스하면 된다.
직접주소지정
- Direct Addressing Mode
- 오퍼랜드가 데이터의 유효주소
- 데이터 인출을 위해 한 번만 메모리 액세스
간접주소지정
- Indirect Addressing Mode
- 오퍼랜드의 데이터가 가리키는 기억장소의 데이터가 유효주소 (2번)
- 오퍼랜드가 nbit면 최대 2^n개의 주소공간
- 명령 어의 I비트가 0이면 직접주소, 1이면 간접주소
상대주소지정
- Relative Addressing Mode
- 명령어의 주소필드에 PC(Program Counter) 값이 더해져서 유효주소가 결정되는 방식
- 기준 주소는 명령어의 주소, 변위는 PC
- 주로 분기명령어에서 사용
인덱스된 주소지정
- Indexed Addressing Mode
- 인덱스 레지스터의 내용과 주소필드의 내용이 더해져서 유효주소가 결정
- 기준 주소는 명령어의 주소, 변위는 인덱스 레지스터
베이스 레지스터 주소지정
- Base Register Addressing Mode
- 베이스 레지스터의 내용과 주소필드의 내용이 더해져서 유효주소가 결정
- 기준 주소가 베이스 레지스터, 변위는 명령어의 주소필드
명령어의 종류
데이터 전송명령
- 데이터가 변경되지 않고 위치만 옮기는 명령
명령어 | 부호 | 기능 |
---|---|---|
load | LD | mem => reg |
store | ST | reg => mem |
move | MOV | reg 간 전송 |
input | IN | 입력장치 => reg |
output | OUT | reg => 출력장치 |
push | PUSH | reg => stack |
pop | POP | stack => reg |
데이터 처리 명령
- 실제로 연산이 이뤄지는 명령
- 산술연산명령어, 논리연산명령어, 비트처리명령어, 시프트명령어로 구분
산술연산
명령어 | 부호 | 기능 |
---|---|---|
add | ADD | 덧셈 |
subtract | SUB | 뺄셈 |
multiply | MUL | 곱셈 |
increment | INC | mem, reg 1 증가 |
decrement | DEC | mem, reg 1 감소 |
negate | NEG | 2의 보수 |
add with carry | ADDC | 올림수와 함께 덧셈 |
논리연산
명령어 | 부호 | 기능 |
---|---|---|
AND | AND | 특정부분 0으로 셋 |
clear | CLR | 모든 비트 0으로 셋 |
clear carry | CLRC | 캐리비트를 0으로 셋 |
enable interrupt | EI | 인터럽트 가능 |
disable interrupt | DI | 인터럽트 불가능 |
시프트
명령어 | 부호 | 기능 |
---|---|---|
logical shift right | SHR | 오른쪽 논리 시프트 |
logical shift left | SHL | 왼쪽 논리 시프트 |
rotate right | ROR | 현재값 유지하면서 오른쪽 자리이동 |
rotate lest | ROL | 현재값 유지하면서 왼쪽 자리이동 |
프로그램 제어명령
조건에 따라 PC가 변경되어 수행순서가 달라진다
명령어 | 부호 | 기능 |
---|---|---|
branch | BR | 지정된 주소로 분기 |
jump | JMP | 지정된 주소로 점프 |
skip | SKP | PC값 증가 후 다음 명령으로 skip |
call | CALL | PC값 저장, 서브루틴 콜 |
return | RET | 리턴 주소를 PC에 저장 |
compare | CMP | 두 수 크기 비교 |
프로그램 인터럽트
외부 인터럽트
- 입출력장치, 전원 등 외부 요인으로 발생
- 입출력장치의 데이터 전송 요구, 정보전송의 마감, timeout, 전원공급이 끊어질 때 발생
- 프로그램 외적인 상황에서 발생
내부 인터럽트
- 올바르지 않은 명령어나 데이터 사용시 발생
- overflow, div 0, stack overflow, 메모리 보호영역 침범 등
- 프로그램 자체에서 주로 발생
소프트웨어 인터럽트
- 특수한 CALL 명령어로 프로그래머가 원하는 위치에서 인터럽트 발생
- supervisor call instruction
- 사용자 모드엥서 supervisor 모드로 CPU 상태를 변환
외부 인터럽트 처리
- 외부 인터럽트 발생
- CPU는 현재 수행하는 명령어의 실행 사이클 종료
- 다음 실행할 PC의 내용을 스택에 저장
- 인터럽트 서비스 루틴의 시작주소를 PC에 저장
- 인터럽트 처리 후 스택영역에 저장된 PC를 복구
- 프로그램 복귀 후 계속 실행
복합, 단축 명령어 컴퓨터
CISC
- Complex Instruction Set Computer
- 다양한 데이터와 주소방식 제공
- 많은 명령어와 주소지정방식을 구현하기 위해 많은 하드웨어 필요
- 실행속도가 느림
RISC
- Reduced Instruction Set Computer
- Load와 Store를 제외하고는 레지스터 간의 연산으로 구성
- 고정된 명령어 형식 사용
- 복잡한 간접주소지정방식은 사용하지 않음
시스템 버스
- 컴퓨터 시스템의 각각의 장치를 연결하여 정보를 전송하는 공유전송매체
- CPU를 중심으로 주기억장치, 보조기억장치, 입력장치, 출력장치가 데이터를 주고받는 통로
주소버스
- Address Bus
- 주기억장치에 데이터를 읽기/쓰기 위해서 주소를 지정하기 위한 선들의 집합
- 단방향 전송
- 주소 버스가 16bit이면 2^16 => 65536개의 주소 지정
데이터버스
- 각각의 장치들 사이의 데이터를 전송하는 선들의 집합
- 양방향 전송
- 버스의 폭은 주소를 지정하고 한 번에 R/W하는 비트의 수
- 주소당 32bit 씩 데이터를 전송한다면 데이터 버스의 수는 32개
제어버스
- CPU, I/O장치, Memory 장치를 제어하는 신호선들의 집합
- 인터럽트 요구 신호
- 인터럽트 승인 신호
- 버스요구 신호
- 버스승인 신호
- 기억장치 읽기 신호
- 기억장치 쓰기 신호
- 입출력장치 읽기 신호
- 입출력장치 쓰기 신호
- 리셋 신호
- 버스 클록
- 전송 확인 (transfer acknowledge)
동기식버스
- 클록 펄스에 의해 데이터 전송이 발생
- 마스터와 슬레이브는 모두 같은 클록 펄스에 동기
- 인터페이스 회로가 간단
- 클록의 주기보다 짧은 동작은 다음 주기까지 기다려야하는 단덤