본문 바로가기
Computer Science/시스템 프로그래밍

SIC 컴퓨터 아키텍처와 시스템 소프트웨어 설계 기초

by 큌 2024. 3. 3.
반응형

System SW and Its Machine Dependency 시스템 SW 및 해당 종속성

  • 시스템 소프트웨어의 설계는 실행되는 기계(= 컴퓨터)의 아키텍처에 크게 영향을 받음
    • 예를 들어, 어셈블러는 니모닉 명령어를 기계어 코드로 변환
    • OS 는 컴퓨팅 시스템의 리소스를 직접 관리
  • 시스템의 특정 구현은 시간이 지남에 따라 변경되지만 기본 개념은 변경되지 않음
  • 시스템 소프트웨어의 기본 구조와 설계는 기본적으로 대부분 컴퓨터에서 동일
    • 예를 들어, 모든 기계 아키텍처의 어셈블러 일반적인 디자인과 로직은 거의 동일

Computer Organization and Design: A Reminder 컴퓨터 구성 및 디자인: 리마인드

  • 컴퓨터의 5가지 고전적인 구성요소: 입력, 출력, 메모리, 데이터 경로, 제어, 마지막 두개를 결합하여 프로세서라 부름
  • 이것은 컴퓨터 아키텍처의 일반적인 구성요소

Computer(= Machine) Architecture

  • 간단한 컴퓨터 구조
    • 메모리 장치에는 프로그램(= 명령어 시퀸스)와 데이터가 포함
    • CPU는 ALU를 통해 명령을 실행하여 프로그램을 실행
      • ALU는 수학적 및 논리적 연산을 수행
    • 제어 장치는 CPU의 동작을 정리하고, 다른 구성 요소의 동작을 시퀀싱하여 프로그램을 실행
      • “Fetch-Decode-Execute” cycle


The Fetch-Decode-Execute Cycle

  • 프로그램의 마지막 명령(보통 HALT, STOP, QUIT)에 도달할때 까지 다음 3단계를 계속 반복
    • Fetch: 메모리에서 실행될 다음 명령어 가져오기
    • Decode: 디코딩(= 수행할 작업 결정)
    • Excute: ALU, 메모리 및 I/O 컨트롤러에 적절한 명령을 실행하여 실행


SIC(Simplified Instructional Computer)

  • 실제 시스템에서 가장 자주 볼 수 있는 H/W 기능을 포함하는 가상의 컴퓨터, 특이하거나 관련 없는 복잡성은 제외
    • 시스템 소프트웨어의 기본 개념을 이해하기 위해 특정 구현 세부 사항과 분리
  • 상위 호환성이 있는 두가지 버전 존재
    • SIC: 표준 모델
    • SIC/XE: eXtra 장비(또는 고가) 모델
      • SIC용 프로그램은 SIC/XE 시스템에서 실행가능


SIC Machine Architecture 1

  • 일반 메모리
    • 메모리는 주소가 0에서 시작하여 해당 배열에 대한 인덱스 역할을 하는 큰 1차원 배열일 뿐
    • Cells 이라고 하는 고정된 크기 단위로 나뉨, 각 Cell은 주소라는 고유 식별자와 연결
    • 위치 주소를 지정하기만 하면 메모리의 모든 위치에 매우 빠르게 액세스 가능
    • 프로그램(및 데이터)은 실행될 때 주 메모리에 저장
    • RAM은 데이터를 한 곳에서 다른 곳으로 매우 빠르게 이동할 수 있는 방식으로 CPU에 연결
  • SIC 메모리
    • 8비트 바이트로 구성: 3-byte words (24bit)
      • 일반적인 컴퓨터는 4-byte
    • 사용가능 최대 메모리: 32KB(2^15Byte)

<간단한 예시>

전체 크기가 32KB 이걸 2^15승으로 바꿀 수 있음

15는 메모리 주소를 표현하는데 필요한 비트 수


