๊ด€๋ฆฌ ๋ฉ”๋‰ด

IT’s Portfolio

[System] The Elements of Computing System - 3 ๋ณธ๋ฌธ

Development Study/Rust

[System] The Elements of Computing System - 3

f1r3_r41n 2023. 11. 8. 13:48
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ป The Elements of Computing System - 3

๐Ÿค” ์ˆœ์ฐจ ๋…ผ๋ฆฌ

  • ์กฐํ•ฉ ๋…ผ๋ฆฌ์˜ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋Š” ์—ฐ์‚ฐ์ด ์ข…๋ฃŒ๋œ ํ›„ ์†Œ๋ฉธ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋ณต์žกํ•œ ์—ฐ์‚ฐ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์–ตํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ
    • ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ๊ธฐ์–ตํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ '์ˆœ์ฐจ ๋…ผ๋ฆฌ' ๋ฅผ ์‚ฌ์šฉํ•จ
  • ํด๋ก
    • ๋งˆ์Šคํ„ฐ ํด๋ก(master-clock)์ด ์—ฐ์†์ ์ธ ์‹ ํ˜ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ด
    • ๋ณดํ†ต 0๊ณผ 1๋กœ ํ‘œ์‹œ๋œ ๋‘ ์ƒํƒœ๋ฅผ ์—ฐ์†ํ•ด์„œ ์˜ค๊ฐ€๋Š” ๊ฒƒ์œผ๋กœ ํ‘œํ˜„ํ•จ
  • ํ”Œ๋ฆฝํ”Œ๋กญ
    • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ˆœ์ฐจ ๋…ผ๋ฆฌ ์†Œ์ž
    • 1๋น„ํŠธ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ๊ณผ ํด๋ก ์‹ ํ˜ธ ์ž…๋ ฅ์— ๋”ฐ๋ผ ์ƒˆ๋กœ ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ• ์ง€, ์ž ๊ธˆ์ƒํƒœ๊ฐ€ ๋˜์–ด ์ด์ „ ์ž…๋ ฅ์„ ์œ ์ง€ํ• ์ง€ ๊ฒฐ์ •๋จ
  • ๋ ˆ์ง€์Šคํ„ฐ
    • DFF(๋ฐ์ดํ„ฐ ํ”Œ๋ฆฝํ”Œ๋กญ)๋งŒ์œผ๋กœ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•˜๋Š”๋Œ€๋กœ ์ €์žฅํ•˜๊ณ  ๊ฐ€์ ธ์˜ฌ ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ด์ „ ์‹œ๊ฐ„์˜ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ž…๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด ๋ ˆ์ง€์Šคํ„ฐ
    • ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ• ์ง€, ์ด์ „ ๊ฒฐ๊ณผ๋ฅผ ์ž…๋ ฅํ• ์ง€๋ฅผ MUX(๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ)๊ฐ€ ๊ฒฐ์ •ํ•จ
      • 1bit register
      • 1bit register๋ฅผ ์ด์–ด๋ถ™ํžŒ w-bit register
    • ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋น„ํŠธ์˜ ๊ฐœ์ˆ˜ : ํญ(width)
      • 16, 32, 64๋น„ํŠธ๊ฐ€ ํญ์„ ๋œปํ•จ
    • ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋˜๋Š” ๋ฉ€ํ‹ฐ๋น„ํŠธ ๊ฐ’ : ๋‹จ์–ด(word)
  • ๋ฉ”๋ชจ๋ฆฌ
    • ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์Œ“์•„ ์˜ฌ๋ ค์„œ ์—ฌ๋Ÿฌ ์ €์žฅ ๊ณต๊ฐ„์„ ํ•œ ๋ฒˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž„์˜ ์ ‘๊ทผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ
    • n๊ฐœ์˜ ๊ฐ ๋ ˆ์ง€์Šคํ„ฐ์—๋Š” ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์œ ์ผํ•œ ์ฃผ์†Œ๊ฐ€ ํ• ๋‹น๋จ
      • ์ฃผ์†Œ๋Š” ์–ด๋–ค RAM ๋ ˆ์ง€์Šคํ„ฐ์— ์ ‘๊ทผํ• ์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚ด
      • ์ฝ๊ธฐ ์—ฐ์‚ฐ(load=0)์ธ ๊ฒฝ์šฐ, RAM์€ ์„ ํƒ๋œ ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์„ ๋ฐ”๋กœ ์ถœ๋ ฅํ•จ
      • ์“ฐ๊ธฐ ์—ฐ์‚ฐ(load=1)์ผ ๋•Œ๋Š” ๋‹ค์Œ ์‚ฌ์ดํด ๋•Œ ์„ ํƒ๋œ ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ง€์Šคํ„ฐ์—์„œ ์ž…๋ ฅ๊ฐ’์„ ๋ฐ›์•„ ํ•ด๋‹น ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ธฐ ์‹œ์ž‘ํ•จ
  • ๊ณ„์ˆ˜๊ธฐ
    • ๋งค ์‹œ๊ฐ„ ๋‹จ์œ„๋งˆ๋‹ค ๋‚ด๋ถ€ ์ƒํƒœ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ์ˆœ์ฐจ ์นฉ
      • ํ”„๋กœ๊ทธ๋žจ ๊ณ„์ˆ˜๊ธฐ(program counter)
  • ์‹œ๊ฐ„ ๋ฌธ์ œ
    • ์ปดํ“จํ„ฐ๋Š” ์งง์€ ์‹œ๊ฐ„ ์•ˆ์— ์ˆ˜ ๋งŽ์€ ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐํ•ฉ ์นฉ์œผ๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ ๊ฒฝ์Ÿ์ด ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฌ์›€
    • ์ˆœ์ฐจ ์นฉ์˜ ์ถœ๋ ฅ์€ ํด๋ก ์‚ฌ์ดํด์ด ๋„˜์–ด๊ฐˆ ๋•Œ๋งŒ ๋ฐ”๋€” ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ๊ฒฝ์Ÿ์„ ํ”ผํ•˜๊ณ  ์ „์ฒด ์ปดํ“จํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋™๊ธฐํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ

