Archive

컴퓨터구조 9-14주차 본문

데이터분석/CS 기초

컴퓨터구조 9-14주차

neonii 2025. 10. 18. 23:44
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
      • 전가산기 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
      • 병렬 가산기 parallel adder
        • 전가산기를 필요한 비트 수만큼 병렬로 연결하여 구현함
    • 비교기 comparator
      • 두 2진수의 크기를 비교하는 회로

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

    • 멀티플렉서 multiplexer
      • 여러 개의 입력을 하나로 출력하는 회로
      • 예. 4x1 멀티플렉서: 4개의 입력을 1개의 출력으로
    • 디멀티플렉서 demultiplexer
      • 한꺼번에 들어온 입력을 여러 개로 출력하는 회로
      • 예. 1x4 디멀티플렉서: 1개의 입력을 4개의 출력으로
    • 코드 변환기 code converter
      • 2진 코드를 다른 2진 코드로 변환
  • 구동 신호
    • enable 신호: 회로를 작동시킴
    • invert 신호: 신호를 반전시킴

순차 논리회로 sequential logic circuit

  • 출력이 현재의 입력값뿐만 아니라 회로의 이전 상태의 영향도 받아 결정됨
  • 기억 장치 있음
  • 순차 논리회로는 플립플롭 flip-flop이라는 기억 소자를 여러 개 연결하여 만듦. 이 플립플롭들은 신호가 입력된 후 출력이 바뀔 때까지 시간이 좀 걸리는데, 이를 전파 지연 propagation delay라고 함. 따라서 플립플롭이 여러 개 직렬로 연결될 경우, 각 단의 전파 지연이 누적되어 전체 회로의 동작 속도가 느려지거나 회로가 잘못된 상태로 인식될 수 있음. → 이러한 문제를 해결하기 위해
    • 동기식 synchronous 회로
      • 모든 플립플롭이 동시에 클록 펄스를 통해 신호를 받음  모든 플립플롭이 같은 타이밍에 상태를 바꾸기 시작
      • 클럭 주기를 각 플립플롭의 최대 지연 시간보다 충분히 길게 설정하면, 모든 플립플롭이 안정된 상태로 바뀐 후에야 다음 플럭이 인가될 것
      • 설계가 간단하고 안정적이라, 고속으로 동작하는 대부분의 디지털 시스템에서 사용됨
    • 비동기식 asynchronous 회로
      • 맨 앞의 플립플롭만 신호를 받고, 그 플립플롭의 출력이 다음 플립플롭의 입력 신호가 됨
      • 전파 지연 누적 문제를 해결하긴 어려우나, 모든 회로가 매 클럭마다 동작할 필요가 없을 때 필요한 부분만 동작시켜 전력 소모를 줄이는 데 유리하고, 전역 클럭을 기다릴 필요 없이 입력 변화에 즉시 반응해야 하는 특정 인터페이스나 소규모 회로에 사용 가능해, 가끔 동기식 회로보다 유리할 때가 있음
  • 종류
    • 플립플롭 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)
    • RAM

컴퓨터 구성

  • 컴퓨터의 특징: 신속성, 신뢰성, 정확성, 대용량성, 공유성
  • 컴퓨터의 기능: 입력 기능, 기억 기능, 연산 기능, 제어 기능, 출력 기능
  • 컴퓨터 시스템의 작동 과정
    • 컴퓨터에 전원이 들어왔을 때, 가장 먼저 작동하는 것은 펌웨어 firmware. 중앙처리장치, 메모리, 그래픽 카드 등 핵심 하드웨어 장치들이 정상적으로 작동하는지 점검하고, 각 장치들을 사용할 수 있도록 초기 설정을 로드함. 하드디스크 같은 저장 장치에서 운영체제를 RAM으로 불러오기도 함.
    • 펌웨어가 운영체제를 로드하면, 그 시점부터 컴퓨터의 모든 동작 제어를 운영체제가 맡음.
    • 운영체제가 완전히 구동되어 시스템 환경을 준비하면, 사용자는 비로소 문서 작성, 인터넷 서핑, 게임 등의 응용 소프트웨어를 실행할 수 있음.
  • 주변 장치 peripheral device
    • 컴퓨터 본체 외부에 연결되어 컴퓨터 기능과 사용성을 확장하는 장치들
    • 입출력 장치 input output device
      • 예. 키보드, 마우스, 스캐너, 모니터 등
    • 미디어 처리장치
      • 오디오, 비디오 등의 미디어를 처리함
      • 예. 사운드 카드: 소리를 디지털 방식으로 변환함
      • 예. 비디오 카드: 그래픽 정보를 아날로그 비디오 신호로 변환하여 모니터에 표시함
    • 보조기억장치
      • 컴퓨터 외부에서 프로그램이나 데이터를 보관하기 위한 기억장치
      • 예. 하드디스크, 플로피디스크, 자기테이프
    • 통신장치
      • 인터넷을 사용하기 위해 필요한 장치
      • 예. LAN local area network 카드: 인접 PC들을 연결해줌
      • 예. MODEM modulator demodulator: 디지털 신호와 아날로그 신호를 연결?

