[시스템프로그래밍] 1. Simplified Instructional Computer

jungizz_·2025년 4월 25일

System Programming

목록 보기
1/8
post-thumbnail

🔸System Software & Computer Architecture

🔹System Software, Machine Dependency

  • 시스템 소프트웨어 설계는 실행되는 컴퓨터(머신)의 아키텍처에 크게 영향 받음
    • ex) assembler는 mnemonic instruction을 해석하고, OS는 컴퓨팅 시스템의 리소스 관리
  • 시스템 소프트웨어의 핵심 원리는 지속적으로 유지됨
  • 시스템 소프트웨어의 기본 구조와 설계는 본질적으로 유사
    • ex) assembler의 설계와 논리는 거의 모든 아키텍처에서 비슷

🔹Computer Organization and Design

  • 5 classic components
    • Input, Output, Memory, Datapath, Control
  • Datapath와 Control은 종종 결합 → Processor
  • Processor는 메모리로부터 isntruction과 데이터를 가져옴
  • Input은 데이터를 메모리에 쓰고, Output은 메모리에서 데이터를 읽음
  • Control은 Input, Output, Memory, Datapath의 작동을 결정

🔹Computer Architecture

  • Memory unit은 program과 data 포함
    • program: a sequence of instructions
  • CPU는 ALU를 통해 instruction을 실행해서 program을 동작시킴 (메모리와 데이터를 교환하며 필요한 계산 처리)
    • ALU(산술 논리 장치): 수학적, 논리적 연산 수행
  • Contorl unit은 CPU 동작을 관리

🔹“Fetch-Decode-Excute” cycle

  • 프로그램의 마지막 instruction(HALT, STOP, QUIT)에 도달할 때까지 반복
  • 한 instruction마다 한 cycle

💡
Fetch(가져오기): 메모리에서 다음에 실행할 명령어 읽어오기
Decode(해독): 읽어온 명령어 해석 및 어떤 작업 수행할지 결정
Execute(실행): ALU, 메모리, I/O 컨트롤러에 적절한 명령을 보내 를 실제 작업 수행

  • multi-core인 경우
    • 각 core가 독립적으로 위의 cycle을 실행 → 명령어 동시 처리
    • 병렬처리를 할 때, 여러개의 core가 동시에 일을 끝내게 하는게 아주 중요하므로 위의 cycle과정이 필요하다
  • CISC vs RISC

🔸SIC & SIC/XE

  • SIC(Simplified Instructional Computer)는 실제 기계에서 자주 사용되는 하드웨어 기능을 포함하는 가상의 컴퓨터
  • 두 가지 버전:
    • SIC: 표준 모델
    • SIC/XE: 상위 호완 버전 (eXtra Equipment or Expensive)
    • SIC/XE는 SIC보다 확장된 기능을 제공하므로, SIC에서 실행 가능한 프로그램은 SIC/XE에서도 실행할 수 있는 호환성을 보장하도록 설계해야 함

🔹SIC Architecture

일반적인 환경과 SIC 환경에서의 architecture를 비교 (in General vs in SIC)

[Memory]

In General

  • 큰 단일 차원 배열 구성, 주소가 배열의 인덱스 역할을 하며 0부터 시작
  • 고정 크기 단위인 cell 1byte로 나뉨, 각 cell마다 주소와 연결되어 식별
    • 50byte 프로그램이면 n~n+49 영역 차지
  • 명령어 한 줄이 4byte
  • 주소 지정만 해주면 어떤 위치든지 매우 빠르게 접근 가능(bus를 통해)
  • 실행중인 프로그램과 데이터가 주 메모리에 저장
  • RAM은 CPU와 연결되어 데이터를 서로 빠르게 이동 가능

In SIC

  • 명령어 한 줄이 3byte(24bit) word로 구성
  • 최대 메모리 용량은 32KB → 2^15 bytes

[Register]

in General

  • CPU 내부에 위치한 저장장치
  • 일시적인 데이터를 저장하는 개별 고속 저장소 → 비쌈
  • 일부 register는 특정 용도로 특별히 지정되어 있고, 나머지는 계산 중 임시 저장소로 사용

in SIC

  • ⭐5 special purposed registers 24bits
    • A(0, Accmulator): 산술 연산의 결과 저장
    • X(1, Index register): 주소 지정에 필요한 인덱스 값 저장
    • L(2, Linkage register): subroutine호출 전 return address 저장
    • ⭐PC(8, Program Counter): 다음 실행 명령어 주소 저장
    • SW(9, Status Word): 비교 및 조건분기(jump) 명령어에 사용되는 CC(condition code) 비트와 같은 다양한 정보 저장

[Data Formats]

  • Integer: 24bit 이진수로 저장 (4byte in general)
    • 음수는 2의 보수로 표현하여 저장
  • Character: 8bit(1byte) ASCII코드로 저장
  • floating point 지원X

[Machine Instruction Formats]⭐

  • SIC의 모든 명령어는 24bit 형식
    • Operation code field(opcode): 하드웨어가 인식하는 고유한 번호로 명령어 종류 구분
    • X filed
    • Address filed: 명령어가 처리할 데이터의 메모리 주소

