맞는데 왜 틀릴까..?

카테고리 없음

컴퓨터 구조

안도일 2023. 10. 9. 20:55

1장 

 

운영체제 -> main memory 관리

컴퓨터구조 -> cache memory 관리

 

High-level 언어 -> 어셈블리어 -> 기계어

CPU가 쓰는 register가 있고 프로그래머가 쓰는 register가 있다.

 

무어의 법칙 : 프로세서의 성능이 2년마다 2배씩 증가한다. 

 

Hardware 와 Software 측면에서 성능

1. 알고리즘 

-  source-level 에서 명령어의 개수 결정

 

2. 언어, 컴파일러, 아키텍처(CISC, RISC) 

- target에 맞는 언어와 좋은 컴파일러 (어셈블리어 수를 줄여주는)

- machine-level 에서 명령어의 개수 결정

 

3. 운영체제 스케줄러

- 프로그램을 효율적으로 스케줄링한다.

 

4. 프로세서, 메모리 

- machine-level 명령어의 실행 속도 결정

 

 

Classes of Computers

 

1. Desktop computers

- 저렴한 비용으로 하나의 사용자에게 우수한 성능을 제공하도록 설계되었다.

- 보통 서드파티 소프트웨어를 실행하며, 그래픽 display, keyboard, mouse를 포함한다.

 

2. Servers

- 네트워크를 통해서만 접근되는 다수의 동시 사용자를 위해 대규모 프로그램을 실행하는데 사용됨

- 신뢰성과 보안에 대한 더 큰 중요성을 둔다.

 

3. Supercomputers

- 수백, 수천개의 프로세서와 terabytes의 메모리, pethabytes의 storage로 높은 과학적, 공학적 문제를 푸는 고성능 고비용 server다.

 

4. Embedded computers (processors)

- 정해진 응용프로그램만 실행한다.

- 다른 기기에 내장되어있다.

 

 

 

Embedded Processor 

1. 최소한의 성능을 요구한다.

2. 비용 제약 조건을 가진다.

3. 전력 소비 제한을 가진다.

4. 결함 내성을 가져야 한다. 

 

 

Eight Greate Ideas

1. 무어의 법칙을 통한 설계

 

2. 설계를 간소화 하기 위한 추상화 사용

 

3. common case를 빠르게 처리하자

- 성능 향상을 위해 공통사항을 빨리 찾자

- ex) 배터리 소모에 가장 많은 영향을 주는 Display 에너지 효율을 줄이자

 

4. 병렬 처리를 통한 성능 향상

 

5. 파이프라이닝을 통한 성능 향상

- CPU의 성능을 증가시킴

 

6. 예측을 통한 성능 향상

- 예측 정확도가 95%정도는 되야함

 

7. 메모리 계층 구조

- main 메모리, cache 메모리, 디스크 등 메모리 계층을 사용하여 데이터 엑세스 최적화

 

8. 중복을 통해 신뢰성 향상

 

 

 

Application software

- JAVA, C++로 짜서 컴파일한 software

 

System software

- OS (Window, Linux, MacOs)

- Compiler (loader, linker)

 

 

High-level 언어

- 자연어와 가깝게 생각할 수 있다.

- 생산성과 이식성 제공 (프로그램 코드에 대해 잘 이해할 수 있다)

- 프로그램 유지성이 향상된다.

- 컴퓨터에 종속적이지 않다. 

- 컴파일러를 통해 어셈블리어로 변환

- 어셈블리어와 one-to-many 관계

 

Assembly 언어

- 명령어의 문자형 표현의 마지막 단계

- CPU에 따라 다르기 때문에 컴퓨터에 종속적이다.

- 어셈블러를 통해 기계어로 변환

- 기계어와 one-to-one 관계

 

Hardware representation

- binary digits

- 명렁어와 데이터로 인코딩됨

 

 

What is Computer?

Components

1. processor

- datapath 경로, control 동작제어

 

2. memory

- main memory as DRAM

- cache as SRAM

- Disk storage as HDD or SDD

- CD/DVD

 

3. input

- mouse, keyboard

 

4. output 