https://share.google/images/BbYXkiuFf3nzD76ty

  • 주회로기판 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
    1. 인출 fetch: 명령어를 주기억장치에서 불러오는 단계
    2. 해독 decode: 명령어를 해석하는 단계
    3. 실행 execute: 명령어를 실행하는 단계
    4. 저장 store: 명령어 실행 결과를 주기억장치에 저장하는 단계
  • 명령어 처리 속도
    • 클록 clock
      • 중앙처리장치가 일정한 간격으로 보내는 전기적 신호
      • 이 틱 tick 한 번에 중앙처리장치는 하나의 작업을 수행할 수 있는 최소한의 시간을 얻게 됨
    • 클록 주파수 (단위 Hz)
      • 1초에 클록이 몇 번 발생하는지
      • 클록 주파수가 클수록 빠른 것
    • 명령어 처리 속도
      • 초당 처리하는 명령어의 개수로 표현 (단위 MIPS million instruction per second)
      • 대부분의 명령어는 여러 클록 주기에 걸쳐 실행
        • 예. 한 개의 명령어를 처리하는 데 3개의 클록 주기가 필요함

중앙처리장치

  • 연산 장치 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

주기억장치

  • 주기억장치의 동작
    • 쓰기 동작 모드
      1. 입력 장치 또는 보조기억장치 → 주기억장치: 입력 정보 전달 (예. 키보드로 문서를 타이핑하거나, USB에 있는 파일을 열면, 그 정보가 컴퓨터의 작업 공간인 메모리로 옮겨짐)
      2. 기록회로: 입력정보는 바로 저장되는 것이 아니라, '기록회로'라는 임시 대기 공간에 잠시 머무르게 됨
      3. 기억매체: 입력정보는 '기억매체'에 저장됨, 정보를 저장하는 아주 작은 단위의 부품들이 빼곡하게 들어있음
      4. 번지선택회로: 기록회로에 있던 데이터를 기억매체 내의 정해진 위치로 보내주는 역할을 함
    • 쓰기 시간 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: 데이터를 빠르게 지우고 쓸 수 있음

캐시기억장치

  • 꼭 있어야 하는 건 아님!
  • 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비트의 태그를 이용하여 갱신된 캐시기억장치의 블록을 표시해두고, 새로운 블록에 의해 캐시기억장치에서 삭제되는 교체가 이뤄지기 전에 주기억장치로 복사함
      • 블록 크기 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 = 탐색 시간 + 회전 지연 시간
  • 광디스크 기억장치
    • 알루미늄 금속성 원판의 표면에 레이저 쏘아 태운 부분과 그렇지 않은 부분으로 정보를 기록
    • 강도가 약한 레이저 광선을 쏘아 반사시킨 후에, 반사된 빛을 광 다이오드에서 수신하여 다시 전기 신호로 만듦
    • 정보 기록 여부에 따라 다음과 같이 분류할 수 있음: 읽기 전용 ROM, 한번 기록용 WORM, 재기록용 CD-RW

