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

SIC (Simplified Instructional Computer)

by sepang 2021. 9. 9.

  학교의 '시스템 프로그래밍'과목을 복습하며 정리하는 글이다. 그러므로 이 글은 아주대학교 오상은 교수님의 '시스템 프로그래밍' 수업을 바탕으로 한다. 소프트웨어는 응용 소프트웨어와 시스템 소프트웨어로 나눌 수 있는데 여기서는 후자에 대해 다룬다.


System SW and Its Machine Dependency

  시스템SW의 디자인은 그것이 동작하는 컴퓨터 architecture의 영향을 많이 받는다. 예를 들어 어셈블러는 mnemonic 명령을 기계어로 번역하고 OS는 컴퓨팅 시스템의 자원을 직접 관리한다.

  하지만 시스템의 특정 구현은 계속해서 변경됨에도 그 본질인 기본 개념은 변하지 않는다. 대부분의 컴퓨터에 있는 어셈블러의 일반적인 디자인과 로직은 동일한 것 처럼, 시스템SW 디자인의 기본구조는 대부분의 컴퓨터가 동일하다.

Computer Organization and Design

 컴퓨터에는 5가지의 전형적인 요소가 있다. input, output, memory, datapath, control이 그것이다. 마지막 두 개는 가끔 합쳐져서 processor라고 불리기도 한다.

Structure of a simple computer

   위 사진은 simple computer의 구조를 나타낸 그림이다. 위에서 언급한 input, output, memory를 확인할 수 있다. 화살표는 datapath라고 보면 된다. memory는 프로그램(= 명령어들의 순서)과 데이터를 담고 있다. 그리고 Central Processing Unit(CPU)은 Arithmetic Logic Unit(ALU)을 명령들을 수행함으로써 프로그램을 실행한다. 여기서 ALU는 수학적, 논리적 작업을 수행한다. Control Unit은 프로그램을 실행하기 위해  CPU의 동작을 구성하고 다른 구성 요소의 동작을 순서대로 지정한다. 이렇게 프로그램이 끝나기 전까지 Control unit은 해당 작업을 반복하는데 이를 'Fetch-Decode-Execute' cycle이라고 한다.

Fetch-Decode-Execute' cycle

  • Fetch: memory에서 다음에 실행할 명령어를 가져온다.
  • Decode: 가져온 명령어를 해석하여 수행할 작업을 결정한다.
  • Execute: ALU, memory 및 I/O controller에 적절한 명령을 내려 실행

 

SIC machine architecture

  SIC(Simplified Instructional Computer)는 가상의 컴퓨터다. SIC는 실제 컴퓨터에서 가장 자주 볼 수 있는 HW 기능을 포함하지만 특이하거나 관련 없는 복잡성은 피한다.  그래서 컴퓨터의 기본 구조를 쉽게 이해할 수 있다. 시스템 SW의 기본 개념을 이해하기 위해 구체적인 구현 정보는 떼어놓고 생각하자.

  SIC에는 두가지 버전이 있는데, 표준 모델인 SIC가 있고, 상위호환 버전인 SIC/XE가 있다. 우선 SIC의 machine architecture에 대해서 살펴보자.

Memory

  일반적인 메모리(memory)에 대해 알아보자

  • 0에서 시작하며 해당 배열의 index역할을 하는 주소가 존재한다.
  • cell이라는 고정된 크기의 단위로 나눠지는데 각 cell은 주소를 이용하여 식별된다.
  • 주소를 지정하는 것만으로 메모리의 모든 위치에 빠르게 접근할 수 있다.
  • 프로그램이 실행될 때 메인 메모리에 저장된다.
  • CPU와 연결되어 있어서 데이터가 한 곳에서 다른 곳으로 매우 빠르게 이동할 수 있다.

  여기에 SIC의 메모리는 다음과 같은 특징을 가진다.

  • bytes(= 8-bit), words(3-bytes, 일반적인 컴퓨터는 4bytes다 혼동금지)라는 단위들로 구성
  • 사용가능한 최대 memory size는 32KB(2^15 bytes), 때문에 주소를 나타내기 위해 15bits가 필요

Register

  일반적인 레지스터(register)에 대해 알아보자.

  • CPU 내부에 있는 고속 저장소이고, 일시적인 데이터를 담고 있다.
  • 어떤 레지스터들은 특정 용도로만 사용되고, 나머지는 계산 후 임시 저장소로 사용된다.

  그럼 SIC에 있는 register 종류에 대해 알아보자. 이들 모두 크기가 24-bits이며 각자 고유한 unique number를 가진다.

  • A(0, Accumulater): 기본 산술 연산(ex. ADD, SUB, ...)
  • X(1, Index register): addressing을 위한 index 값을 저장. 메모리의 처음 주소인 base가 있다면 base + i로 메모리의 각 칸을 특정할 수 있는데 이때의 i값이 index다.
  • L(2, Linkage register): 저장이나 이동(jump)을 위한 특정 메모리 주소들을 담음. 예를 들어 함수가 실행될 때 사용된다.
  • PC(8, Program Counter): 다음 명령의 주소를 담는다.
  • SW(9, Status Word): 비교 및 conditional jump 명령(ex. if, else if, ...)에 사용되는 CC bits와 같은 다양한 정보를 저장한다.

