일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리펙토링
- 명령어
- ack
- cache
- physical address
- 사설 IP
- 클린 코드
- CPU
- 가독성
- private ip
- refactoring
- MMU
- ALU
- floating point
- L2 switch
- Public IP
- osi 7
- float
- register
- interrupt
- page
- Sector
- TCP
- Clean code
- L3 Router
- 공인 IP
- 코드 컴플릿
- addressing mode
- Code complete
- network
- Today
- Total
목록전체 글 (94)
Software Lab

아래 절차를 데이터 bit 수 만큼 반복한다. ① : controller는 multiplier 값에서 LSB(Least significant bit)를 가져온다. LSB가 1이면 ②로 간다. 0이면 ⑥으로 간다. ② : multiplicand 값이 ALU에 입력된다. ③ : product 값이 ALU에 입력된다. ④ : controller는 ALU에 Add Opcode 신호를 보낸다. ⑤ : ALU는 multiplicand와 product로부터 입력된 두 값을 더하고, 그 결과를 product에 저장한다. ⑥ : controller가 신호를 보내면 multiplicand는 비트열을 오른쪽으로 한 칸 이동한다. ⑦ : controller가 신호를 보내면 multiplier 비트열을 왼쪽으로 한 칸 이동한다..

먼저 2진수에서 곱셈 원리를 이해하자. multiplicand를 multiplier 각 bit 별 쪼개어서 곱한다. 다음으로 각각 구해진 값들을 모두 더하면 된다. 간단한 예로 0011 * 0101 을 해보자. ⓑ, ⓓ - multiplier의 bit가 0인 경우 결괏값은 항상 0이다. ⓐ, ⓒ - multiplier의 bit가 1이라면 그 bit가 왼쪽에서부터 떨어진 만큼 multiplicand를 오른쪽으로 이동한 값이 결괏값이다. ⓒ를 보면 왼쪽에서 2번째 bit이므로multiplicand 오른쪽으로 2번 이동한 값이 결괏값이다. 구해진 각각 결괏값들을 모두 더하면 된다. ⓑ, ⓓ와 같이 결괏값이 0인 경우는 더하지 않아도 된다.

A-B는 A+(-B)로 바꾸어 계산할 수 있다. 2의 보수기(2's complementer)는 값을 음수로 바꾸는 기능을 한다. 감산기는 2의 보수기를 통해 B를 -B로 바꾸어서 A와 덧셈 하도록 만들면 된다. 2의 보수에 대한 원리를 알아보자. 이진수에서 어떤 값의 2의 보수는 bit를 반전시킨 후 +1을 하면 된다. 아래는 부호 있는 4bit 정수의 목록이다. 5와 -5는 서로 간에 2의 보수 관계에 있다. 다른 값들도 마찬가지이다. 한번 실제 값으로 계산해 보자. A를 2 또는 -2로 두고 B를 5 또는 -5로 두자. 그리고 각각에 대하여 덧셈을 해보자. 아래와 같이 계산된 값이 정확하다.

아래 논리 회로는 전가산기(Full Adder)이다. 전가산기를 추상화하면 3개의 입력과 2개의 출력을 가지는 장치이다. 그렇다면 4bit Adder를 만들려면 전가산기 4개를 다음과 같이 연결하면 된다. n번째 bit에서 Cout은 n+1번째 bit에서 Cin으로 연결된다. 그리고 0번째 bit의 Cin은 항상 0 이 될 것이다. 마지막으로 가산기를 추상화하면 다음과 같다.

4bit 가산기의 동작 원리를 이해하자. 32bit, 64bit 가산기라도 4bit의 동작 원리와 다르지 않다. 먼저 2진수 덧셈 원리를 알아보자. n번째 bit 계산은 3개(A, B, Cin)의 입력값들을 덧셈한다. 그리고 2개(Y, Cout)의 출력값이 발생한다. n번째 bit 계산의 출력값 Cout 은 n+1번째 bit 계산에서 올림수 Cin가 된다. 그리고 0번째 bit에서 Cin은 원래 없지만 0으로 두자. 이제 3개(A, B, Cin)의 입력값과 2개(Y, Cout)의 출력값 대한 모든 경우의 수를 구할 수 있다. 위의 진리표를 만족하는 논리 회로를 만들 수 있다. 이것을 전가산기(Full Adder)라고 한다.

MUX은 여러 입력 중에 하나를 선택하여 출력하는 장치이다. 아래 회로는 1bit 입력에 대한 것으로 만약 입력값이 32bit MUX라면 위의 회로 32개가 병렬로 연결된다. 위의 회로는 4개의 연산(Add, AND, OR, XOR)된 값들이 입력으로 들어오고 있다. 이 중에서 Opcode에 의해 하나가 선택되어 출력된다. 입력값이 4개이므로 하나를 선택하기 위해서는 2개의 Opcode bit가 필요하다.

ALU는 덧셈, 뺄셈 같은 산술 연산과 AND, OR 같은 논리 연산한다. Opcode로 연산을 결정한다. 아래는 Opcode 목록으로 간단한 예시이다. 현대의 CPU는 훨씬 더 많은 Opcode를 지원한다. 위의 4개의 Opcode 가 있는 ALU 내부 구조는 아래와 같다. 4개의 Opcode에 대한 각각의 연산기(Adder, AND, OR, XOR)가 있다. 그리고 A, B 두 데이터가 각각의 연산기로 입력된다. 각각 연산기의 출력은 다시 MUX 장치로 입력된다. MUX는 4개의 입력 중에 Opcode에 의해 한 개가 선택되어 Y로 출력된다.

CPU 내부에는 Unit, Register, Cache로 구성되어 있다. Unit 2's comlementer(2의 보수기) : 값을 음수로 바꾸는 장치이다. shifter(이동 연산기) : 비트열을 이동하는 장치이다. controller(제어기) : 명령어를 읽고 해석하며 데이터 처리를 위한 시퀀스를 결정한다. ALU(산술 논리 장치) : 덧셈, 뺄셈 같은 산술 연산과 AND, OR 같은 논리 연산을 한다. Register : CPU에서 연산을 하기 위해 명령어, 주소, 데이터를 임시로 저장하는 고속 기억장치이다. 아래 대표적인 것 몇 개만 살펴보자. MAR : Address bus로 출력되는 주소를 임시 저장 MBR : Data bus로 입출력되는 데이터, 명령어를 임시 저장 IR : 인출된 명령어를..