Archive
컴퓨터구조 9-14주차 본문
728x90
메가존아이티평생교육원 컴퓨터구조 참고
논리회로
조합 논리회로 combinational logic circuit
- 출력이 현재의 입력값에 의해서만 결정되는 논리회로 = 입력이 바뀌면 즉시 출력이 바뀜
- 기억 장치 없음
- 종류
- 가산기 adder
- 2진수 덧셈을 계산하는 회로
- 가산기를 응용하여 감산기 subtractor도 구현 가능함 (단 sum과 carry가 아닌 difference, borrow 발생)
- 반가산기 half adder
- x = 0, y = 0 → s = 0, c = 0
x = 0, y = 1 → s = 1, c = 0
x = 1, y = 0 → s = 1, c = 0
x = 1, y = 1 → s = 1, c = 1 - sum = x와 y를 더한 값
- carry = x와 y를 더하는 과정에서 자리올림이 발생하면 1, 발생하지 않으면 0
- x = 0, y = 0 → s = 0, c = 0
- 전가산기 full adder
- x = 0, y = 0, z = 0 → s = 0, c = 0
x = 0, y = 0, z = 1 → s = 1, c = 0
x = 0, y = 1, z = 0 → s = 1, c = 0
... - x, y = 입력, z = 이전 자리 올림수
- sum = x, y, z를 더한 값의 가장 하위 비트
- carry = x, y, z를 더하는 과정에서 자리올림이 발생하면 1, 발생하지 않으면 0
- x = 0, y = 0, z = 0 → s = 0, c = 0
- 병렬 가산기 parallel adder
- 전가산기를 필요한 비트 수만큼 병렬로 연결하여 구현함
- 비교기 comparator
- 두 2진수의 크기를 비교하는 회로
- 가산기 adder

-
- 디코더 decoder
- 코드화된 데이터로부터 정보를 찾아내는 회로
- 예. 3x8 디코더: 아래 8x3 인코더와 반대
- 인코더 encoder
- 정보를 코드화하는 회로
- 예. 8x3 인코더: 활성화된 1의 위치에 해당하는 값을 3비트로 표현
- 디코더 decoder

-
- 멀티플렉서 multiplexer
- 여러 개의 입력을 하나로 출력하는 회로
- 예. 4x1 멀티플렉서: 4개의 입력을 1개의 출력으로
- 디멀티플렉서 demultiplexer
- 한꺼번에 들어온 입력을 여러 개로 출력하는 회로
- 예. 1x4 디멀티플렉서: 1개의 입력을 4개의 출력으로
- 코드 변환기 code converter
- 2진 코드를 다른 2진 코드로 변환
- 멀티플렉서 multiplexer
- 구동 신호
- enable 신호: 회로를 작동시킴
- invert 신호: 신호를 반전시킴
순차 논리회로 sequential logic circuit
- 출력이 현재의 입력값뿐만 아니라 회로의 이전 상태의 영향도 받아 결정됨
- 기억 장치 있음
- 순차 논리회로는 플립플롭 flip-flop이라는 기억 소자를 여러 개 연결하여 만듦. 이 플립플롭들은 신호가 입력된 후 출력이 바뀔 때까지 시간이 좀 걸리는데, 이를 전파 지연 propagation delay라고 함. 따라서 플립플롭이 여러 개 직렬로 연결될 경우, 각 단의 전파 지연이 누적되어 전체 회로의 동작 속도가 느려지거나 회로가 잘못된 상태로 인식될 수 있음. → 이러한 문제를 해결하기 위해
- 동기식 synchronous 회로
- 모든 플립플롭이 동시에 클록 펄스를 통해 신호를 받음 → 모든 플립플롭이 같은 타이밍에 상태를 바꾸기 시작
- 클럭 주기를 각 플립플롭의 최대 지연 시간보다 충분히 길게 설정하면, 모든 플립플롭이 안정된 상태로 바뀐 후에야 다음 플럭이 인가될 것
- 설계가 간단하고 안정적이라, 고속으로 동작하는 대부분의 디지털 시스템에서 사용됨
- 비동기식 asynchronous 회로
- 맨 앞의 플립플롭만 신호를 받고, 그 플립플롭의 출력이 다음 플립플롭의 입력 신호가 됨
- 전파 지연 누적 문제를 해결하긴 어려우나, 모든 회로가 매 클럭마다 동작할 필요가 없을 때 필요한 부분만 동작시켜 전력 소모를 줄이는 데 유리하고, 전역 클럭을 기다릴 필요 없이 입력 변화에 즉시 반응해야 하는 특정 인터페이스나 소규모 회로에 사용 가능해, 가끔 동기식 회로보다 유리할 때가 있음
- 동기식 synchronous 회로
- 종류
- 플립플롭 flip-flop
- 레지스터 register
- 병렬 처리 방식
- 직렬 처리 방식
- 이동 shift 레지스터
- 병렬 입력 - 병렬 출력
- 병력 입력 - 직렬 출력
- 직렬 입력 - 직렬 출력
- 재순환 recirculating
- 카운터 counter
- 4비트 2진 상향 카운터
- 4비트 = 카운터가 숫자를 표현하는 데에 4개의 이진수 자리를 사용한다는 뜻
- 2진 = 숫자를 이진법으로 센다는 뜻
- 즉, 4비트로 표현할 수 있는 숫자는 0~15 → 4비트 2진 상향 카운터가 갖는 상태는 16개 → mod-16 카운터라고도 함
- 4비트 2진 하향 카운터
- 4비트 2진 상향 카운터와 반대로 카운터의 수가 하나씩 감소함
- 3비트 동기식 2진 카운터
- 8개의 순차적인 상태를 가짐: 000 → 001 → 010 → 011 → 100 → 101 → 110 → 111 (→ 000)
- 링카운터 ring counter, circulating counter
- 1의 위치가 순환: 1000 → 0100 → 0010 → 0001 (→ 1000)
- 4비트 2진 상향 카운터
- RAM
컴퓨터 구성
- 컴퓨터의 특징: 신속성, 신뢰성, 정확성, 대용량성, 공유성
- 컴퓨터의 기능: 입력 기능, 기억 기능, 연산 기능, 제어 기능, 출력 기능
- 컴퓨터 시스템의 작동 과정
- 컴퓨터에 전원이 들어왔을 때, 가장 먼저 작동하는 것은 펌웨어 firmware. 중앙처리장치, 메모리, 그래픽 카드 등 핵심 하드웨어 장치들이 정상적으로 작동하는지 점검하고, 각 장치들을 사용할 수 있도록 초기 설정을 로드함. 하드디스크 같은 저장 장치에서 운영체제를 RAM으로 불러오기도 함.
- 펌웨어가 운영체제를 로드하면, 그 시점부터 컴퓨터의 모든 동작 제어를 운영체제가 맡음.
- 운영체제가 완전히 구동되어 시스템 환경을 준비하면, 사용자는 비로소 문서 작성, 인터넷 서핑, 게임 등의 응용 소프트웨어를 실행할 수 있음.
- 주변 장치 peripheral device
- 컴퓨터 본체 외부에 연결되어 컴퓨터 기능과 사용성을 확장하는 장치들
- 입출력 장치 input output device
- 예. 키보드, 마우스, 스캐너, 모니터 등
- 미디어 처리장치
- 오디오, 비디오 등의 미디어를 처리함
- 예. 사운드 카드: 소리를 디지털 방식으로 변환함
- 예. 비디오 카드: 그래픽 정보를 아날로그 비디오 신호로 변환하여 모니터에 표시함
- 보조기억장치
- 컴퓨터 외부에서 프로그램이나 데이터를 보관하기 위한 기억장치
- 예. 하드디스크, 플로피디스크, 자기테이프
- 통신장치
- 인터넷을 사용하기 위해 필요한 장치
- 예. LAN local area network 카드: 인접 PC들을 연결해줌
- 예. MODEM modulator demodulator: 디지털 신호와 아날로그 신호를 연결?