Data Formats

  Integers는 24-bit 이진수로 저장된다. 2의 보수는 음수를 표현하는데 사용된다.

  Characters는 8-bit의 아스키 코드를 사용하여 저장한다.

Machine Instruction Formats

  SIC 표준 버전의 모든 명령어는 24-bit format을 가진다

instruction format

  • Operation code field(=opcode): 하드웨어가 인식하는 각 기계어 동작에 할당된 고유번호
  • Address field: 작동할 값의 메인 메모리 주소. operands(피연산자)의 주소이다.

  x field의 의미는 다음 내용에서 확인하자.

Addressing Models in SIC

  SIC에서는 어떻게 명령어에 포함된 정보(instructon format의 address field)를 사용하여 주소를 계산할까? 사용가능한 두가지 addressing model이 있다. 어떤 모델을 사용할 지는 x field의 값으로 결정된다.

  • Direct addressing mode: 직접 주소를 지정하고 flag bit(x=0)일 때 해당 model이 사용된다. address field의 값이 바로 Target address 값이 되는 것이다.
  • Indexed addressing mode: flag bit(x=1)일 때 사용된다. address field의 값이 base가 되고 여기에 X register에 저장된 값을 더해서 주소를 특정한다.

A basic set of insturctions provided by SIC

  Instruction Set은 CPU에 의해 인식되고 실행될 수 있는 기계어의 모든 명령 집합이다.

  • 프로세서에 명령을 제공하여 필요한 작업을 알려준다.
  • addressing mode, instructions, native data types, registers, memory architecture, interrupt, exception handling, and external I/O로 구성됩니다.
  • ISA(Instruction Set Architecture)라고도 한다.

Load or Store instructions: LDA,  LDX, STA, STX, ...

A는 A register, X는 X register를 의미한다.

  • LDA m (A <- (m, m+1, m+2)): 메모리 위치 m에서 m+2까지의 내용을 A register에 담는다.
  • STA m ((m,m+1,m+2) <- A): A register의 내용을 m부터 시작하는 word에 저장한다.

Integer Arithmetic operations: ADD, SUB, MUL, DIV

 모든 산술연산은 A register와 memory의 word를 사용하며 그 결과는 A register에 남는다.

  • 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)

Comparison: COMP

  • COMP m ? (A) : (m..m+2): A register의 값을 memory에 있는 word와 비교하고 SW register의 CC(Condition Code)를 설정하여 결과(<, =, >)를 나타낸다.

Conditional JumpJLT, JEQ, JGT

  해당 명령들은 CC의 값을 확인하여 그에 따라 jump한다.

  • JLT m ? PC <- m if CC set to <: CC의 setting이 '<'로 설정되어 있으면 PC의 값을 m으로 바꾼다.
  • JEQ m ? PC <- m if CC set to =: CC의 setting이 '='로 설정되어 있으면 PC의 값을 m으로 바꾼다.
  • JGT m ? PC <- m if CC set to >: CC의 setting이 '>'로 설정되어 있으면 PC의 값을 m으로 바꾼다.

Subroutine linkage: JSUB, RSUB

  예를 들어, 함수가 호출될 때 해당 명령이 수행된다. JSUB 명령어를 통해 다른 위치로 이동했다가 RSUB를 이용해 이동하기 전 다음 insturction으로 돌아온다. main 함수에서 다른 함수를 호출하고 이 함수가 종료된 후 다시 main 함수로 돌아오는 것을 생각해보자.

  • JSUB m ? L <- (PC); PC <- m: 해당 명령어 다음의 insturction 주소를 L register에 담고 subroutine으로 점프한다.
  • RSUB ? PC <- (L): L register에 담긴 주소로 점프한다.

I/O (Input and Output)

  A register의 가장 오른쪽 8-bit로 1byte씩 전송하며 수행되고 각 device마다 고유한 8-bit code가 할당된다. 3가지 instruction이 있다.

  • TD m: (m)에서 지정한 device가 1바이트의 데이터를 송수신할 준비가 되었는지 시험하는 것을 의미한다. 만약 장치가 준비되면 SW register의 CC가 '<'로 설정, 준비되지 않았다면 '='으로 설정된다.
  • RD m ? A [rightmost byte] <- data from the device specified by (m)
  • WD m ?  the device specified by (m) <-  A[rightmost byte]

자료 출처

  • Adam Hoover, “System Programming with C and Unix, Addison Wesley 2010.
  • Abraham Silberschatz, Peter Baer Galvin, and Greg Gagne, “Operating System Concepts (10th Edition), Wiley 2019

'시스템 프로그래밍' 카테고리의 다른 글

Assemblers (4)  (0) 2021.10.15
Assemblers (3)  (0) 2021.10.15
Assemblers (2)  (0) 2021.10.14
Assemblers (1)  (0) 2021.09.28
SIC/XE (SIC/eXtra Equipment)  (0) 2021.09.12

댓글