๐Ÿค” Data Filp-Flop

  • DFF๋Š” ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ์†Œ์ž์˜ ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์ด ๋จ
  • ๊ฐ๊ฐ ํ•˜๋‚˜์˜ ๋งˆ์Šคํ„ฐ ํด๋ก์— ์—ฐ๊ฒฐ๋˜์–ด, ๊ฑฐ๋Œ€ํ•œ ํ•ฉ์ฐฝ๋‹จ ๊ฐ™์ด ํ–‰๋™ํ•จ
  • ํด๋ก ์‚ฌ์ดํด์ด ์‹œ์ž‘ํ•  ๋•Œ, ์ปดํ“จํ„ฐ ๋‚ด ๋ชจ๋“  DFF ์ถœ๋ ฅ๋“ค์€ ์ „ ์‚ฌ์ดํด์˜ ์ž…๋ ฅ์— ๋”ฐ๋ผ ๋งž์ถฐ์ง
  • ๊ทธ ์™ธ ์‹œ๊ฐ„์—๋Š” DFF๊ฐ€ ์ž ๊ธˆ ์ƒํƒœ๊ฐ€ ๋จ
    • ์ž…๋ ฅ์ด ๋ณ€ํ•ด๋„ ์ถœ๋ ฅ์ด ๊ณง๋ฐ”๋กœ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Œ

๐Ÿค” Register

  • 1๋น„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ๋Š” ํ•˜๋‚˜์˜ ์ •๋ณด ๋น„ํŠธ(0 or 1)์„ ์ €์žฅํ•˜๋„๋ก ์„ค๊ณ„๋œ ์†Œ์ž
  • ๋ ˆ์ง€์Šคํ„ฐ(w-bit)๋Š” ๋ฉ€ํ‹ฐ๋น„ํŠธ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ 2์ง„ ์…€๊ณผ API๊ฐ€ ๋™์ผํ•จ