- 주회로기판 main board
- 각종 포트와 단자를 통해 주변장치들과 연결됨
- 중앙처리장치 CPU central processing unit
- 프로그램 실행과 데이터 처리라는 중추적인 기능 수행
- 연산장치, 저장장치, 제어장치로 구성됨
- 주기억장치 main memory
- 프로그램 실행 중 일시적으로 저장기능 수행
- 중앙처리장치에 이미 저장장치(레지스터)가 있는데 왜 주기억장치도 필요할까?
- 중앙처리장치 접근 속도: 저장장치(레지스터) > 주기억장치 > 보조기억장치
- 가격: 저장장치(레지스터) > 주기억장치 > 보조기억장치
- 레지스터는 중앙처리장치의 작업 효율을 위해 중앙처리장치 바로 옆에 있는 초고속 작업 공간이고, 주기억장치는 현재 사용 중인 모든 프로그램과 데이터를 담고 있는 임시 저장 공간. 주기억장치의 데이터는 레지스터로 옮겨져 연산된 후 다시 주기억장치에 저장됨
- RAM random access memory: 읽기, 쓰기 모두 가능
- ROM read only memory: 읽기만 가능
- 캐시기억장치 cache memory
- 중앙처리장치에 자주 쓰이는 명령어와 데이터를 저장하여 처리 성능을 높임
- 보조기억장치 secondary memory
- 그 사용 목적과 형태에 따라 컴퓨터 시스템의 내부 구성 요소가 되기도 하고, 외부 주변 장치가 되기도 함
- 버스 bus
- 시스템 버스 system bus: 중앙처리장치 ↔ 기억장치 혹은 중앙처리장치 ↔ 입출력장치를 연결하여 데이터를 읽거나 출력함
- 입출력장치 제어기
- 중앙처리장치의 작업 처리 속도는 굉장히 빠른데, 입출력장치는 중앙처리장치만큼 작업 처리 속도가 빠르지 않음
- 입출력장치가 입력 또는 출력을 수행하고 있는 시간 동안 중앙처리장치가 다른 작업을 수행하고 있을 수 있도록 중앙처리장치의 시스템 버스와 입출력장치 사이 입출력장치 제어기를 삽입
머신 사이클
- 마이크로 프로세서 microprocessor
- 중앙처리장치를 집적 회로의 칩 형태로 만든 것
- 중앙처리장치와 마이크로프로세서는 사실상 같은 의미로 통용되지만, 엄밀히 따지면 중앙처리장치는 기능적 정의이고 마이크로프로세서는 그 기능을 구현한 물리적 장치임
- 폰 노이만 - 프로그램 내장 방식
- "컴퓨터가 어떤 작업을 해야 하는지 알려주는 명령과, 그 명령에 사용되는 데이터가 모두 같은 메모리 공간에 저장될 수 있다."
- 이 개념이 등장하기 전에는 컴퓨터가 특정 작업을 수행하도록 하려면, 그에 맞게 물리적인 연결을 바꿔줘야 했음. 프로그램 내장 방식은 프로그램을 데이터처럼 메모리에 넣어두면서, 컴퓨터가 그 내용을 읽고 스스로 작업을 수행할 수 있도록 하여, 이런 불편함을 해결함.
- 머신 사이클 machine cycle
- 인출 fetch: 명령어를 주기억장치에서 불러오는 단계
- 해독 decode: 명령어를 해석하는 단계
- 실행 execute: 명령어를 실행하는 단계
- 저장 store: 명령어 실행 결과를 주기억장치에 저장하는 단계
- 명령어 처리 속도
- 클록 clock
- 중앙처리장치가 일정한 간격으로 보내는 전기적 신호
- 이 틱 tick 한 번에 중앙처리장치는 하나의 작업을 수행할 수 있는 최소한의 시간을 얻게 됨
- 클록 주파수 (단위 Hz)
- 1초에 클록이 몇 번 발생하는지
- 클록 주파수가 클수록 빠른 것
- 명령어 처리 속도
- 초당 처리하는 명령어의 개수로 표현 (단위 MIPS million instruction per second)
- 대부분의 명령어는 여러 클록 주기에 걸쳐 실행
- 예. 한 개의 명령어를 처리하는 데 3개의 클록 주기가 필요함
- 클록 clock
중앙처리장치
- 연산 장치 ALU arithmetic and logic unit
- 상태 플래그 status flag: 음수인지, 0인지, 오버플로우가 발생했는지 등 데이터의 상태를 표시함
- 이동기 shifter: 데이터의 비트들을 왼쪽/오른쪽으로 이동시키는 연산을 담당
- 보수기 complement: 2의 보수를 계산하는 데 사용
- 저장장치 register
- 용도별 종류: 데이터 레지스터, 주소 레지스터, 범용 레지스터 (데이터와 주소 모두 저장), 부동 소수점 레지스터, 상수 레지스터 (0이나 1 등 고정된 값을 저장), 특수 레지스터 (실행 중인 프로그램 상태를 저장), 명령 레지스터 (현재 실행 중인 명령어를 저장), 색인 레지스터 (실행 중인 연산에서 피연산자의 주소를 저장)
- 목적별 종류
- 사용자에게 보이는 레지스터
- 주로 연산에 직접 사용되며, 어셈블리 프로그래머가 코드 작성 시 직접 다룰 수 있음
- 데이터 레지스터와 주소 레지스터가 여기에 해당함
- 컴퓨터가 사용하는 레지스터
- 프로그램 카운터 PC program counter: 다음에 실행할 명령어의 메모리 주소를 저장
- 명령어 레지스터 IR instruction register: 현재 실행 중인 명령어를 저장
- 기억장치 주소 레지스터 MAR memory address register: 데이터가 위치한 메모리 주소를 저장
- 기억장치 버퍼 레지스터 MBR memory buffer register: 메모리에서 읽어온 데이터나 메모리에 저장할 데이터를 임시로 보관
- 입출력 주소 레지스터 I/O address register: 입출력장치의 주소를 저장
- 입출력 버퍼 레지스터 I/O buffer register: 입출력장치로 보낼 예정이거나 입출력장치로부터 받은 데이터를 임시로 보관
- 사용자에게 보이는 레지스터
- 스택 stack - LIFO last in first out
- 포인터 top: 데이터가 입출력되는 위치 표시
- 명령어 push: 입력
- 명령어 pop: 출력
- 제어장치
- MBR, IR, MAR, PC, 명령어 해독기 등이 제어장치에 포함됨
- 저장장치에서 소개되었던 장치들이 제어장치에도 포함되는 이유는: 연산장치, 저장장치, 제어장치는 물리적으로 분리된 장치들이 아니라 논리적인 개념의 묶음이고, 제어장치에서도 위 장치들이 중요한 역할을 하기 때문
- 성능에 영향을 미치는 요소
- 클록 주파수
- 워드 크기: 몇 비트씩 가져오는지
- 캐시 메모리 존재 여부
- 명령어 집합의 복합성
- 파이프라이닝 pipeling: 이전 명령어의 수행이 완전히 종료되기 전에 다음 명령어 수행을 시작하는 것 @아래 자세히
- 병렬 처리 parallel processing: 한번에 여러 개의 명령어를 동시에 수행시킬 수 있음 @아래 자세히
기억장치

