컴퓨터시스템구조

소개 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의 경우 짝수번만 사용한다. 부동소수점 명령어는 부동소수점 레지스터에서만 작동한다. 프로그램은 일반적으로 부동소수점 데이터에 대해 정수 연산을 수행하지 않으며 그 반대의 경..
부동 소수점(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
C 코드 - swap void swap(int v[], int k) { int temp; temp = v[k]; v[k] = v[k+1]; v[k+1] = temp; } v : $a0 k : $a1 temp : $t0 MIPS 코드 swap: sll $t1, $a1, 2 # $t1 = k * 4 add $t1, $a0, $t1 # $t1 = v + (k * 4) = &v[k] lw $t0, 0($t1) # temp = v[k] lw $t2, 4($t1) # $t2 = v[k+1] sw $t2, 0($t1) # v[k]= $t2 sw $t0, 4($t1) # v[k+1] = temp jr $ra C 코드 - sort void sort (int v[], int n) { int i, j; for (i = 0;..
동기화(Synchronization) 메모리 영역을 공유하는 두 프로세서 P1이 쓴 다음 P2가 읽는다. P1과 P2가 동기화되지 않으면 데이터 경합이 발생한다. 액세스 순서에 따라 결과가 달라진다. 하드웨어 지원 필요 읽기/쓰기 메모리 Atomic operation 읽기와 쓰기 사이에는 해당 위치에 대한 다른 접근이 허용되지 않는다. 단일 명령일 수 있다. 예: 레지스터 ↔ 메모리의 atomic swap Or 명령의 atomic 쌍 MIPS의 동기화 Load linked ll rt, offset(rs) Store conditional sc rt, offset(rs) ll 이후 위치가 변경되지 않으면 성공 rt = 1 위치가 변경되면 실패 rt = 0 예: atomic swap (to test/set l..
1. Immediate addressing 필요한 데이터를 직접 넣는다. I-포맷 명령 op rs rt constant or address 6비트 5비트 5비트 16비트 명령어 : addi 2. Register Addressing 피연산자로 레지스터 주소를 사용한다. R-포맷 명령 op rd rs rt shamt funct 6비트 5비트 5비트 5비트 5비트 6비트 명령어 : add, sub 3. Base addressing 피연산자인 레지스터 주소와 address(상수값)의 합으로 메모리에 접근한다. I-포맷 명령 op rs rt constant or address 6비트 5비트 5비트 16비트 명령어 : lw, sw 4. PC-relative addressing Branch target address..
32비트 상수 32비트 상수의 경우 16비트 두개로 쪼개서 저장한다. lhi rt, constant 16비트 상수를 rt의 상위 16비트에 복사하고 rt의 하위 16비트를 0으로 비운다. 이후 rt의 하위 16비트를 넣는다. lhi $s0, 61 # 0000 0000 0111 1101 0000 0000 0000 0000 ori $s0, $s0, 2304 # 0000 0000 0111 1101 0000 1001 0000 0000 분기 주소지정(Branch Addressing) 분기 명령어 Opcode, 레지스터 2개, 대상 주소 대부분의 분기 대상은 분기 근처에 있다. I-포맷 op rs rt constant or address 6비트 5비트 5비트 16비트 PC 상대 주소 지정 대상 주소 = PC(프로그..
Byte(1Byte)/Halfword(2Byte) 연산자 비트 연산을 사용할 수 있다. Sign lb rt, offset(rs) # rs 메모리 주소에서 1바이트만큼 rt 레지스터에 저장 lh rt, offset(rs) # rs 메모리 주소에서 2바이트만큼 rt 레지스터에 저장 Unsigned 0으로 확장 lbu rt, offset(rs) lhu rt, offset(rs) Store sb rt, offset(rs) sh rt, offset(rs) 문자열 복사 예제 문자열을 1바이트 씩 복사해서 옮기기 C 코드 Null로 끝나는 문자열 널 스트링(\0)을 만날때까지 계속 배열 인덱스를 증가시키면서 복사하는 코드 다른 함수를 호출하지 않는다. → Leaf 프로시저 → 스택에다가 $s 레지스터를 저장한다. v..
파스텔코랄
'컴퓨터시스템구조' 카테고리의 글 목록