๐Ÿค” Memory

  • RAM์€ ์ง์ ‘ ์ ‘๊ทผ ๋ฉ”๋ชจ๋ฆฌ ์žฅ์น˜
    • n๊ฐœ์˜ w-bit ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๋ฐฐ์—ดํ•˜๊ณ  ์ง์ ‘ ์ ‘๊ทผ ํšŒ๋กœ๋ฅผ ์—ฐ๊ฒฐํ•œ ์†Œ์ž
  • ๋ฉ”๋ชจ๋ฆฌ์— ๋“ค์–ด๊ฐ„ ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐœ์ˆ˜(n) ๋ฐ ๋น„ํŠธ ์ˆ˜(w)๋Š” ๊ฐ๊ฐ ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ์™€ ํญ์ด๋ผ ๋ถ€๋ฆ„

๐Ÿค” Counter

  • ๋‹ค์Œ ๋ฒˆ์— ์‹คํ–‰ํ•  ๋ช…๋ น์˜ ์ฃผ์†Œ๋ฅผ ๊ธฐ๋ก
    • ๊ณ„์ˆ˜๊ธฐ๋Š” ๋งค ํด๋ก ์‚ฌ์ดํด๋งˆ๋‹ค ๋‹จ์ˆœํžˆ ์ƒํƒœ ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œ์ผœ ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹ค์Œ ๋ฒˆ ๋ช…๋ น์–ด๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
    • ํ”„๋กœ๊ทธ๋žจ์˜ ์ฒซ ๋ช…๋ น ์ฃผ์†Œ๊ฐ€ 0์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ๊ณ„์ˆ˜๊ธฐ๋ฅผ 0์œผ๋กœ ๋ฆฌ์…‹ํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์–ธ์ œ๋“ ์ง€ ์žฌ์‹œ์ž‘์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ

๐Ÿค” ๊ตฌํ˜„

CHIP Bit {
    IN in, load;
    OUT out;

    PARTS:
    Mux(a=dout, b=in, sel=load, out=selected);
    DFF(in=selected, out=out, out=dout);
}
  • 1Bit Register
  • DFF ์ถœ๋ ฅ๊ฐ’์„ ๋‹ค์‹œ DFF์˜ ์ž…๋ ฅ์œผ๋กœ ๋„ฃ๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ ๊ตฌ์„ฑ
  • ์ƒˆ๋กœ์šด ์ž…๋ ฅ๊ณผ ์ด์ „ ๋ฐ์ดํ„ฐ ์ค‘์—์„œ ์ถฉ๋Œ์€ Mux๋ฅผ ํ™œ์šฉํ•ด ํ•ด๊ฒฐ
CHIP Register {
    IN in[16], load;
    OUT out[16];

    PARTS:
    Bit(in=in[0], load=load, out=out[0]);
    Bit(in=in[1], load=load, out=out[1]);
    ...
    Bit(in=in[15], load=load, out=out[15]);
}
  • Register
  • ๊ธฐ๋ณธ์ ์ธ 16๋น„ํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ ˆ์ง€์Šคํ„ฐ
  • 1Bit ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ 16๊ฐœ ์ด์–ด ๋ถ™ํž˜