[Addressing Mode]

  • 피연산자의 effectuve(target) memory 주소 계산 방법

in General

  • 레지스터에 저장된 정보나 명령어 내의 상수 값을 사용하여 주소 결정

in SIC

  • X filed의 bit에 따라 두 가지 모드
  1. Direct addressing mode
    • x bit = 0
    • target address = address (명령어에 포함된 주소가 직접적으로 사용)
  2. Indexed addressing mode
    • x bit = 1
    • target address = address + (X) (명령어에 포함된 주소에 X레지스터의 값을 더하여 사용)
❗️x bit와 x register 헷갈리지 않기!

[Instruction Set]

  • CPU가 인식하고 실행할 수 있는 machine code 명령어의 집합 → 프로세서에 필요한 작업 지시
  • Load/Store instructions
    • LDA m: 메모리 주소 m부터 m+2까지의 내용을 레지스터 A에 로드 A ⇐ (m..m+2)
    • STA m: 레지스터 A의 내용을 메모리 주소 m에서 시작하는 위치에 저장 (m..m+2) ⇐ A
  • Integer Arithmetic operation
    • 모든 산술 연산은 레지스터 A와 메모리의 단어 간의 연산 후 레지스터 A에 저장
    • 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 m: 레지스터 A의 값과 메모리 주소 m부터 m+2까지의 값을 비교하고, 결과에 따른 CC를 레지스터 SW에 저장
      • A < (m..m+2): CC = 01 (작다)
      • A = (m..m+2): CC = 00 (같다)
      • A > (m..m+2): CC = 10 (크다)
  • Conditional Jump
    • CC에 따라 PC를 m으로 업데이트하여 점프 (if문)
    • JLT m PC ⇐ m if CC set to <
    • JEQ m PC ⇐ m if CC set to =
    • JGT m PC ⇐ m if CC set to >
  • Subroutine linkage
    • JSUB m: 현재 PC값을 레지스터 L에 저장하고 L ⇐ (PC) , 서브루틴 주소 m으로 점프 PC ⇐ m
    • RSUB: 레지스터 L에 저장된 주소로 PC 업데이트하여 복귀PC ⇐ (L) ****
  • I/O
    • 레지스터 A의 가장 오른쪽 1byte(8bit) 를 통해 입출력 수행
      • 각 장치는 고유한 1byte코드를 할당 받음
    • TD m: 메모리 주소 m에 지정된 장치가 데이터 전송을 준비했는지 테스트
      • 준비된 경우, CC = 01 (<)
      • 준비 안된 경우, CC = 00 (=)
    • WD m: 메모리 주소 m에 지정된 장치에 레지스터 A의 가장 오른쪽 1byte 기록 (장치에 데이터 전송) (m) ⇐ A[rightmost byte]
    • RD m: 메모리 주소 m에 지정된 장치로부터 데이터를 읽어와 레지스터 A의 가장 오른쪽 1byte에 저장 (장치로부터 데이터 수신) A[rightmost byte] ⇐ data from the device specified by (m)

🔹SIC/XE Architexture

[Memory]

  • 최대 메모리 용량이 1MB로 늘어남 → 2^20byte

[Registers]

  • SIC의 5개 레지스터+ 4개 추가 레지스터
    - A, X, L, PC, SW
    - B (3, Base Register): 상대 주소를 추가적으로 나타내기 위해 사용 24bits
    - S, T (4, 5, General Working Register): 자유롭게 사용 가능한 일반 작업 레지스터 24bits
    - F (6, Floating-point Accumulator): floting-point 계산에 사용 48bits → 실수 사용 가능

[Data Formats]

  • 48bit floting-point data type도 추가적으로 사용 가능

[Instruction Formats]

  • format1: No memory reference 1byte
    • 간단 명령어, 피연산자가 없고 opcode만 포함
  • format2: No memory reference 2bytes
    • 레지스터 간의 연산 수행
  • format3: Relative addressing 3bytes
    • Flag e = 0
    • opcode가 8 → 6bit로 줄어듦
      • format2에서 opcode의 자리가 남아서 가장 오른쪽 두 비트가 00가 되곤 해서 없앰
    • address field가 12bit
      • SIC와의 호환성을 위해 3bytes로 길이를 맞추다 보니 작은 크기
      • 때문에 모든 memory 위치를 표시할 수 없음
  • format4: Address field extension to 20 bits 4bytes
    • Flag e = 1
    • address field를 20bit로 확장해서 모든 address 표현 가능
  • format 3, 4에서 n, i, x, b, p, e field는 flag bits (밑에 나옴)

