Review
- rd가 있는 것은 RegisterWrite을 한다.
- Q. MemWrite나 MemRead가 0이나 1이 되면 내부적으로 어떤 일이 일어날까?
- Q. addi에서 MemWrite, MemRead = 0이니까 MemtoReg = x로 하면 안 될까? -> ALU 연산을 보내야 하기 때문에 1이어야 한다.
- Single cycle
- which instruction have longest time? -> load / store는 data memory만 간다.
- instruction마다 수행 시간이 다르다. -> processor는 누구의 시간에 맞춰야 할까?
- clock은 동기화되어 움직여야 한다.
- program counter: instruction fetch를 담는 register
- PC에서 다음 instruction이 수행될지를 결정한다. 즉 동기화를 수행한다.
- Clock cycle time: 한 postive edge부터 다음 postive edge까지의 시간
- Clock frequency: Clock cycle time의 역수
- GHz = 10^9
- GB = 2^30 = k k k
- Cycle 하나에 instruction 하나를 수행한다.
- ALU는 조합회로다.
- cycle time을 정할 때 중요하게 고려되어야 할 instruction이 무엇일까? -> 가장 오래 걸리는 load
- 일반적인 program에서 load instruction이 전체의 20%다. -> load가 기준이 되어 cycle time을 길게 잡는 것이 비효율 적이다. / 대부분의 80%의 경우에는 낭비가 발생하는 것이다. -> pipe line을 한다.(컴퓨터 구조)
- processor을 pipeline이라 보고 여러 pipeline을 구성한다.
- critical path: 가장 오래 걸리는 경로
- C code를 Assembly code로 바꾼 것이 잘 작동하는 돌려볼 수 있다.
- Version, Install 등의 어려움을 DOCKER를 통해 해결할 수 있다. Linux Cloud
- Q. load -> slli 3, int -> slli 2, short -> slli 1? (O)/ Q. short는 한 층에 두 데이터를 넣는 건가? (Word align이 효율적이라 사용하지만 Byte Address도 가능은 하다.)
- Q. opcode가 어떻게 control signal로 바뀔까?
- Q. ALUSrc는 여러 개가 있는데
- Assembly code에서 indentation을 해야 한다. -> 다음부터는 감점이 들어간다.
- Q. save load에서 배열 변수의 시작 지점은 임의로 설정할까?
- Q. instruction이 memory에 올라간다는 것은 어떤 의미일까?
- instruction의 개수를 줄이면 무엇이 이득일까? subi와 bgt는 왜 없을까? -> 음수를 포함할 수 있음
- 전기회로를 만드는 단계에 오면
- Q. register 연산을 한 번 더 하면 register에서 동일한 시간이 걸릴까?
- instruction memory와 data memory가 구분되어 있는 이유? -> 실제로는 하나의 실체이지만
- instuction은 ssd나 harddisk에 있다. 파일을 클릭하면 그것을 메모리에 올린다. 운영체제가 메모리를 할당한다. 생명력을 부여한다.
- process에 올라가 있는 코드를 메모리에 있다고 표현한 것이다.
Hardware
- Minterm 위주로 설명하겠다.
- ’+’는 or로 이해해야 한다.
- Logic Optimization -> 가장 적은 수의 gate
- 이진 변수를 2차원으로 시각적으로 표현한 것
- 이진 변수 3개의 카르노 맵에서 00 01 11 10으로 쓰는 이유가 무엇일까? -> 인접한 셀끼리 한 비트만 다르게 배치를 한 것이다.