SIC Machine Architecture 2

  • 일반 레지스터
    • 임시 데이터를 저장하는 데 사용되는 CPU 내부의 개별 고속 저장 장치
    • 일부는 특정 목적을 위해 전용되고, 다른 일부는 계산 중에 임시 저장소로 사용
  • SIC 레지스터
    • 5종류 특수 목적 레지스터
      • A(0): Accumulator. 기본 산술 연산용
      • X(1): Linkage register. 주소 지정을 위한 인덱스 값 저장용
      • L(2): Program Counter. 특정 메모리 주소 저장/점프용
      • PC(8): Program Counter. 실행할 다음 명령어의 주소 저장용
      • SW(9): Status Word. 비교 및 조건부 점프 명령에 사용되는 CC(조건 코드) 비트 등 다양한 정보 저장용

SIC Machine Architecture 3

  • 데이터 형식
    • 정수는 24비트 이진수 형태로 저장
      • 음수 값은 2의 보수 표현 사용
      • 일반적인 현대 컴퓨터 시스템과 동일
    • 문자는 8비트 아스키 코드 형태로 저장
    • 부동 소수점 하드웨어 없음
  • 기계 명령어 형식
    • SIC 표준 버전의 모든 명령어는 24비트
    • 8bit opcode, 1bit x, 15bit address
      • Operation code field: 하드웨어가 인식하는 각 기계 언어 작업에 할당된 고유 번호(부록 A 참조)
      • Address field: 작업이 작동할 값의 메모리 주소
  • SIC는 오직 1개의 포멧 소유

Int, Char 데이터 형식만 사용 가능