- 기억장치는 다음과 같이 분류할 수 있음
- 데이터를 저장하는 성질에 따라
- 휘발성 volatile: 일정한 시간이 지나거나 전원 공급이 중단되면 기억장치 내 모든 데이터가 사라짐 (예. RAM)
- 비휘발성 non-volatile: 전원 공급이 중단되더라도 기억장치내 데이터는 지워지지 않음 (예. ROM)
- 기억장치에 접근하는 방법에 따라
- 순차적 접근 sequential access: 정보를 저장한 순서대로만 접근할 수 있음 (예. 자기테이프 - 1번부터 4번 트랙을 지나야만 5번 트랙에 도달할 수 있음)
- 직접 접근 direct access: 저장한 위치의 주소를 활용해 원하는 정보가 있는 대략적인 위치로 직접 이동한 후, 그 근처에서 순차적으로 탐색함 (예. 디스크)
- 임의 접근 random access: 기억장치 내 모든 위치에 고유한 주소가 있고, 그 주소를 알면 어디에 있는 상관없이 항상 동일한 속도로 바로 접근할 수 있음 (예. RAM, ROM 등 반도체 기억장치)
- 데이터를 저장하는 성질에 따라
- 기억장치 성능 평가 요소
- 기억 용량 capacity
- 단위: 비트 bit, 바이트 byte, 워드 word
- 예. 1048GB
- 접근 시간 access time: 기억장치에 읽기 혹은 쓰기 요청을 한 후, 요청이 완료될 때까지 걸리는 시간
- 사이클 시간 cycle time
- 기억장치에 읽기 혹은 쓰기 요청을 한 후, 다시 요청할 수 있을 때까지 걸리는 시간
- 비파괴 기억장치 (반도체 기억장치)에서는 사이클 시간이 곧 접근시간
- 이 기억장치는 전기를 이용해 정보를 저장함
- 정보를 읽어도 해당 정보는 기억장치에 그대로 남아있음. 따라서 읽은 후에 따로 복구할 필요가 없음
- 파괴 기억장치 (자기 코어 magnetic core)에서는 사이클 시간 = 접근시간 + 복원시간
- 이 기억장치는 자석의 성질을 이용해 정보를 저장함
- 특정 방향의 자기장을 걸어서 코어의 상태를 강제로 바꿔버리기 때문에, 정보를 읽은 후 원래의 정보는 사라짐. 따라서 원래 상태로 되돌려 놓는 복구 과정이 반드시 필요함
- 기억장치의 대역폭 bandwidth: 기억장치가 한 번에 처리할 수 있는 비트 수
- 데이터 전송률 data transportation: 초당 몇 비트의 데이터를 전송할 수 있는지
- 가격 cost
- 기억 용량 capacity
주기억장치
- 주기억장치의 동작
- 쓰기 동작 모드
- 입력 장치 또는 보조기억장치 → 주기억장치: 입력 정보 전달 (예. 키보드로 문서를 타이핑하거나, USB에 있는 파일을 열면, 그 정보가 컴퓨터의 작업 공간인 메모리로 옮겨짐)
- 기록회로: 입력정보는 바로 저장되는 것이 아니라, '기록회로'라는 임시 대기 공간에 잠시 머무르게 됨
- 기억매체: 입력정보는 '기억매체'에 저장됨, 정보를 저장하는 아주 작은 단위의 부품들이 빼곡하게 들어있음
- 번지선택회로: 기록회로에 있던 데이터를 기억매체 내의 정해진 위치로 보내주는 역할을 함
- 쓰기 시간 memory write time: 중앙처리장치가 메모리에 데이터를 저장하는 데 걸리는 시간
- 읽기 시간 memory read time: 데이터의 주소를 해독하는 데 걸리는 시간 + 저장장치로부터 데이터를 읽어오는 데 걸리는 시간
- 쓰기 동작 모드
- 주기억장치의 분할 구조
- 입력정보를 어떻게 할당해 저장할 것인가?
- 고정 분할 할당 기법: 각 프로그램에 고정된 동일 크기의 분할된 구역을 할당하는 방법
- 장점: 빠르게 할당할 수 있음
- 단점:
- 할당되는 저장공간 < 저장될 프로그램의 경우, 작은 단위로 쪼개지는 단편화 fragmentation 문제 발생
- 할당되는 저장공간 > 저장될 프로그램의 경우, 남는 공간 발생
- 가변 분할 할당 기법: 주기억장치에 새로운 프로그램이 들어올 때마다 가변적으로 기억공간을 분할하여 할당하는 방법
- 하지만 이렇게 프로그램을 실행하고 종료하는 과정이 반복되면, 메모리 곳곳에 사용되지 않는 작은 빈 공간들이 생기게 됨
- 예. 100KB의 메모리가 있을 때, 30KB 프로그램, 40KB 프로그램, 20KB 프로그램을 순차적으로 할당하고, 30KB와 20KB 프로그램이 종료되었다고 가정해보자. 그러면 30KB와 20KB의 빈 공간이 생기면서, 50KB의 새로운 프로그램을 실행하고 싶어도, 30KB와 20KB는 합쳐져 있지 않아 사용할 수 없게 됨
- 이러한 현상을 외부 단편화 external fragmentation이라고 하고, 이 문제를 해결하기 위해 기억장소의 집약 compaction을 수행
- 기억장소의 집약: 메모리에 흩어져 있는 사용 중인 프로그램들을 한쪽으로 싹 모으는 것
- 혹은 빈 공간을 찾아 넣는 방법인 공백영역탐색 알고리즘을 선택할 수도 있음
- 최초 적합 방법 first-fit: 메모리를 처음부터 순서대로 훑어가다가, 새로 들어올 프로그램을 수용할 수 있는 최초의 빈 공간을 발견하면 바로 그곳에 할당
- 최적 적합 방법 best-fit: 메모리의 모든 빈 공간을 탐색하여, 새로 들어올 프로그램을 수용할 수 있는 빈 공간 중에서 가장 작은 곳을 찾아 할당
- 최악 적합 방법 worst-fit: 메모리의 모든 빈 공간을 탐색하여, 새로 들어올 프로그램을 수용할 수 있는 빈 공간 중에서 가장 큰 곳을 찾아 할당
- 하지만 이렇게 프로그램을 실행하고 종료하는 과정이 반복되면, 메모리 곳곳에 사용되지 않는 작은 빈 공간들이 생기게 됨
- 주기억장치의 종류
- RAM random access memory
- 동적 RAM, DRAM: 정보를 전기적인 충전기 capacitor에 저장함, 시간이 지나면 전하가 조금씩 빠져나가는데, 따라서 정보가 새어나가기 전에 주기적으로 재충전 refresh해줘야 함
- 정적 RAM, SRAM: 정보를 스위치 latch로 저장함, 스위치가 켜지면 1 꺼지면 0의 상태를 유지. 따라서 전기가 공급되는 한 스위치가 알아서 그 상태를 계속 유지하기 때문에 재충전이 필요 없음
- ROM read only memory
- mask ROM: 한번 만들어지면 데이터를 절대 바꿀 수 없음
- programmable ROM: 사용자가 한 번만 데이터를 기록할 수 있음
- erasable ROM: 데이터를 지우고 다시 쓸 수 있음
- flash memory: 데이터를 빠르게 지우고 쓸 수 있음
- RAM random access memory
캐시기억장치
- 꼭 있어야 하는 건 아님!
- CPU는 엄청나게 빠르고, 주기억장치는 상대적으로 느림 → CPU가 데이터를 기다리는 시간을 줄이기 위해 → CPU가 주기억장치에서 어떤 데이터를 가져와 사용하면, 그 데이터와 주변 데이터들을 캐시에 미리 복사해 둠 → 다음에 CPU가 같은 데이터를 필요로 하면, 느린 주기억장치까지 갈 필요 없이 바로 옆에 있는 빠른 캐시에서 꺼내 씀
- 캐시기억장치가 있는 컴퓨터 시스템의 경우, CPU가 캐시기억장치를 먼저 조사 → 찾고 있는 데이터가 캐시기억장치에 있다면 hit 없다면 miss
- miss: 필요한 정보를 주기억장치에서 획득하여 캐시기억장치에 전송해두고 → 해당 정보를 캐시기억장치에서 중앙처리장치로 전송
- 적중률 hit ratio: 캐시기억장치를 가진 컴퓨터의 성능을 나타내는 척도
- 적중률 = 적중 수 / 전체 메모리 참조 횟수
- 캐시기억장치를 설계할 때 고려해야 할 요소
- 캐시기억장치의 크기 size: 용량이 커지면 많은 블록을 저장할 수 있게 됨 → 적중률이 높아짐 → 하지만 주변 회로가 복잡해져 접근시간이 길어짐. 적중률은 향상시키고 접근시간 저하는 막는 용량으로 결정해야 함
- 인출방식 fetch algorithm
- 요구인출 demand fetch 방식: 요구가 있을 때마다 데이터를 가져오는 방식
- 선인출 prefetch 방식: 미리 예상하고 데이터를 가져오는 방식
- 다음에 필요한 데이터가 미리 준비되어 있기 때문에 기다리는 시간 없이 바로 사용할 수 있다는 장점이 있지만, 다음 페이지를 미리 가져왔는데 갑자기 다른 곳으로 건너뛰어 읽게 되면 미리 가져온 데이터는 쓸모없어지고 메모리 공간만 차지하게 된다는 단점이 있음
- 지역성 locality이 높은 경우에 효과가 큼
- 사상함수 mapping function
- 사상 mapping: 주기억장치의 데이터를 캐시의 어느 위치에 저장할지 결정하는 규칙
- 직접 사상 direct mapping: 주기억장치의 특정 블록은 캐시의 정해진 위치 딱 한 곳에만 저장될 수 있음
- 가장 간단하고 구현이 쉬운 방식
- 하지만 충돌이 발생할 수 있음. 서로 다른 주기억장치 블록이 캐시의 같은 위치에 저장되어야 할 때 충돌이 발생하여, 캐시 효율이 떨어질 수 있음. 캐시에 다른 자리가 많이 비어 있어도 지정된 자리에 다른 데이터가 있으면 기존 데이터를 내보내고 새로 저장해야 하기 때문
- 연관 사상 associative mapping: 주기억장치의 데이터는 캐시의 어떤 위치든지 비어있는 곳이라면 자유롭게 저장될 수 있음
- 가장 유연한 방식
- 하지만 검색 속도가 느림. 원하는 데이터를 찾으려면 캐시의 모든 위치를 하나하나 다 확인해야 함.
- 집합 연관 사상 set-associative mapping: 캐시를 여러 개의 집합으로 나누고, 주기억장치의 데이터는 정해진 집합 안에서 자유롭게 저장됨
- 직접 사상과 연관 사상을 절충한 방식
- 직접 사상보다 충돌이 훨씬 적어 캐시 적중률이 높고, 연관사상처럼 모든 곳으로 검색할 필요 없이 특정 집합 내부만 검색하면 되므로 검색 속도도 비교적 빠름
- 교체 알고리즘 replacement algorithm: 캐시 메모리는 용량이 작기 때문에 언젠가 가득 차게 됨, 이때 새로운 데이터를 넣으려면 기존에 있던 데이터 중 하나를 골라 내보내야 하고, 교체 알고리즘은 이때 어떤 데이터를 내보낼 것인가를 결정하는 규칙임
- 직접 사상 방식에서는 교체 알고리즘 필요 없음: 직접 사상 방식은 들어갈 자리가 딱 하나로 정해져 있기 때문에, 고민할 필요 없이 그 데이터의 지정석에 있는 기존 데이터를 내보내면 그만
- 연관 사상이나 집합 연관 사상 방식은 교체 알고리즘 필요함
- 최소 최근 사용 알고리즘 LRU least recently used: 가장 오랫동안 사용되지 않은 데이터를 교체
- 최소 사용 빈도 알고리즘 LFU least frequently used: 사용된 횟수가 가장 적은 데이터를 교체
- 선입력 선출력 알고리즘 FIFO first-in first-out: 가장 먼저 캐시에 들어온 데이터를 교체
- 랜덤 RANDOM: 교체할 데이터를 무작위로 고름
- 쓰기 정책 write policy: CPU가 프로그램을 실행하는 동안 연산 결과를 캐시기억장치에 기록한다면, 캐시기억장치와 주기억장치에 저장된 데이터가 달라질 수 있는데, 이때 주기억장치의 데이터를 갱신하기 위해 활용되는 절차
- 즉시 쓰기 write-through: CPU의 연산 결과를 기억장치에 저장하는 쓰기 동작이 캐시기억장치 뿐만 아니라 주기억장치에서도 발생함
- 일관성을 보장함
- 하지만 매번 쓰기 동작이 발생할 때마다 캐시기억장치, 주기억장치 모두에 접근해야 하므로 쓰기 시간이 길어짐
- 나중 쓰기 write-back: CPU 연산 결과를 캐시기억장치에만 기록하고, 주기억장치에는 나중에 한꺼번에 기록하는 방식
- 1비트의 태그를 이용하여 갱신된 캐시기억장치의 블록을 표시해두고, 새로운 블록에 의해 캐시기억장치에서 삭제되는 교체가 이뤄지기 전에 주기억장치로 복사함
- 즉시 쓰기 write-through: CPU의 연산 결과를 기억장치에 저장하는 쓰기 동작이 캐시기억장치 뿐만 아니라 주기억장치에서도 발생함
- 블록 크기 block size
- 캐시기억장치의 수 number of caches
보조기억장치
- 보조기억장치는 다음과 같이 분류할 수 있음
- 접근 방법에 따라
- 순차적 접근 sequential access
- 직접 접근 direct access
- 컴퓨터 규모에 따라
- 중대형 컴퓨터 보조기억장치 (예. 자기 테이프 장치 magnetic tape, 자기 디스크 장치 magnetic disk, 자기 드럼 장치 magnetic drum, 자기 카드 장치 magnetic card)
- 개인용 컴퓨터 보조기억장치 (예. 하드 디스크)
- 접근 방법에 따라
- 보조기억장치 성능 평가 요소
- 저장 용량: 얼마나 많은 데이터를 저장할 수 있는지
- 접근 속도: 데이터를 찾아서 읽거나 쓰는 데 얼마나 걸리는지
- 전송률: 초당 얼마나 많은 데이터를 옮길 수 있는지
- 크기: 장치의 물리적인 크기
- 분리 여부: 장치를 컴퓨터 본체에서 분리해 다른 곳에 보관할 수 있는지
- 비용: 용량 대비 가격