입출력장치

  • 입력장치의 종류: 키보드, 지시장치, 원시 데이터 입력장치
  • 출력장치의 종류: 소프트 카피 출력장치, 하드 카피 출력장치
    • 프린터와 관련된 단위: CPS character per second, LPM line per minute, PPM page per minute
  • 입출력 겸용장치의 종류: 사운드 카드, 영상 카드, 통신 접속 장치
  • 입출력 모듈 = 입출력 인터페이스 = 입출력 채널 = 입출력 프로세서 = 입출력 제어기 = 장치 제어기
    • 중앙처리장치와 입출력장치 사이에서 데이터 통신을 중재하고 제어하는 장치
    • 왜 필요할까? 속도 차이 때문!
      • 입출력장치는 중앙처리장치 및 주기억장치에 비해 동작 속도가 매우 느림
      • 따라서 입출력장치를 중앙처리장치에 직접적으로 연결하지 않고 중간에 입출력 모듈이라는 별도의 차이를 통해 연결하는 것
    • 주요 기능
      • 내부 장치들과 외부 장치들 사이의 데이터 흐름을 조정
        • 적절한 타이밍에 데이터를 전송할 수 있도록 함
        • 데이터 버퍼링 data buffering; 속도가 느린 주변장치와 빠른 중앙처리장치 사이에서 데이터를 일시적으로 저장하여 속도 차이를 완화할 수 있도록 함
      • 중앙처리장치와의 통신: 중앙처리장치의 명령을 받아 주변장치를 제어하거나, 주변장치의 상태 및 데이터를 중앙처리장치에게 전달함
      • 오류 검출: 주변장치와 데이터를 주고받는 과정에서 발생할 수 있는 통신 오류를 감지하고 중앙처리장치에 보고함 (예. 프린터 종이 걸림)
      • 입출력장치들 간의 통신
    • 입출력장치가 중앙처리장치에게 데이터를 보내기 위해 입출력 모듈을 통해 제어되는 5단계 과정
      1. 중앙처리장치가 입출력 모듈에게 입출력장치의 상태를 검사하도록 요청
      2. 입출력 모듈이 중앙처리장치에게 입출력장치의 상태를 보고 (busy, ready, 결함)
      3. 만약 입출력장치가 준비 상태라면, 중앙처리장치가 데이터 전송을 요청
      4. 입출려 모듈이 입출력장치로부터 데이터를 수신
      5. 입출력 모듈이 중앙처리장치로 데이터를 전송
    • 내부 조직
      • 데이터 레지스터: 입출력장치로부터 수신된 데이터 일시 저장 = 데이터 버퍼링
      • 상태/제어 레지스터: 입출력장치의 현재 상태 저장
    • 입출력 제어기법
      • 중앙처리장치에 의한 제어: 중앙처리장치가 직접 입출력 과정을 관리하고 명령을 수행함
        • 프로그램에 의한 입출력 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: 입출력 모듈이 인터럽트를 요구하기 전에 먼저 버스에 대한 사용권을 얻어야 하는 방식
              • 매 순간 한 모듈만이 인터럽트를 보낼 수 있도록 버스 사용을 통제하는 것!


    • 입출력 제어 기법
      • 직접 기억장치 접근 DMA direct memory access: 입출력 모듈이 중앙처리장치의 개입 없이 주기억장치와 직접 데이터를 교환함
        • DMA 제어기: 주기억장치와 입출력 모듈 간의 데이터 전송을 전담하는 하드웨어 장치
        • 중앙처리장치는 DMA 제어기로 한 번의 입출력 명령만 전달하고 더 이상 관여하지 않음
      • 별도의 입출력 프로세서 사용: 입출력 전담 프로세서를 사용해 중앙처리장치의 부담을 최소화하고 입출력 작업을 병렬로 처리함
        • 직접 기억장치 접근 방식과 뭐가 다른가? DMA 제어기는 단순히 데이터를 옮기는 일만 맡는 하드웨어 도구인 반면, 입출력 프로세서는 복잡한 입출력 작업 전체를 처리하고 관리함. 즉, 수행 능력과 자율성의 범위에서 차이가 있음
        • 하지만 별도의 고성능 입출력 프로세서를 둬야 하기 때문에 하드웨어 비용이 증가하는 단점이 있음