SIC Machine Architecture 4

  • 일반적인 주소 지정 모드
    • 레지스터에 저장된 정보 및/또는 기계 명령어에 포함된 상수를 사용하여 피연산자의 유효(= 대상) 메모리 주소를 계산하는 방법을 지정
  • SIC의 주소 지정 모드
    • Direct addressing mode: flag bit x = 0
      • Target Address = Address
    • Indexed addressing mode: flag bit x = 1
      • Target Address = Address + X(레지스터 X의 값, (명령의 'x'비트가 아님)

 


<간단한 예시>

SIC에는 어드레싱 모드가 2개가 있음, 이 어드레싱 모드에 따라 피연산자의 주소를 계산할 수 있음

피연산자의 주소를 계산할 수 있어야하고, 이 어드레싱 모드에 따라 계산됨

X 레지스터에 값을 저장해두고 Address에 더하여 타겟 주소를 저장


SIC Machine Architecture 5

  • 명령어 집합(일반)
    • CPU가 인식하고 실행할 수 있는 기계 코드로 된 모든 명령의 완전한 집합
    • 프로세서에 필요한 작업을 지시하는 명령을 제공
    • 주소 지정 모드, 명령, 네이티브 데이터 유형, 레지스터, 메모리 아키텍처, 인터럽트, 예외 처리 및 외부 I/O를 정의
    • ISA(Instruction Set Architecture)”라고도 함

SIC Machine Architecture 6

  • SIC에서 제공하는 기본 명령어 집합
    • Load or Store: LDA, LDX, STA, STX
      • LDA m ? A ← (m .. m + 2), 여기서 A와 m 은 레지스터 A와 메모리(3Byte)를 나타냄
      • 각각 주소는 메모리 위치 m ~ m+2의 내용이 레지스터 A에 로드되도록 지정
      • STA m ? m .. m + 2 ← (A)
      • 레지스터 A의 내용이 주소 m으로 시작하는 word에 저장되도록 지정
    • Integer Arithmetic operations 정수 산술 연산: ADD, SUB, MUL, DIV
      • ADD m ? A ← (A) + (m..m+2)
      • SUB m ? A ← (A) - (m..m+2)
      • MUL m ? A ← (A) * (m..m+2)
      • DIV m ? A ← (A) / (m..m+2)
      • 모든 산술 연산은 레지스터 A와 메모리에 있는 단어를 포함하며, 결과는 레지스터 저장

SIC Machine Architecture 7

  • SIC에서 제공하는 기본 명령어 집합
    • Comparison 비교: COMP
      • COMP m ? (A) : (m..m+2), 레지스터 SW에 CC코드를 저장하여 값 표현
      • 레지스터 A의 값을 메모리에 있는 단어와 비교하고, 레지스터 SW의 조건 코드(CC)를 설정하여 결과를 나타내는 것을 의미
      • < → 01 bits, = → 00bits, or > → 10 bits
    • Conditional Jump 비교 점프: JLT, JEQ: JGT
      • CC 설정을 테스트하고 그에 따라 점프
      • JLT m ? PC ← m if CC set to <
      • JEQ m ? PC ← m if CC set to =
      • JGT m ? PC ← m if CC set to >

<간단한 예시>

기본적으로 COMP 연산은 A레지스터와 메모리 값의 데이터의 비교하고 CC 필드에 상태를 저장

CC 필드에 있는 값이 비교 결과 값

CC 필드의 설정 결과 값에 따라 비교 점프를 실행하여 m의 위치로 이동하여 명령 실행

분기를 만드는 코드

PC ← m : PC 레지스터에 m 메모리 주소 저장, 이후 PC에 저장된 m 명령을 실행


SIC Machine Architecture 8

  • SIC에서 제공하는 기본 명령어 집합
    • Subroutine linkage: JSUB, RSUB
      • JSUB m ? L ← (PC); PC ← m
      • JSUB는 서브루틴으로 점프하여 레지스터 L에 주소를 배치
      • RSUB ? PC ← (L)
      • RSUB는 레지스터 L에 포함된 주소로 점프하여 반환

<간단한 예시>

JSUB, RSUM 모두 코드 플로우 조작

JSUB은 메서드를 호출하는 것과 유사, 코드 블럭을 나누는 용도(SUB Routine)

일단 무조건 점프해서 m에서 실행

서브루틴을 마지막에는 무조건 RSUB가 있음, 메소드의 리턴과 유사

JSUB → 서브루틴 코드 실행 → RSUB

JSUB를 실행하면 JSUB의 다음 코드 주소 값이 L에 저장, 서브 루틴 시작 주소 값은 메모리에서 PC로 이동

서브루틴 코드 실행 후 RSUB을 만남

RSUB이 실행되면 L에 저장된 주소로 다시 돌아함

돌아갈 주소값을 저장하는 레지스터 L


SIC Machine Architecture 9

  • SIC에서 제공하는 기본 명령어 집합
    • – I/O (Input and Output) 입출력
      • 레지스터 A의 맨 오른쪽 8비트 사이에서 한 번에 1바이트씩 전송하여 수행
      • 각 장치에는 고유한 8비트 코드가 할당
      • 3가지 명령어: TD (test device), RD (read data) , WD (write data)
        • TD m ? (m)에 의해 지정된 장치가 데이터 바이트를 전송 및 수신 준비가 되었는지 테스트
          • 장치가 준비되면 레지스터 SW의 CC가 "<"로 설정
          • 그렇지 않으면 CC가 "="로 설정
        • RD m ? A [맨 오른쪽 바이트] ← 지정된 장치의 데이터(m)
        • WD m ? 지정된 장치의 데이터 (m) ← A[맨 오른쪽 바이트]

<간단한 예시>

SIC에서는 한번에 한 바이트씩 I/O 디바이스에 이동할 수 있음

이것이 레지스터 A에 저장되거나 A에서 꺼냄


Figure 1.2(a) – for SIC

LDA FIVE → FIVE를 레지스터 A에 저장
STA ALPHA → 레지스터 A에 있는 값을 ALPHA에 저장
LDCH CHARZ → 캐릭터 데이터를 레지스터에 저장
STCH C1 → 레지스터 A에 있는 데이터를 C1으로 이동
...
ALPHA RESW 1 → 상수 ALPHA 메모리에 1 할당
FIVE WORD 5 → 상수 FIVE 메모리에 5 할당
CHARZ BYTE C’Z’ → 상수 CHARZ 메모리에 C'Z' 할당
C1 RESB 1 → 상수 C1 메모리에 1 할당

상수 값을 정의하기 위한 구문

우측은 상수가 저장된 메모리 어드레스

중간은 메모리에 빈공간을 할당하기 위한 구문(RESW는 WORD, RESB는 BYTE)

오른쪽은 크기

반응형