[Addressing Modes]

  • Relative addressing modes (for format3)

    • Base relative addressing: b=1, p=0 TA = (B) + disp/addr
      • flag bits의 b=1, p=0일 때 동작
      • TA(target address)는 레지스터 B의 값에 address field의 값을 더한 값
    • PC relative addressing: b=0, p=1 TA = (PC) + disp/addr
      • flag bits의 b=0, p=1일 때 동작
      • TA는 PC에 address field의 값을 더한 값
  • Direct addressing mode (for format 3&4): b=p=0 TA = disp/addr

    • address field의 값이 TA가 됨
    • cf) b=p=1은 불가능

      Indexed addressing

      • x=1일 때, 위 addressing mode들과 결합하여 (X)의 값이 TA계산에 더해짐
      • ex) x=1, b=1, p=0 TA = (B) + disp/addr **+ (X)**
  • n&i bits in format 3&4

    • TA가 사용되는 방식 지정
    • immediate addressing: n=0, i=1
      • 메모리 참조 없이 TA가 그냥 피연산자 값(operand value)이 됨 TA를 값으로
    • indirect addressing: n=1, i=0
      • pointer 개념과 유사, TA는 주소값으로 사용되어 operand value가 있는 곳을 나타냄 TA가 나타나는 곳의 값을 다시한번 주소값으로
    • simple addressing for SIC: n=i=0
      • b, p, e fields는 address field로 사용돼서(12bits → 15bits) SIC와 상위호환 가능 TA가 일반적인 주소값
    • simple addressing for SIC/XE: n=i=1 TA가 일반적인 주소값

      indexing은 immediate나 indirect addressing mode와 같이 사용할 수 없음 (이 모드에서 addressing field에는 주소값이 들어가는게 아니니까)

Example of addressing mode

  • x, b, p, e는 TA의 값을 결정
  • n, i는 TA를 어떻게 사용할건지

[Instruction Set]

  • SIC의 모든 instruction사용 가능, 아래는 추가 instruction 정리
  • Load/Store register
    • LDB, STB: 레지스터 B 관련 로드/저장
  • Floating-point arithmetic operation
    • ADDF, SUBF, MULF, DIVF: 레지스터 F와 메모리의 실수값 6bytes 간의 연산 후 레지스터 F에 저장
    • ADDF m F ⇐ (F) + (m..m+5)
  • Register-to-register instruction
    • RMO, ADDR, SUBR, MULR, DIVR: 레지스터들을 이용한 명령어
    • RMO r1, r2 r2 ⇐ (r1)
    • ADDR r1, r2 r2 ⇐ (r2) + (r1)
  • Supervisor call
    • SVC n
    • 소스 코드를 읽으며 내려가다가(=instruction 순서대로 읽음) SVC instrucion이 있으면 n값에 해당하는 interrupt가 발생하여 OS에서 이를 수행하고, 끝나면 다시 interrupt 다음 코드로 돌아옴
    • n: supervisor call number (i.e. interrupt number)
  • I/O
    - I/O channels: CPU가 다른 instruction을 수행하고 있을 때 CPU대신 I/O작업을 수행해주는 processor → 효율적 system operation
    - SIO(start), TIO(test), HIO(halt/중지)

🔸Assembly Language Statements

Assembly는 기능적으로 3가지 종류로 나눌 수 있음

  • Insturctions(명령어)
    • 명령어는 어셈블러에 의해 오브젝트 코드로 변환되며, 이는 런타임에 실행됨
    • 각 명령어는 특정 작업에 해당
  • Directives(지시어)
    • 어셈블러에게 특정 작업을 수행하도록 지시
    • object code에 직접적인 영향을 미치지 않음 → 주로 데이터 정의, 메타 데이터 등에 사용
    • ex) WORD 지시어
  • Macro(매크로)
    • 다른 문장들의 시퀀스를(명령어들을) 단축하여 표현한 것
    • 어셈블러는 매크로를 확장하여 해당 문장들을 생성하고 조립함
    • 코드의 재사용성 높이고, 가독성 개선

🔸Actual Machine Architecture

  • CISC (Complex Instruction Set Computers)
    • 다양한 기능을 수행할 수 있는 크고 복잡한 명령어 제공
    • 다양한 명령어 형식과 길이
    • 다양한 addressing mode
    • (위의 이유로) 하드웨어 구현의 복잡성
  • RISC (Reduced Instruction Set Computers)
    - 기계 명령어의 수가 적고, 명령어 형식과 addressing mode의 종류도 적음
    - 명령어 길이가 고정
    - 대부분의 명령어가 single-cycle내에 실행됨
    - (위의 이유로) 간단하고 고정된 형식으로 프로세스 설계가 단순, 빠름, 저렴 + 높은 신뢰성(간단해서 오류 적음), 빠른 명령어 실행시간

🔹ARM Architecture

  • ARM: Acorn RISC Machine
    • ARM Ltd.에서 설계한 컴퓨터 명령어 집합 아키텍처
    • 낮은 전력 소모, 효율성으로 모바일 및 임베디드 장치에서 널리 사용됨
  • ARM Core
    • Cortex-A: 높은 성능이 필요한 응용 프로그램을 위해 설계, 스마트폰과 테블릿에 적합
    • Cortex-M: 저전력 임베디드 애플리케이션을 위해 집중 설계, IoT장치에 적합
  • ARM Compiler toolchain
    • ARM은 컴파일러 + 어셈블러 툴체인을 제공
    • 코드를 ARM명령어에 맞춰 컴파일하고, 어셈블러가 기계어로 해석
profile
( •̀ .̫ •́ )✧

0개의 댓글