- 자기 기억장치 magnetic memory
- 자석의 성질을 이용해 데이터를 저장
- 쓰기: 정보를 기록하는 헤드에 전류를 흘려보내 강력한 자기장을 만들고, 이 자기장으로 자구의 방향을 원하는 쪽(0 또는 1)으로 뒤집음 → 자구의 방향을 아예 뒤집어버리기 때문에, 전원이 끊겨도 데이터는 영구적으로 보존됨
- 읽기: 헤드가 자화된 자구 위를 지나가면서, 자구의 방향 변화를 감지하여 0인지 1인지를 전기 신호로 변환함
- 구조
- 원형 평판 circular platter: 실제로 데이터가 저장되는 곳
- 알루미늄이나 유리 등의 단단한 재질로 만들어지며, 표면에 자성 물질이 얇게 코팅되어 있음. 이 코팅된 자성층에 자석의 방향(0과 1)이 기록됨
- 필요한 기억 용량에 따라 1장, 6장~12장까지 겹쳐서 사용
- 한 면 surface
- 모든 면 같은 트랙 cylinder
- 대부분 바깥쪽부터 track 0
- 트랙을 나눈 작은 조각, 512byte의 정보를 저장할 수 있음 sector
- 여러 개의 섹터를 묶어놓은 것, 실제 데이터를 읽고 쓰는 단위 cluster
- 헤드 head: 평판에 데이터를 기록하거나 기록된 데이터를 읽음
- 데이터를 읽고 쓸 때 평판에 닿지 않고 아주 미세한 간격을 두고 떠서 움직임. 자성 물질의 자화 방향을 바꾸기 위한 자기장을 만들거나, 자화 변화를 전기 신호로 감지함
- 한 면에 여러 개의 헤드를 두고 원하는 위치의 헤드를 내리는 방식을 활용한다면 고정 헤드, 한 면에 한 개의 헤드만 두고 밀고 당기며 원하는 위치로 조정한다면 이동 헤드
- 디스크 팔 disk arm: 헤드가 평판의 가장 안쪽부터 가장 바깥쪽까지, 데이터를 기록한 트랙을 따라 움직일 수 있도록 지지해주는 구조물
- 구동장치 actuator: 디스크 팔을 구동시켜 헤드를 원하는 트랙 위치로 정밀하게 이동시킴
- 강력한 전자석 원리를 이용하는 경우가 많으며, 데이터가 읽기 위해 헤드를 움직이는 데 걸리는 시간 = 탐색 시간 seek time에 직접적인 영향을 줌
- 디스크 접근 시간 access time 원하는 데이터를 찾는 데까지 걸리는 시간은 탐색 시간이 끝이 아니고, 원하는 섹터를 찾는 데 까지 걸리는 시간 회전 지연 rotational latency time도 필요하고, 읽은 데이터를 주기억장치로 보내는 시간 전송시간 transfer time도 필요함
- 회전 지연 시간의 단위는 rpm revolutions per minute
- 전송 시간의 단위는 bps bit per second 또는 Bps byte per second
- 검색 시간 search time = 탐색 시간 + 회전 지연 시간
- 강력한 전자석 원리를 이용하는 경우가 많으며, 데이터가 읽기 위해 헤드를 움직이는 데 걸리는 시간 = 탐색 시간 seek time에 직접적인 영향을 줌
- 원형 평판 circular platter: 실제로 데이터가 저장되는 곳
- 광디스크 기억장치
- 알루미늄 금속성 원판의 표면에 레이저 쏘아 태운 부분과 그렇지 않은 부분으로 정보를 기록
- 강도가 약한 레이저 광선을 쏘아 반사시킨 후에, 반사된 빛을 광 다이오드에서 수신하여 다시 전기 신호로 만듦
- 정보 기록 여부에 따라 다음과 같이 분류할 수 있음: 읽기 전용 ROM, 한번 기록용 WORM, 재기록용 CD-RW
입출력장치
- 입력장치의 종류: 키보드, 지시장치, 원시 데이터 입력장치
- 출력장치의 종류: 소프트 카피 출력장치, 하드 카피 출력장치
- 프린터와 관련된 단위: CPS character per second, LPM line per minute, PPM page per minute
- 입출력 겸용장치의 종류: 사운드 카드, 영상 카드, 통신 접속 장치
- 입출력 모듈 = 입출력 인터페이스 = 입출력 채널 = 입출력 프로세서 = 입출력 제어기 = 장치 제어기
- 중앙처리장치와 입출력장치 사이에서 데이터 통신을 중재하고 제어하는 장치
- 왜 필요할까? 속도 차이 때문!
- 입출력장치는 중앙처리장치 및 주기억장치에 비해 동작 속도가 매우 느림
- 따라서 입출력장치를 중앙처리장치에 직접적으로 연결하지 않고 중간에 입출력 모듈이라는 별도의 차이를 통해 연결하는 것
- 주요 기능
- 내부 장치들과 외부 장치들 사이의 데이터 흐름을 조정
- 적절한 타이밍에 데이터를 전송할 수 있도록 함
- 데이터 버퍼링 data buffering; 속도가 느린 주변장치와 빠른 중앙처리장치 사이에서 데이터를 일시적으로 저장하여 속도 차이를 완화할 수 있도록 함
- 중앙처리장치와의 통신: 중앙처리장치의 명령을 받아 주변장치를 제어하거나, 주변장치의 상태 및 데이터를 중앙처리장치에게 전달함
- 오류 검출: 주변장치와 데이터를 주고받는 과정에서 발생할 수 있는 통신 오류를 감지하고 중앙처리장치에 보고함 (예. 프린터 종이 걸림)
- 입출력장치들 간의 통신
- 내부 장치들과 외부 장치들 사이의 데이터 흐름을 조정
- 입출력장치가 중앙처리장치에게 데이터를 보내기 위해 입출력 모듈을 통해 제어되는 5단계 과정
- 중앙처리장치가 입출력 모듈에게 입출력장치의 상태를 검사하도록 요청
- 입출력 모듈이 중앙처리장치에게 입출력장치의 상태를 보고 (busy, ready, 결함)
- 만약 입출력장치가 준비 상태라면, 중앙처리장치가 데이터 전송을 요청
- 입출려 모듈이 입출력장치로부터 데이터를 수신
- 입출력 모듈이 중앙처리장치로 데이터를 전송
- 내부 조직
- 데이터 레지스터: 입출력장치로부터 수신된 데이터 일시 저장 = 데이터 버퍼링
- 상태/제어 레지스터: 입출력장치의 현재 상태 저장
- 입출력 제어기법
- 중앙처리장치에 의한 제어: 중앙처리장치가 직접 입출력 과정을 관리하고 명령을 수행함
- 프로그램에 의한 입출력 programmed i/o
- 중앙처리장치 내 레지스터 내용이 직접 출력장치에 전송되거나, 입력장치에서 중앙처리장치 내부 레지스터로 전송되고 최종적으로 주기억장치에 저장되는 방식
- 중앙처리장치는 입출력 모듈이 데이터를 수신 또는 송신할 준비가 될 때까지 기다려야 하기 때문에, 효율이 떨어짐
- 인터럽트에 의한 입출력 interrupt-driven i/o
- 중앙처리장치가 입출력 모듈로 읽기 명령을 전송 → 입출력 모듈이 주변장치에서 데이터를 읽어옴, 중앙처리장치는 이 시간동안 다른 작업을 수행함 → 입출력 모듈은 데이터 준비가 완료되면 중앙처리장치로 인터럽트 신호 전송 → 중앙처리장치는 실행 중이던 명령어의 실행을 완료한 후, 입출력 모듈에 인터럽트 신호를 확인했음을 알림 → 확인 신호를 받은 입출력 모듈은 요구 신호를 제거하고 데이터를 넘겨줄 준비를 함 (이때 프로그램 상태 단어 PSW와 프로그램 카운터 PC 내용을 stack에 저장)
- 인터럽트 방식의 입출력에서는 여러 입출력장치가 동시에 중앙처리장치에 서비스를 요청할 수 있음. 따라서 어떤 장치가 인터럽트를 요구했는지 식별하고, 요구가 동시에 발생했을 때 어떤 장치를 먼저 처리할지 결정하는 매커니즘이 필요함
- 다수 인터럽트 선 multiple interrupt lines: 각 입출력 모듈과 중앙처리장치 사이에 별도의 인터럽트 요구 INTR 선과 인터럽트 확인 INTA 선을 연결하는 방식
- 중앙처리장치가 인터럽트를 요구한 장치를 쉽게 찾을 수 있음
- 하지만, 하드웨어가 복잡해지고, 연결 가능한 입출력장치의 수가 INTR 입력 핀 수에 의해 제한됨
- 소프트웨어 폴 polling: 모든 입출력 모듈에 접속된 TEST I/O 선을 이용해 어떤 장치가 인터럽트를 요구했는지 하나씩 검사
- 우선순위 변경이 용이하며, 별도의 복잡한 하드웨어가 필요하지 않음
- 하지만, 장치를 하나씩 검사해야 하므로 처리 시간이 오래 걸림
- 데이지 체인 daisy chain: 모든 입출력 모듈이 하나의 인터럽트 요구 선 INTR을 공유하고, 인터럽트 확인 신호 선 INTA는 직렬 형태로 연결됨
- 중앙처리장치가 INTA 신호를 보내면, 이 신호는 모듈 1 → 모듈 2 → 모듈 3 순서로 전달됨 = 인터럽트를 요구했던 모듈은 이 INTA 신호를 가로채, 다음 모듈로 신호를 전달하지 않음
- 하드웨어가 간단함
- 하지만, 우선순위가 낮은 장치들이 서비스를 받지 못하거나 매우 오래 기다려야 하는 경우가 발생할 수 있음
- 버스 중재 bus arbitration: 입출력 모듈이 인터럽트를 요구하기 전에 먼저 버스에 대한 사용권을 얻어야 하는 방식
- 매 순간 한 모듈만이 인터럽트를 보낼 수 있도록 버스 사용을 통제하는 것!
- 다수 인터럽트 선 multiple interrupt lines: 각 입출력 모듈과 중앙처리장치 사이에 별도의 인터럽트 요구 INTR 선과 인터럽트 확인 INTA 선을 연결하는 방식
- 프로그램에 의한 입출력 programmed i/o
- 중앙처리장치에 의한 제어: 중앙처리장치가 직접 입출력 과정을 관리하고 명령을 수행함

