์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ํ์ด์ฌ
- Rust
- ์ค๋ผํดDB
- ์๋ฐ ๊ธฐ์ด
- ๋ฌ์คํธ ํ๋ก๊ทธ๋๋ฐ ๊ณต์ ๊ฐ์ด๋
- ๋ฐฑ์ค
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ํ์ด์ฌ ์ฑ๋ฆฐ์ง
- ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ
- ๋ฐฑ์ค ๋ฌ์คํธ
- data communication
- ubuntu
- ์๋ฐ
- ๋ฌ์คํธ ์์
- Reversing
- Python
- ๋ฌ์คํธ
- ์๋ฐ ๊ฐ๋
- Database
- ๋ฐ์ดํฐ ํต์
- ์๊ณ ๋ฆฌ์ฆ
- Python challenge
- ํ์ด์ฌ ์ฒผ๋ฆฐ์ง
- ์ด์์ฒด์
- Operating System
- ์ค๋ผํด
- OS
- java
- ์ฐ๋ถํฌ
- C
Archives
- Today
- Total
IT’s Portfolio
[System] The Elements of Computing System - 3 ๋ณธ๋ฌธ
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
๋ฐ์ํ
'Development Study > Rust' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Rust] Start Rust (Day 22) - Functional Language Features: Iterators and Closures (2) | 2023.11.20 |
---|---|
[System] The Elements of Computing System - 4 (0) | 2023.11.08 |
[System] The Elements of Computing System - 2 (1) | 2023.11.04 |
[System] The Elements of Computing System - 1 (1) | 2023.10.31 |
[Rust] How to study Rust? - "Copycat" (6) (0) | 2023.09.24 |
Comments