๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐“ก๐“ธ๐“ธ๐“ถ5: ๐’ฆ๐‘œ๐“‡๐‘’๐’ถ ๐’ฐ๐“ƒ๐’พ๐“‹/Computer Architecture(COSE222)

[์ปดํ“จํ„ฐ๊ตฌ์กฐ] CH2. Instructions and High-level to Machine Code

Abstraction ; ์ถ”์ƒํ™”

" ๋ณต์žกํ•œ ์ž๋ฃŒ, ๋ชจ๋“ˆ, ์‹œ์Šคํ…œ ๋“ฑ์œผ๋กœ๋ถ€ํ„ฐ ํ•ต์‹ฌ์ ์ธ ๊ฐœ๋… ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ„์ถ”๋ ค ๋‚ด๋Š” ๊ฒƒ "

Instruction set architecture (ISA)
: ํ•˜๋“œ์›จ์–ด์™€ Low-level ์†Œํ”„ํŠธ์›จ์–ด ๊ฐ„์˜ abstraction interface

ํ˜„์‹ค์—์„œ ๋”ฐ์ง€๋ฉด ๊ธฐ๊ณ„๋ฅผ ์šด์ „ํ•˜๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” '์ฐจ'๋ผ๋Š” abstraction layer ๊ฐ™์€..

Abstractions in Computer

  • Programming using APIs : API๋ฅผ ์ด์šฉํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • Operating Sytems : ์šด์˜์ฒด์ œ, APIs๋ฅผ ์ œ๊ณต
  • Instruction Set Architecture (ISA) : Assembly language or Machine language
  • Hardware Implementation

Hardware/Software Stack in Computer

  1. Applications
  2. Operating Systems
  3. BIOS (Fermware instructions)
  4. Instruction Set Architecture(ISA)
    Computer Hardware

---------------------------

  1. Application software : high-level language๋กœ ์“ฐ์—ฌ์ง„ ๊ฒƒ!
  2. System software
    • Compilers : high-level language๋กœ ์“ฐ์—ฌ์ง„ ์ฝ”๋“œ๋ฅผ machine code๋กœ ๋ฒˆ์—ญ
    • Operating Systems
      : input/output Handling, memory and storage ๊ด€๋ฆฌ, scheduling tasks + sharing resources
    • BIOS (Basic Input/Output System)
  3. ISA : hardware์™€ low-level software ์‚ฌ์ด์˜ interface .. assembly programming(low-level language)
  4. Hardware : processor, memory, I/O controllers

Instructions

-> ์™ธ๊ตญ์ธ์—๊ฒŒ ๋งํ•˜๋ ค๋ฉด ๊ทธ๋“ค์˜ ์–ธ์–ด๋ฅผ ์•Œ์•„์•ผ ํ•˜๋“ฏ, ์ปดํ“จํ„ฐ๋„ ๊ทธ๋Ÿฌํ•จ.

์ปดํ“จํ„ฐ์˜ ์–ธ์–ด๊ฐ€ ๋ฐ”๋กœ instructions!!

  • collection of instructions = instruction set
  • ์„œ๋กœ ๋‹ค๋ฅธ CPU๋Š” ์„œ๋กœ ๋‹ค๋ฅธ instruction sets์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

Levels of Program Code

High-level language
: ์ถ”์ƒํ™” ์˜์—ญ์— ๋” ๊ฐ€๊นŒ์šด ๋ฌธ์ œ์˜์—ญ. productivity and portabilityํ•จ
complie ํ›„์—๋Š” cpu๊ฐ€ ์•Œ์•„๋“ฃ๊ฒŒ ๋ณ€ํ™˜๋จ (= not portable)

| C compiler

↓ (one-to-many)

Assembly language
: textual and symbolic representation of instructions
์ข€ ๋” ์ƒ์ง•์ (?) ์ด๋ž„๊นŒ

| Assembler

↓ (one-to-one)

Machine code(object code or binary)
: binary bits of instructions and data ; ๋ชจ๋“  ๋ช…๋ น๊ณผ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด์ง„ ๋น„ํŠธ๋กœ..

linux machine์—์„œ hello.c ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ?

% gcc -g hello.c -o hello
% ./hello

์š” ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด hello๋ผ๋Š” machine code๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์š” ์ฝ”๋“œ๋Š” binary ๋˜๋Š” executableํ•œ ์‹คํ–‰ํŒŒ์ผ!
์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ฑฐ์ณ์„œ hello.c. ๋กœ๋ถ€ํ„ฐ hello(executable) ์ฝ”๋“œ๋กœ ๋งŒ๋“ค์–ด๋ƒˆ๋‹ค.

์ด ๋•Œ ์ด ์ฝ”๋“œ๋Š” 2์ง„์ˆ˜๋กœ 10001011 10111100 ์ด๋Ÿฐ ์‹์œผ๋กœ ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ ธ์žˆ๊ณ ,

์ด ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด 8bit์”ฉ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋ฌธ์ž๋กœ ๋ณด์ด๊ฒŒ ๋œ๋‹ค.

 

ex) 0100 0001 = 0x41 = 'A' (In text Editor)

 

 

 

์—ฌ๊ธฐ์„œ

% objdump -S -D -Mintel hello

๋ฅผ ํ•ด์ฃผ๋ฉด assembly code๋ฅผ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ๋” ๋งŒ๋“ค์–ด์คŒใ…‡ใ…‡