컴퓨터 버스

  • 중앙처리장치와 주기억장치, 입출력장치 간에 정보를 전송하기 위해 공용으로 사용하는 전기적 통로
  • 컴퓨터 버스는 다음과 같이 분류할 수 있음
    • 기능에 따라
      • 데이터 버스 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: 버스들은 공통의 시계를 사용하지 않고, 장치들이 서로 신호를 주고받아 타이밍을 맞춤
            • 버스 동작의 발생 시간이 직전의 동작이 끝났는지에 따라 결정됨
  • 다중 버스 계층 multiple-bus hierarchy
    • ↔ 단일 버스 구조: 하나의 시스템 버스에 중앙처리장치, 주기억장치, 모든 입출력장치가 연결됨
      • 구조는 간단하지만, 모든 장치가 하나의 통로를 공유하기 때문에 심각한 성능 저하가 발생할 수 있음
      • 예. 전파 지연 propagation delay, 버스 병목 현상 bus bottleneck
    • 다중 버스 계층 구조: 연결된 장치들의 작업 수행 속도에 따라 버스를 여러 개로 나누고 계층적으로 연결하여, 전체 시스템의 성능을 최적화하는 것
      • 2계층 다중 버스 구조: 중앙처리장치와 주기억장치 간 데이터를 송신하는 경우와, 주변장치와 주기억장치가 직접적으로 데이터를 송신하는 경우에만 시스템 버스를 이용함
      • 3계층 다중 버스 구조: 2계층 구조를 조금 더 세분화하여 입출력장치들 사이에서도 속도 차이에 따른 효율을 극대화할 수 있도록 함
        • 시스템 버스와 확장 버스 이외에 고속 버스가 추가되어, 주기억장치만큼은 아니지만 빠른 데이터 전송 속도가 요구되는 장치 연결에 사용함
        • 주기억장치를 액세스하는 경우에만 시스템 버스를 이용함
  • 버스 마스터 bus master: 시스템 버스에 연결되어 있으며, 스스로 버스 사용을 요구하고 제어권을 가질 수 있는 컴퓨터의 기본 장치들 (예. 중앙처리장치, 주기억장치, 입출력장치)
  • 버스 경합 bus concentration: 여러 개의 버스 마스터들이 동시에 시스템 버스의 사용을 요구하는 상황
  • 버스 중재 bus arbitration: 버스 경합 발생 시, 각 버스 마스터가 미리 정해진 기준에 따라 순서대로 버스를 사용할 수 있게 해주는 동작
    • 버스 중재를 수행하는 하드웨어 모듈을 버스 중재기 bus arbiter이라고 함
    • 버스 중재는 다음과 같이 분류할 수 있음
      • 중재 방식은 결합되어 사용될 수 있음 
      • 중재기 위치에 따라
        • 중앙집중식 중재 방식 centralized arbitration scheme: 컴퓨터 시스템 내에 버스 중재기가 한 개만 존재함, 중앙 중재기가 모든 마스터의 요청을 관리하는 방식
          • 중앙 중재기가 고장나면 시스템 전체에 영향을 미칠 수 있음
        • 분산식 중재 방식 decentralized arbitration scheme: 각 버스 마스터가 별도의 버스 중재기를 가짐
          • 한 중재기의 고장이 다른 마스터에 미치는 영향이 적어, 신뢰도가 높음
          • 하지만 고장 난 중재기를 찾는 방법이 복잡함
      • 제어 신호 연결 구조에 따라
        • 병렬 중재 방식 parallel arbitration scheme: 버스 마스터들은 독립적으로 버스 요구 신호와 버스 승인 신호를 사용함
          • 버스 마스터와 같은 수의 버스 요구선과 승인 신호선이 필요함
        • 직렬 중재 방식 serial 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
주소 수 명령어 형식 구조
3-주소 연산 코드 + 주소1 + 주소2 + 주소3
2-주소 연산 코드 + 주소1 + 주소2
1-주소 연산 코드 + 주소1
0-주소 연산 코드
  • 특수 목적의 명령어
    • 분기 명령어 branch instruction: 프로그램의 실행 순서를 변경하는 명령어
      • 오퍼랜드가 다음에 실행할 명령어의 주소를 가지고 있음
      • 종류
        • 무조건 분기 JUMP: 무조건 오퍼랜드 주소로 PC를 변경함
        • 조건부 분기 BNE, BEQ: 특정 조건 만족 시에만 오퍼랜드 주소로 PC를 변경함
    • 서브루틴 호출 명령어 subroutine call instruction: 프로그램 실행 흐름을 일시적으로 다른 루틴으로 옮겼다가 다시 돌아오기 위한 명령어
      • 호출 명령어 CALL: 현재 PC 내용을 스택에 저장하고, 서브루틴의 시작 주소로 분기
      • 복귀 명령어 RET: 중앙처리장치가 원래 실행하던 프로그램으로 돌아가도록
마이크로 연산 동작
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
      • 중앙처리장치의 명령어 개수를 줄여 하드웨어 구조를 좀 더 간단하게 만든 방식
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