CHIP RAM8 {
    IN in[16], load, address[3];
    OUT out[16];

    PARTS:
    DMux8Way(in=load, sel=address, a=r0, b=r1, c=r2, d=r3, e=r4, f=r5, g=r6, h=r7);
    Register(in=in, load=r0, out=out0);
    Register(in=in, load=r1, out=out1);
    Register(in=in, load=r2, out=out2);
    Register(in=in, load=r3, out=out3);
    Register(in=in, load=r4, out=out4);
    Register(in=in, load=r5, out=out5);
    Register(in=in, load=r6, out=out6);
    Register(in=in, load=r7, out=out7);
    Mux8Way16(a=out0, b=out1, c=out2, d=out3, e=out4, f=out5, g=out6, h=out7, sel=address, out=out);
}
  • RAM8
  • ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ 8๊ฐœ ๊ฐ–๊ณ  ์žˆ๋Š” RAM
  • ์ฃผ์†Œ๊ฐ’์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›๋Š”๋ฐ, 3๋น„ํŠธ ์ฃผ์†Œ ๋ฐ์ดํ„ฐ๋กœ ์–ด๋”” ๋ ˆ์ง€์Šคํ„ฐ์— ์ ‘๊ทผํ• ์ง€๋ฅผ DMux๊ฐ€ ๊ฒฐ์ •
    • ์ ‘๊ทผ๋œ ๋ ˆ์ง€์Šคํ„ฐ์—๋งŒ load๋น„ํŠธ ์ž…๋ ฅ์ด ์ฃผ์–ด์ง
  • ๋ชจ๋“  ๋ ˆ์ง€์Šคํ„ฐ ์นฉ์ด ์ž‘๋™ํ•˜์ง€๋งŒ, ๊ทธ ์ค‘ RAM์˜ ์ถœ๋ ฅ๊ฐ’์œผ๋กœ ๊ฒฐ์ •๋˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์ฃผ์†Œ๊ฐ’์— ํ•ด๋‹น๋˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ
    • ์นฉ์˜ ๋งˆ์ง€๋ง‰์— Mux๊ฐ€ ๋‹ด๋‹น
CHIP PC {
    IN in[16],load,inc,reset;
    OUT out[16];

    PARTS:
    Inc16(in=din, out=incd);    // ๋ ˆ์ง€์Šคํ„ฐ์—์„œ ์„ ํƒ๋œ ์ž…๋ ฅ๊ฐ’์˜ 1์ฆ๊ฐ€๊ฐ’์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ด ๋†“๋Š”๋‹ค. 
    Mux16(a=din, b=incd, sel=inc, out=out1);    // inc๊ฐ’์— ๋”ฐ๋ผ์„œ ์ฆ๊ฐ€๊ฐ’์„ ์‚ฌ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. 
    Mux16(a=out1, b=in, sel=load, out=out2);    // load๊ฐ’์— ๋”ฐ๋ผ์„œ ์ƒˆ๋กœ์šด ์ž…๋ ฅ์„ ์‚ฌ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. 
    Mux16(a=out2, b[0..15]=false, sel=reset, out=reseted);  // reset๊ฐ’์— ๋”ฐ๋ผ์„œ ์„ ํƒ๋œ ์ž…๋ ฅ์„ 0์œผ๋กœ ๋ฆฌ์…‹ํ• ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. 
    Register(in=reseted, load=true, out=din, out=out);  // ์ตœ์ข… ๊ฒฐ์ •๋œ ์ž…๋ ฅ์„ ๋ ˆ์ง€์Šคํ„ฐ์— ๋„ฃ์–ด ์ €์žฅํ•œ๋‹ค. 
}
  • PC(Program Counter)
  • PC์˜ ๋ ˆ์ง€์Šคํ„ฐ์— ์–ด๋–ค ๋ช…๋ น์–ด ์ฃผ์†Œ๊ฐ€ ์ž…๋ ฅ๋˜๋Š”์ง€ ์ค‘์š”
    • load, inc, reset ๋น„ํŠธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ตœ์ข…์ ์œผ๋กœ ๋ ˆ์ง€์Šคํ„ฐ์— ์–ด๋–ค ๊ฐ’์„ ๋„˜๊ฒจ์ค„์ง€ ์„ค๊ณ„
728x90
๋ฐ˜์‘ํ˜•
Comments