전체 글

Developer Blog 📜 Lots of rules and no mercy ✨
데이터패스(Datapath) 구축 데이터패스 CPU에서 데이터와 주소를 처리하는 요소 레지스터, ALU, 멀티플렉서, 메모리, … MIPS 데이터패스를 점진적으로 구축 점점 개요 디자인 개선 CPU 안에 어떻게 연결(위치) 시킬 것인가 명령어 가져오기(Fetch) 어떠어떠한 하드웨어가 필요한가 일단 32비트 레지스터 PC 필요 : 주소값 저장 용도 다음 명령을 위해 4씩 증가 R-포맷 명령어 op rs rt rd shamt funct 두 개의 레지스터 피연산자 읽기 산술/논리 연산 수행 레지스터 결과 쓰기 예) add $s0, $s1, $s2 Read register 1 $s1 Read register 2 $s2 Write register $s0 Write Data Read data 1, 2를 통해 $s..
소개 CPU 성능 요인 명령어 수(Instruction count) : ISA, 컴파일러에 의해 결정 CPI와 사이클시간(Cycle time) : CPU 하드웨어에 따라 결정 두 가지 MIPS 구현을 검토할 것이다. 1. 단순화된 버전 2. 현실적인 파이프라인 버전 단순 하위 집합으로 대부분의 측면을 보여줌 메모리 참조 : lw, sw 산술/논리 : add, sub, and, or, slt 제어 전달 : beq, j 명령어 실행 PC → 명령어 메모리, 명령어 가져오기 레지스터 번호 → 파일 등록, 레지스터 읽기 명령어 class에 따라 다르다. ALU를 사용하여 계산 산술 결과 로드/저장을 위한 메모리 주소 지점 대상 주소 로드/저장을 위해 데이터 메모리에 액세스 PC : 대상 주소 or PC + 4(..
MIPS 부동소수점 연산자 부동소수점 하드웨어는 보조 프로세서(coprocessor) 1번 ISA를 확장하는 보조 프로세서 메인 메모리의 프로세스는 인덱스가 32비트*32개가 있었다. coprocessor도 인덱스가 32비트*32개가 있다. f로 시작 : $f0 ~ $f31번 까지 별도의 FP 레지스터 32 single-precision : $f0, $f1, ..., $f31 double-precision 쌍 : $f0/$f1, $f2/$f3, ... MIP 릴리스 2 ISA는 32*64비트 부동소수점 레지스터을 지원한다. double의 경우 짝수번만 사용한다. 부동소수점 명령어는 부동소수점 레지스터에서만 작동한다. 프로그램은 일반적으로 부동소수점 데이터에 대해 정수 연산을 수행하지 않으며 그 반대의 경..
자료형(Data Types) 데이터 타입은 동일한 유형의 값(value)과 조작할 값에 적용할 수 있는 연산자(operation) 집합이다. 동종(homogeneous) : 같거나 유사한 종류(↔ 이종). 값 + 연산자 : 데이터 타입은 값에 관한 것뿐만 아니라 연산도 포함된다. 예) 정수, 문자열, 배열에 대해 서로 다른 연산이 필요하다. 타입 시스템(Type System) 프로그래밍 언어에는 데이터 유형을 관리하기 위한 자체 타입 시스템(정보 및 규칙)이 있다. 타입 시스템은 일반적으로 다음으로 구성된다. 미리 정의된 타입의 세트 새로운 타입의 정의를 지원하는 메커니즘 동등성 규칙(equivalence rules), 호환성 규칙(compatibility), 타입 추론(type inference)과 같..
고차 함수(Higher-Order) 다음과 같은 경우 함수는 고차로 간주된다. 함수를 매개변수로 받아들인다. 아니면 함수를 반환한다. 이 메커니즘은 많은 프로그래밍 언어, 특히 기능적 언어에서 지원된다. 매개변수로서의 함수 함수를 매개변수로 사용하는 C 코드의 예제 int x = 1; int f(int y) { return x+y; // x = 1 } int g(function h) { int x = 2; return h(3)+x; // x = 2 } int main() { //Functions as parameters int x = 4; int z = g(f); // x = 4 } 함수 f는 g에 매개변수로 전달된다. 변수 x가 여러 번 정의되었다. 함수 g에서 x의 어떤 바인딩을 사용해야 하는가? 이..
매개변수 전달(Parameter Passing) 매개변수 전달은 하위 프로그램이 프로그램의 다른 부분과 통신하는 방법이다. 서브프로그램의 관점에서는 세 가지 종류의 매개변수를 고려할 수 있다. IN 매개변수 : caller에서 callee로 통신 OUT 매개변수 : callee에서 caller로 통신 IN/OUT 매개변수 : 양방향 통신 형식 매개변수(Formal parameters) : 함수의 선언에 나타나는 매개변수 실제 매개변수(Actual parameters) : =인수(arguments), 함수 호출에서 함수에 전달되는 것 Call by Value IN 매개변수에 해당하는 모드 실제 매개변수(인수)는 표현식일 수 있다. 호출 시 실제 매개변수가 계산되고 해당 리턴값(r-value)이 형식 매개변..
컨트롤 추상화(Control Abstraction) 데이터 추상화와 함께 프로그래밍 언어의 가장 중요한 두 가지 개념 중 하나이다. 복잡하고 큰 소프트웨어의 경우 주요 목표나 요구 사항을 달성하는 방법 많은 작은 요구 사항을 충족함으로써 달성 분할, 정복의 개념 모바일 쇼핑 앱을 개발한다고 가정하자. 필요한 기능 제품 데이터를 읽기 앱에 제품 표시 제품 검색 고객정보 관리 제품 리뷰 결제수단 구매 관리 배송 옵션을 관리 하나의 큰 프로그램에서 이러한 모든 것을 구현하는 것은 좋은 생각이 아니다. 대신 각 기능을 독립적으로 제공하는 하위 프로그램(subprograms)을 구현할 수 있다. 구현 세부 사항을 숨기고 이를 디자인과 분리할 수 있다. 다른 구현으로 쉽게 전환할 수 있다. 우리는 서 프로그램을 사..
부동 소수점(Floating Point) 정수가 아닌 표현 매우 작은 숫자와 매우 큰 숫자 과학적 표기법과 유사 2.34 * 10^56 +0.002 * 10^–4 +987.02 * 10^9 2진법 ±1.xxxxxxx_2 * 2^yyyy C의 float 및 double 유형 부동 소수점 표준 IEEE Std 754-1985에 정의 표현의 다양화에 대응하여 개발됨 과학 코드의 이식성 문제 이제 거의 보편적으로 채택 두 가지 표현 Single precision (32비트) Double precision (64비트) IEEE 부동 소수점 형식 Sign Exponent(지수) Fraction(가수) single : 32비트 1비트 8비트 23비트 duoble : 64비트 1비트 11비트 52비트 X = (-1)^..
컴퓨터 산술 정수(integer) 연산 덧셈, 뺄셈 곱셈, 나눗셈 오버플로 처리 부동소수점 실수(Floating-point real number) 표현 및 연산자 산술 논리 장치(ALU) 정수 이진수의 산술/비트를 연산하는 조합 디지털 전자 회로 CPU, FPU, GPU를 포함한 다양한 컴퓨팅 회로의 기본 구성 요소 하나의 CPU, FPU, GPU에는 여러 ALU가 포함될 수 있다. 정수 덧셈 예) 7 + 6 결과가 범위를 벗어나면 오버플로가 발생한다. '+', '-' 피연산자 더하기 오버플로 없음 두 개의 '+' 피연산자 더하기 결과 부호(sign bit)가 1인 경우 : 오버플로 두 개의 '-' 피연산자 더하기 결과 부호(sign bit)가 0인 경우 : 오버플로 정수 뺄셈 두 번째 피연산자 부정 예..
배열 vs. 포인터 배열 인덱싱 찾으려면 요소 크기에 인덱스를 곱해야한다. 배열 기본 주소에 추가 포인터는 메모리 주소에 직접적으로 대응한다. 인덱싱 복잡성을 피할 수 있다. 배열 C 코드 clear1(int array[], int size) { int i; for (i = 0; i < size; i += 1) array[i] = 0; } i : $t0 array 주소 : $a0 size : $a1 MIPS 코드 move $t0, $zero # i=0 loop1: sll $t1, $t0, 2 # $t1=i*4 add $t2, $a0, $t1 # $t2=&array[i] sw $zero, 0($t2) # array[i]=0 addi $t0, $t0, 1 # i+=1 slt $t3, $t0, $a1 # i
파스텔코랄
슬기로운 개발일지