- 입출력 제어 기법
- 직접 기억장치 접근 DMA direct memory access: 입출력 모듈이 중앙처리장치의 개입 없이 주기억장치와 직접 데이터를 교환함
- DMA 제어기: 주기억장치와 입출력 모듈 간의 데이터 전송을 전담하는 하드웨어 장치
- 중앙처리장치는 DMA 제어기로 한 번의 입출력 명령만 전달하고 더 이상 관여하지 않음
- 별도의 입출력 프로세서 사용: 입출력 전담 프로세서를 사용해 중앙처리장치의 부담을 최소화하고 입출력 작업을 병렬로 처리함
- 직접 기억장치 접근 방식과 뭐가 다른가? DMA 제어기는 단순히 데이터를 옮기는 일만 맡는 하드웨어 도구인 반면, 입출력 프로세서는 복잡한 입출력 작업 전체를 처리하고 관리함. 즉, 수행 능력과 자율성의 범위에서 차이가 있음
- 하지만 별도의 고성능 입출력 프로세서를 둬야 하기 때문에 하드웨어 비용이 증가하는 단점이 있음
- 직접 기억장치 접근 DMA direct memory access: 입출력 모듈이 중앙처리장치의 개입 없이 주기억장치와 직접 데이터를 교환함
- 입출력 제어 기법
컴퓨터 버스
- 중앙처리장치와 주기억장치, 입출력장치 간에 정보를 전송하기 위해 공용으로 사용하는 전기적 통로
- 컴퓨터 버스는 다음과 같이 분류할 수 있음
- 기능에 따라
- 데이터 버스 data bus (양방향성)
- 주소 버스 address bus (단방향성: 중앙처리장치 → 입출력장치/기억장치)
- 제어 버스 control bus (양방향성)
- 버스 위치에 따라
- 내부 버스 internal bus: 중앙처리장치 내부의 레지스터, 산술 논리 장치 등을 연결
- 외부 버스 external bus = 시스템 버스: 중앙처리장치와 주기억장치, 입출력장치 등 주요 구성 요소를 상호 연결
- 데이터 처리량에 따라
- ISA: 16비트 버스
- EISA: 32비트 버스
- VESA: 32비트 또는 64비트 버스
- PCI: 주소 또는 데이터 신호의 시분할 다중화를 특징으로 하는 버스 (주소와 데이터를 보낼 때 같은 버스 선을 시간을 나누어 번갈아가며 사용한다는 뜻)
- 기능에 따라
- 버스 성능 지표
- 버스의 폭 width: 버스가 한 번에 전송할 수 있는 비트의 수 = 곧 버스 선의 수
- 버스의 대역폭 bandwidth: 버스가 단위 시간당 전송할 수 있는 데이터 양
- 시스템 버스 system bus
- 중앙처리장치를 중심으로 주기억장치, 외부 기억장치, 입출력장치가 서로 데이터를 교환하는 공통의 통로
- 컴퓨터 버스가 컴퓨터 내 모든 통신 통로를 포함하는 개념이라면, 시스템 버스는 핵심 장치 간의 통신 통로만 일컬음
- 시스템 버스는 다음과 같이 분류할 수 있음
- 신호 사용 방식에 따라
- 전용 버스 dedicated bus: 지정된 신호만을 전송할 수 있음
- 예. 주소 버스는 주소 신호만, 데이터 버스는 데이터 신호만 전송 가능
- 단순하고 빠르지만, 많은 버스 선이 필요해 하드웨어 비용이 큼
- 다중화 버스 multiplexed bus: 제어 신호에 의해 여러 용도의 신호를 전달할 수 있음
- 예. 주소와 데이터를 시간을 나누어 번갈아 가며 전송
- 적은 버스 선의 수로도 가능해 공간과 비용 절감에 유리하나, 제어 회로가 복잡하고 시분할 다중화 방식으로 성능이 저하됨
- 버스의 동작과 동작 타이밍에 따라
- 동기식 버스 synchronous bus: 모든 버스가 공통의 시계 bus clock을 사용
- 모든 데이터 전송 동작은 이 clock 신호의 주기에 맞춰 정확하게 시작하고 끝남
- 비동기식 버스 asynchronous bus: 버스들은 공통의 시계를 사용하지 않고, 장치들이 서로 신호를 주고받아 타이밍을 맞춤
- 버스 동작의 발생 시간이 직전의 동작이 끝났는지에 따라 결정됨
- 동기식 버스 synchronous bus: 모든 버스가 공통의 시계 bus clock을 사용
- 전용 버스 dedicated bus: 지정된 신호만을 전송할 수 있음
- 신호 사용 방식에 따라
- 다중 버스 계층 multiple-bus hierarchy
- ↔ 단일 버스 구조: 하나의 시스템 버스에 중앙처리장치, 주기억장치, 모든 입출력장치가 연결됨
- 구조는 간단하지만, 모든 장치가 하나의 통로를 공유하기 때문에 심각한 성능 저하가 발생할 수 있음
- 예. 전파 지연 propagation delay, 버스 병목 현상 bus bottleneck
- 다중 버스 계층 구조: 연결된 장치들의 작업 수행 속도에 따라 버스를 여러 개로 나누고 계층적으로 연결하여, 전체 시스템의 성능을 최적화하는 것
- 2계층 다중 버스 구조: 중앙처리장치와 주기억장치 간 데이터를 송신하는 경우와, 주변장치와 주기억장치가 직접적으로 데이터를 송신하는 경우에만 시스템 버스를 이용함
- 3계층 다중 버스 구조: 2계층 구조를 조금 더 세분화하여 입출력장치들 사이에서도 속도 차이에 따른 효율을 극대화할 수 있도록 함
- 시스템 버스와 확장 버스 이외에 고속 버스가 추가되어, 주기억장치만큼은 아니지만 빠른 데이터 전송 속도가 요구되는 장치 연결에 사용함
- 주기억장치를 액세스하는 경우에만 시스템 버스를 이용함
- ↔ 단일 버스 구조: 하나의 시스템 버스에 중앙처리장치, 주기억장치, 모든 입출력장치가 연결됨
- 버스 마스터 bus master: 시스템 버스에 연결되어 있으며, 스스로 버스 사용을 요구하고 제어권을 가질 수 있는 컴퓨터의 기본 장치들 (예. 중앙처리장치, 주기억장치, 입출력장치)
- 버스 경합 bus concentration: 여러 개의 버스 마스터들이 동시에 시스템 버스의 사용을 요구하는 상황
- 버스 중재 bus arbitration: 버스 경합 발생 시, 각 버스 마스터가 미리 정해진 기준에 따라 순서대로 버스를 사용할 수 있게 해주는 동작
- 버스 중재를 수행하는 하드웨어 모듈을 버스 중재기 bus arbiter이라고 함
- 버스 중재는 다음과 같이 분류할 수 있음
- 중재 방식은 결합되어 사용될 수 있음
- 중재기 위치에 따라
- 중앙집중식 중재 방식 centralized arbitration scheme: 컴퓨터 시스템 내에 버스 중재기가 한 개만 존재함, 중앙 중재기가 모든 마스터의 요청을 관리하는 방식
- 중앙 중재기가 고장나면 시스템 전체에 영향을 미칠 수 있음
- 분산식 중재 방식 decentralized arbitration scheme: 각 버스 마스터가 별도의 버스 중재기를 가짐
- 한 중재기의 고장이 다른 마스터에 미치는 영향이 적어, 신뢰도가 높음
- 하지만 고장 난 중재기를 찾는 방법이 복잡함
- 중앙집중식 중재 방식 centralized arbitration scheme: 컴퓨터 시스템 내에 버스 중재기가 한 개만 존재함, 중앙 중재기가 모든 마스터의 요청을 관리하는 방식
- 제어 신호 연결 구조에 따라
- 병렬 중재 방식 parallel arbitration scheme: 버스 마스터들은 독립적으로 버스 요구 신호와 버스 승인 신호를 사용함
- 버스 마스터와 같은 수의 버스 요구선과 승인 신호선이 필요함
- 직렬 중재 방식 serial arbitration scheme: 버스 요구선과 승인 신호선이 각각 하나씩만 존재해, 각 신호 선이 버스 마스터들에 직렬로 접속함
- 단 두개의 제어선만 필요해 하드웨어가 간단함
- 병렬 중재 방식 parallel arbitration scheme: 버스 마스터들은 독립적으로 버스 요구 신호와 버스 승인 신호를 사용함
- 우선순위 결정 방식에 따라
- 고정 우선순위 방식 fixed priority scheme: 각 버스 마스터에 우선순위가 지정되면, 시스템 운용 중에는 고정되어 변경할 수 없음
- 가변 우선순위 방식 dynamic priority scheme: 각 버스 마스터의 우선순위를 버스 마스터의 상태 (예. 마지막으로 사용한 시간)에 따라서 수시로 변경할 수 있음
- 하지만 우선순위 결정 및 변화를 적용할 수 있어야 하기에 중재 회로가 복잡함
- 주요 종류
- 회전 우선순위 rotating priority: 버스 사용을 마친 마스터의 우선순위를 가장 낮게 변경하고, 나머지 마스터들의 우선순위를 한 단계씩 높이는 방식
- 임의 우선순위 방식 random priority: 특정 조건에 따라 임의로 우선순위를 결정함
- 동등 우선순위 방식 equal priority: 모든 마스터에게 동등한 기회를 제공함
- 최소-최근 사용 least-recently used: 가장 오랫동안 버스를 사용하지 않은 마스터에게 우선권을 부여함
- 폴링 방식 polling: 버스 중재기가 버스 마스터들의 상태를 검사하여 버스 사용 승인 여부를 결정하는 방식
- 다른 중재 방식과 달리 버스 마스터가 수동적으로 기다린다는 점에서 가장 큰 차이가 있음: 버스 마스터는 단순히 준비 상태만 표시함, 버스 중재기가 능동적으로 각 마스터를 순서대로 검사하는 것
- 버스 요구 신호 선과 폴링 선으로 구성됨
중앙처리장치의 명령어
- 프로그래밍 언어
- 프로그래밍 언어는 컴퓨터에게 명령을 내리는 수단으로, 인간이 이해하기 쉬운 정도에 따라 계층적으로 구분됨
- 고급 프로그래밍 언어 high level programming language
- 문법이 인간의 언어체계와 유사하여 프로그램 작성이 용이함
- 중앙처리장치가 직접 해독할 수 없으므로, 컴파일러 compiler나 인터프리터 interpreter에 의해 기계어로 번역된 후 실행됨
- 예. Java, Python, C
- 저급 프로그래밍 언어 low level programming language
- 중앙처리장치의 형태에 따라 내용이 다르므로, 이식성이 낮음
- 기계어 machine language: 컴퓨터가 직접 해독할 수 있는 2진 숫자로 표현
- 어셈블리 언어 assembly: 기계어의 비트 형식을 사람이 사용하는 언어에 가깝게 연산 코드 mnemonic code로 나타냄
- 예. ADD(더하기), SUB(빼기), MUL(곱하기), DIV (나누기), MOV(이동), LOAD(데이터 읽기), STOR(데이터 쓰기)
명령어 사이클 instruction cycle
- 명령어 인출 사이클 fetch cycle
- 중앙처리장치가 PC가 가리키는 주소에서 명령어를 인출해온 후, IR에 적재함
| clock | 마이크로 연산 | 동작 |
| t0 | MAR ← PC | PC 내용을 MAR memory address register로 전송 |
| t1 | MBR ← M(MAR) PC ← PC + 1 |
MAR의 명령어를 MBR memory buffer register에 적재, PC 내용을 1 증가시켜 다음 명령어 주소를 가리키도록 함 |
| t2 | IR ← MBR | MBR에 있는 명령어를 IR instruction register에 적재 |
- 명령어 실행 사이클 execute cycle
- 이 단계에서 수행되는 마이크로 연산들은 어떤 명령어냐에 따라서 다름
- 예. ADD: 기억장치에 저장된 데이터를 AC의 내용과 더하고, 그 결과를 다시 AC에 저장함
| clock | 마이크로 연산 | 동작 |
| t0 | MAR ← IR | IR에 있는 명령어의 주소를 MAR로 전송 |
| t1 | MBR ← M(MAR) | MAR이 가리키는 주소에서 저장하고 있는 데이터를 MBR로 이동 |
| t2 | AC ← AC + MBR | MBR 데이터와 AC의 내용을 더하고, 결과를 다시 AC에 저장 |
- d
프로그램이 실행되는 계층 구조
하나의 프로그램은 여러 개의 명령어 사이클로 구성되어 있고 → 하나의 명령어 사이클은 명령어 인출 사이클과 명령어 실행 사이클로 구성되어 있고 → 각각의 명령어 인출 사이클과 명령어 실행 사이클은 여러 개의 마이크로 연산으로 구성되어 있음
- 마이크로 연산 micro-operations: 인출 사이클 혹은 실행 사이클을 구성하는 각 단계에서 실제 수행되는 동작
- 원자 연산 atomic operation: 명령어를 실행하기 위한 가장 기본 단위의 프로그램 수행
- 마이크로 연산은 원자 연산에 해당함
명령어 집합 insturction set
- 중앙처리장치가 직접 이해하고 실행하는 기계 명령어이며, 인간이 읽기 쉽도록 어셈블리 코드 형태로 표현됨
- 다음과 같은 사항들을 고려하여 명령어 집합을 설계해야 함
- 연산 종류: 수행할 연산의 수, 종류, 복잡도 등
- 데이터 형태: 연산을 수행할 데이터들의 형태, 길이, 표현 방식 등
- 명령어 형식: 명령어의 길이, 오퍼랜드 필드의 수 등
- 주소 지정 방식: 피연산자의 주소를 지정하는 방식
- 하나의 명령어는 크게 연산 코드와 오퍼랜드로 구성됨
- 연산 코드 operation code, opcode: 중앙처리장치가 수행할 연산의 종류를 지정함
- 연산자, 함수 연산 기능, 전달 기능, 제어 기능, 입출력 기능 등으로 분류됨
- 오퍼랜드 operand: 연산을 수행하는 데 필요한 데이터 또는 데이터의 위치를 나타냄
- 주소, 수, 문자, 논리 데이터 등이 포함됨
- 명령어 형식 instruction format
- 연산 코드 operation code, opcode: 중앙처리장치가 수행할 연산의 종류를 지정함
| 주소 수 | 명령어 형식 구조 |
| 3-주소 | 연산 코드 + 주소1 + 주소2 + 주소3 |
| 2-주소 | 연산 코드 + 주소1 + 주소2 |
| 1-주소 | 연산 코드 + 주소1 |
| 0-주소 | 연산 코드 |
- 특수 목적의 명령어
- 분기 명령어 branch instruction: 프로그램의 실행 순서를 변경하는 명령어
- 오퍼랜드가 다음에 실행할 명령어의 주소를 가지고 있음
- 종류
- 무조건 분기 JUMP: 무조건 오퍼랜드 주소로 PC를 변경함
- 조건부 분기 BNE, BEQ: 특정 조건 만족 시에만 오퍼랜드 주소로 PC를 변경함
- 서브루틴 호출 명령어 subroutine call instruction: 프로그램 실행 흐름을 일시적으로 다른 루틴으로 옮겼다가 다시 돌아오기 위한 명령어
- 호출 명령어 CALL: 현재 PC 내용을 스택에 저장하고, 서브루틴의 시작 주소로 분기
- 복귀 명령어 RET: 중앙처리장치가 원래 실행하던 프로그램으로 돌아가도록
- 분기 명령어 branch instruction: 프로그램의 실행 순서를 변경하는 명령어
| 마이크로 연산 | 동작 |
| MBR ← PC | 현재 위치를 MBR에 임시로 복사 |
| MAR ← SP PC ← X |
stack의 현재 최상단 주소 SP stack pointer를 MAR에 저장 동시에 PC 값을 subroutine 주소 x로 변경 |
| M(MAR) ← MBR SP ← SP - 1 |
stack에 MBR에 복사되어 있는 복귀 주소를 기록하고, SP를 감소시켜 스택이 하나 쌓였음을 표시함 |
| 마이크로 연산 | 동작 |
| SP ← SP + 1 | SP의 위치를 다시 복귀주소가 기록된 곳으로 이동시킴 |
| MAR ← SP | 복귀 주소를 확인 |
| PC ← MAR | 그 주소로 복귀 |
- 명령어 길이에 영향을 주는 요소
- 명령어의 길이는 중앙처리장치의 성능과 효율에 직접적인 영향을 미치며, 주로 다음과 같은 요소들에 의해 결정됨
- 기억장치 용량: 용량이 클수록 주소를 나타내는 비트의 수가 길어져 명령어 길이도 길어짐
- 버스 조직 bus structure: 버스가 한 번에 운반할 수 있는 데이터가 많을수록 명령어 길이도 길어짐
- 중앙처리장치의 복잡도와 속도: 명령어는 중앙처리장치가 한 번에 읽고 쓸 수 있는 단어 word 단위로 수행됨
- 명령어 형식 내에 포함되는 주소 operand의 개수는 프로그램 길이와 중앙처리장치 복잡성에 영향을 미침
| 특징 | 주소 수가 많을수록 (3-주소 등) | 주소 수가 적을수록 (1-주소, 0-주소 등) |
| 명령어 | 복잡해짐 | 인출과 실행 속도가 높아짐 |
| 레지스터 | 레지스터 수가 많아져 연산 속도가 빨라짐 | 레지스터보다 메모리 접근이 많아져 느려질 수 있음 = 주소 수가 많으면 레지스터들끼리만 데이터를 주고받으며 고속으로 연산을 수행할 수 있지만, 주소 수가 적으면 메모리에 자주 의존하게 되어 속도 손해를 볼 수 있음 |
| 프로그램 길이 | 한 명령어에 여러 작업을 처리할 수 있어 프로그램이 짧아짐 (예. A에서 B를 가져와 C에 더한 다음, D에 저장해!) | 같은 명령을 수행하더라도 여러 문장으로 쪼개야 하기 때문에, 같은 작업을 하려면 여러 번 인출 및 실행 사이클을 반복해야 함 = 따라서 프로그램이 길어짐 (A를 가져와. A와 AC를 더해. 결과를 D에 저장해.) |
- 명령어 집합의 복잡도에 따라 컴퓨터 시스템은 두 가지 주요 아키텍처로 분류됨
- 복잡 명령어 집합 컴퓨터 CISC complex instruction set computer
- 전통적인 컴퓨터의 중앙처리장치에서 사용되던 방식
- 하나의 명령어가 매우 복잡하고 다양한 기능을 수행함
- 해석하는 데에 시간이 오래 걸림 = 명령어 해석에 필요한 회로 decoder 등이 복잡해짐 = 명령어를 수행하려면 여러 개의 clock이 소요되어 처리 속도가 느려짐
- 축소 명령어 집합 컴퓨터 RISC reduced instruction set computer
- 중앙처리장치의 명령어 개수를 줄여 하드웨어 구조를 좀 더 간단하게 만든 방식
- 복잡 명령어 집합 컴퓨터 CISC complex instruction set computer
728x90
'데이터분석 > CS 기초' 카테고리의 다른 글
| 컴퓨터구조 1-7주차 (2) | 2025.08.29 |
|---|---|
| 이산수학 1-7주차 (2) | 2025.08.29 |
| 자료구조 1-7주차 (0) | 2025.02.21 |
| 알고리즘 1-7주차 (1) | 2025.02.21 |
| C언어(1) 1-7주차 (1) | 2024.12.27 |