์ฆ‰, ์™„๋ฒฝํ•˜๊ฒŒ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ•˜๊ธฐ ์ง์ „ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ •๋„์˜ ๋‹จ๊ณ„๋กœ ํ•œ ์นธ ๋Œ๋ ค๋†”์ค€๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ.

(-Mintel์€ assembly code์— intel format์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ด์•ผ๊ธฐ!)

 

 

High-level Code to Executable(Binary)

C program

|

| preprocessor

|

Expanded C program

|

| compiler

| (Human-readable assembly code)

assembly code

|

| assembler

|------------------------------ machine code

object code (binary code)

|

| linker <--- library routines

|

executable

|

| loader

|

memory

** gcc ๋ผ๋Š” command๋Š” ์ด ๋ชจ๋“  ๊ณผ์ •์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ์•„์ด!

์ปดํŒŒ์ผ์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์€, machine code๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์œ„์™€ ๊ฐ™์€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋Š” ๊ฒƒ์„ ๋งํ•จ.

 

 

1. Preprocessing
: macros์™€ includeํ•œ header files์„ ๊ฐ€์ ธ์˜จ๋‹ฌ๊นŒ,

%cpp simple_sub.c > simple_sub.i

 

 

2. Compilation
: preprocessed๋œ ์ฝ”๋“œ๋ฅผ assembly language๋กœ ์‹ค์ œ๋กœ ์ปดํŒŒ์ผ ํ•ด์ฃผ๋Š” ๋‹จ๊ณ„!

%gcc -S simple_sub.i

๊ทธ ๊ฒฐ๊ณผ simple_sub.s๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋‹ค.

 

 

3. Assembler
: ์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด๋ฅผ machine code๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  object file์„ ์ƒ์„ฑํ•œ๋‹ค

%as simple_sub.s -o simple_sub.o

.o ํŒŒ์ผ์€ ํ”„๋กœ๊ทธ๋žจ์˜ machine instructions๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.
(printf์˜ reference๊ฐ€ ์ •์˜๋˜์ง€ ์•Š๋Š”๋‹ค๋Š”๋ฐ ๋ญ”์†Œ๋ฆฌ์ง€)

 

 

4. Linker
: compilation์˜ ์ตœ์ข… ๋‹จ๊ณ„๋กœ object files์„ linking ํ•ด์„œ executableํ•œ ํŒŒ์ผ์„ ๋งŒ๋“ฆ (๊ฐ์ข… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ฝ”๋“œ๋ฅผ ํ•ฉ์นจ)

% ld -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro /usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o -L/usr/lib/gcc/x86_64- linux-gnu/4.4.3 -L/usr/lib/gcc/x86_64-linux-gnu/4.4.3 -L/usr/lib - L/lib -L/usr/lib -L/usr/lib/ -L/usr/lib/x86_64-linux-gnu --as-needed --no-as-needed -lc --as-needed --no-as-needed /usr/lib/gcc/x86_64- linux-gnu/5/crtend.o /usr/lib/x86_64-linux-gnu/crtn.o simple_sub.o -o simple_sub

์‹ค์ œ ์‹คํ–‰ ํŒŒ์ผ์—๋Š” ์‹œ์Šคํ…œ์ด๋‚˜ C run-time(crt) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋งŽ์€ ์™ธ๋ถ€์ ์ธ ํ•จ์ˆ˜๋“ค์„ ํ•„์š”๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, gcc ๋‚ด๋ถ€์—์„œ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋งํฌ commands๋Š” ๋งค์šฐ๋งค์šฐ ๋ณต์žกํ•˜๋‹น

 

 

์ด์ œ ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ simple_sub๋ฅผ ์—ด์–ด๋ณด๋ฉด ๋ฐ”๋กœ ์‹คํ–‰์ด ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค!

    %3 - 5 = -2 //output

 

Stored Program Concept

  1. instructions๊ณผ data๋Š” binary๋กœ ๋‚˜ํƒ€๋‚ด์ง€๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค
  2. CPU๋Š” ์ด instructions๊ณผ data๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด fetch ํ•ด์˜จ๋‹ค
  3. Binary compatibility๋Š” ์ปดํŒŒ์ผ๋œ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ผํ•œ ISA์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ๋„ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

 

Cross Compiler

  • RISC-V machine ์—†์ด RISC-V machine ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ??
    ๋†€๋ž๊ฒŒ๋„ ์šฐ๋ฆฐ x86 machine์œผ๋กœ RISC-V binaries๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์–ด๋–ป๊ฒŒ??
    Cross Compiler๋ฅผ ํ†ตํ•ด!!!!
  • Cross Compiler๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ”Œ๋žซํผ์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์˜ executable code๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์ด๋‹ค.

์šฐ๋ฆฌ๋Š” ์ˆ˜์—…์—์„œ RISC-V ๋ฅผ ์“ธ๊ฑฐ๊ธฐ ๋•Œ๋ฌธ์— RISC-V cross compiler๋ฅผ ์ด์šฉํ•ด์„œ RISC-V ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋‚ผ ๊ฒƒ์ž„ (์ดํด๋ฆฝ์Šค ์‚ฌ์šฉ) ๊ทธ๋ฆฌ๊ณ  ์ด  ์ฝ”๋“œ๋ฅผ RISC-V Simulator์ธ Jupiter์—์„œ ๋Œ๋ ค๋ณผ ๊ฒƒ!