- display, printer

 

5. interconnection or network

 

 

 

Object Code Stored in Memory

1. 프로세서 handling 까지 data는 컴퓨터의 메모리에 저장되어있다.

2. 메모리 상에서 data와 명령어는 구분되지 않고 32bit 이진수 문자열로 나타내진다.

 

Processor Fetches an Instruction

프로세서는 메모리로 부터 명령어를 가져온다.

 

Control Decodes the Instruction

1.Control은 명령어를 어떻게 실행할지 결정하기 위해 decode 한다

2. 프로세서 컨트롤러는 명령어를 해석해여 datapath에 무엇을 수행할지 결정하기 위해 무엇을 전달해야 하는지 판단한다.

 

Datapath Executes the Instruction

datapath는 control에 의해 명령어를 실행한다.

 

Processor Fetches the next Instruction from memory

1. 명령어 가져오기 -> decode -> 실행 -> 명령어 가져오기 반복

2. 다음 메모리에서 다음으로 가져올 위치는 cpu가 control 해준다.

 

 

 

Processor Oraganization

Control

1. 다음 명령어가 무엇인지 결정 

2. 명령어 decode

3. datapath 구성 요소간의 정보 교환을 제어하는 신호 발생

4. datapath 상의 모듈 제어

 

Datapath

datapath가 N개 : N-way superscalor processor

1. 명령어 실행 (functional units-adder, storage locations-register file)

2. 명령어가 datapath에 필요한 대로 실행될 수 있도록 functional units를 상호 연결하라

3. 메모리로부터 데이터를 읽어오고 데이터를 메모리에 저장한다.

 

Addressing mode에 의해 load from과 store to를 어느 위치에 나타내는지 결정된다.

 

 

Output Data Stored in Memory

 

 

 

 

 

ISA (Instruction Set Architecture) 어셈블리어

1. 하드웨어와 소프트웨어 사이 연결

2. 기계어 작성에 필요한 모든 정보 (명령어, 레지스터, 메모리접근)등을 포함한다.

 

ABI (Application Binary Interface)

ABI = ISA + OS interface

 

 

 

RISC는 적은 명령어를 조합해서 사용한다. 

자주 사용하는 빠른 명령어로 덜 사용하는 명령어를 대체

 

Clock rates hit a "power wall"

전력 소비 장벽에 의해 CPU의 Clock 속도를 더 이상 높일 수 없다.

Clock Rate :약 3GHz

Power : 약 100 Watts

 

 

멀티코어 : 싱글 코어의 power의 한계에 부딪혀 성능 향상이 되지 않기 때문에 비교적 느리지만 코어를 복수개로 달아 성능을 향상시키자.

소프트웨어 하나를 돌릴 때 그게 병렬 프로그래밍이 되어 있다면 멀티코어가 더 빠르지만 대부분 병렬 프로그래밍이 되어있지 않다.

병렬 프로그램을 완벽하게 짜려면

- 작업을 균등하게 스케줄링

- minimal 통신

- 순서 제어

- deadlock handling

 

 

Performance

1. CPU execution time for a program (프로그램 실행 시간)

- 시간 관점 time complex

 

2. Instruction count (명령어 개수)

- 메모리 관점 space complex

 

3. Clock cycles per instruction (CPI)

- 명령어 1개를 실행하는데 clock cycles

- CPI = 2 -> 2clock에 명령어 1개 실행 

- CPI는 작은게 좋다

 

4. Clock cycle time 

- clock 주기 (시간)

 

 

Response Time (execution time) 실행시간

- 작업의 시작부터 완료까지의 시간 

- 개인 사용자 입장에서 중요

 

Throughput (bandwidth)

- 주어진 시간 내 단위 시간 당 처리량

- 서버, 시스템 입장에서 중요

 

 

Defining Speed Performance

성능 최대화를 하려면 실행시간을 줄여야한다.

performance(x) = 1 / execution_time(x)

 

 

 

Measuring Execution Time

Elapsed time

- 프로세싱, I/O, OS scheduling 등 모든 측면을 포함한 총 시간

- system 성능 결정

 

CPU time

- I/O 시간, network 시간 등을 빼고 순수 CPU가 처리하는데 걸리는 시간

- user CPU 시간과 system CPU 시간으로 구성된다.

- 컴퓨터 아키텍처에서 CPU time은 elapsed time 보다 더 중요하다 (elapse는 device에 의존됨) 

 

 

 

 

 

2장

 

ISA for MIPS

 

 

CPU가 다르면 명령어도 다르다.

보통 컴퓨터는 매우 간단한 명령어 SET을 가지고 있다

오늘날 RISC가 조금 우세하여 이에 CISC의 장점을 합치고 이를 CRISC라 부른다

 

MIPS는 임베디드 시장에서 많이 쓰인다.

 

 

ISA (어셈블리어)는 하드웨어와 컴파일러를 만드는데 영향을 준다.

ISA로 하드웨어와 컴파일러를 쉽게 만들도록 해야한다.

(성능최대화, 비용 최소화, 설계시간 감소, 메모리 공간 최소화, 저전력)

 

 

 

RISC

 

RICS 철학

1. 명령어 길이가 고정적이다.

- 4byte = 32bit

- CISC는 명령어마다 길이가 다르다

 

2. Load-store instruction sets

- cpu는 계산만하고 메모리에서 값을 들고 오거나 저장은 load-store가 한다.

 

3. 주소지정모드가 제한되어 있다.

- 5개 제한

- 주소지정모드 : 명령어와 데이터를 메모리에서 찾아 가져올 수 있게 하는 모드

 

4. 연산의 종류도 제한되어 있다.

- ex) move 명령어로 register 값을 0으로 초기화 할 수 있지만 move 명령어를 쓰지 않고 산술연산 add를 통해 초기화

 

 

Instruction sets의 효율은 컴파일러가 얼마나 효과적으로 그것들을 사용하는지에 따라 측정된다. (프로그래머가 아닌)

 

 

 

RISC CPU를 만드는데 가져야할 4가지 원칙

1. Simplicity favors regularity. 단순하면 정규화 하기 쉽다.

- 명령어 크기가 고정되어있다.

- 명령어 포맷의 개수가 적다.

- 처음 6bit는 opcode다.

 

2. Smaller is faster. 작은게 빠르다.

- 명령어 개수가 적다.

- register 개수가 적다. (R0 ~ R31 총 32개)

- 주소지정모드도 적다.

 

3. Make the common case fast. Common case를 빠르게 찾자

- 메모리에서 데이터를 직접 load-store 하는것이 아니라, register file에서 산술연산을 수행한다. 

- 따라서 산술 연산을 위해 메모리에서 데이터를 가져오거나 저장하는 대신, 데이터를 register에 load하고 결과를 다시 register에 store한다. 

- 메모리를 거치지 않고 register 간의 연산이 이루어지기 때문에 속도가 빠르고 효율적이다. 

- I-foramt : 명령어 자체에 상수값을 넣어서 빠르게 계산하도록 하자.

 

4. Good design demands good compromises. 좋은 설계는 설계 원칙와 적절히 타협해야 한다.

- 설계 원칙은 명령어를 줄이는것이지만 그에 반하여 명령어 2개로 할 수 있는것을 3개로 한다. 

- ex) J-format 

 

 

 

MIPS-32 ISA

명령어 카테고리

1. Computational (계산 ex) add)

2. Load/Store (메모리 접근)

3. Jump and Branch (분기 goto, if, while)

4. floating point (실수 연산)

5. memory management

6. special 

 

명령어 포맷

1. R format : op rs rt rd shamt funct

- 산술연산 전용

- 처음 6bit는 무조건 0 이고 내용은 맨 뒤 6bit function에 적혀 있다.

- 6bit 64개의 명령어는 너무 적기 때문에 맨 뒤에 쓸모 없는 6bit를 사용한다.

- rs (source) + rt (target) = rd (destination)

-

 

2. I format : op rs rt immediate

- 위 명령어 카테고리 1,2,3 모두 할 수 있음

- 가장 많이 사용됨

 

3. J format : op jump target 

- Jump 명령어만 사용

- goto문