컴퓨터 공학 - CPU, Memory 학습
CPU
- CPU 내부 : 1개 이상의 core가 있고, 각 core 안에는 CU, ALU, Register 존재
- Instruction : 컴퓨터에게 일을 시키는 실행코드(사람이 작성한 코드 -> 기계어(동작 지시))
- PC (Program Counter) : 다음에 실행될 인스트럭션의 주소값(메모리)을 가르킴
- CU (Control Unit) : IR 값을 참조하여 인스트럭션 실행 (관리자 역할)
- IR (Instruction Register) : CU가 실행하는 인스트럭션이 저장되어 있는 곳(주소값이 아닌 기계어(1010…) 저장)
데이터 처리 순서
ex.1
2
3a = 10
b = 20
c = a + b
- a = 10, b = 20이 RAM에 저장
- CPU 범용 레지스터(EAX, ECX)에서 EAX = 10, ECX = 20으로 일시적으로 저장
- ALU에서 10 + 20 연산한 c값(30)을 RAM에 전달
- RAM에서 c = 30으로 저장
CPU 클럭
- 1초동안 파장이 한번 움직이는 시간 = 1초에 떨리는 수정발진자의 횟수 –> CPU 속도를 나타내는 단위(Ghz)
1 | ex) 클럭 : 2.4Ghz |
RISC (Reduced Instruction Set Computer)
- 기계어 = 어셈블리어 (1:1 매칭)
CISC (Complex Instruction Set Computer)
- 기계어 = 어셈블리어 (얼추 1:1 매칭 -> 2줄짜리 어셈블리어를 1개의 어셈블리어로 통합 가능)
CPI (Clocks Per Instruction)
- 인스트럭션이 실행될때의 걸리는 클럭
Stack pointer
- 스택 프레임을 생성하고 스택 영역의 맨 위를 가르킨다.
- 시스템 해킹이란, 스택 포인터를 악성코드 함수의 맨 위 스택을 가르키도록 하는 것을 말한다.
- 매개변수는 우측에서 좌측으로 쌓인다.
- ex) def adder(int a, int b, int c) –> 스택 쌓이는 순서 : c -> b -> a
Frame pointer(Base pointer)
- 스택 프레임 내에서 변수(data 혹은 메모리)에 접근할 때 기준점이 된다.
코드 실행 순서
- IR에서 다른 함수를 실행하는 코드 저장하고, PC가 그 함수의 다음 인스트럭션을 가르킴
- 함수 실행코드 다음 인스트럭션을 return address로 저장
- IR이 함수 실행코드 모두 입력받은 후, PC가 return address를 가르킴
Memory
Memory segment
- CODE (인스트럭션 쌓임)
- DATA (전역변수 쌓임, BSS 포함)
- 프로세스 실행될 때 생성되고, 종료될 때 소멸 (전역변수는 최대한 쓰지 말 것)
- HEAP
- 프로그래머가 melloc함수 호출할 때 생성되고, free함수 호출할 때 소멸
- STACK (지역변수 쌓임)
- 함수 호출할 때 생성되고, 함수 종료될 때 소멸
- 최대크기는 default 값으로 1MB 할당됨(설정 가능)
- 메모리 : user 영역(2G) + kernel 영역(2G)
- user 영역 : 사용자가 작성한 코드 및 함수 저장
- kernel 영역 : OS 코드 및 함수 저장
Cache
- Cache –> Cache line, Cache miss, Cache hit,
- Cache line : CPU가 데이터 오ㅛ청 시, 64byte ~ 128byte 일정 라인을 한번에 가져온다.
- Cache miss : CPU가 요청한 데이터가 Cache에 없을 때
- Cache hit : CPU가 요청한 데이터가 Cache에 있을 때 –> 연구 결과, 95%의 확률로 Cache hit 발생
Register에서 CPU로 데이터 전송 시, 1cylce 소요될 때
- Cache –> Register 데이터 전송 시 : 3cycles 소요
- memory(RAM) –> Register 데이터 전송 시 : 20 ~ 100 cycles 소요
- hard disk –> Regisetr 데이터 전송 시 : 50만 ~ 500만 cycles 소요
- 데이터베이스는 hard disk에 들어 있으므로, 최대한 접근하는 것을 피해야 함
locality (지역성)
locality –> temporal locality, spatial locality
- temporal locality(시간 지역성) : 한번 접근했던 메모리에 자주 접근한다.
spatial locality(공간 지역성) : 접근한 메모리가 이전에 접근했던 메모리 근처일 확률이 높다.
1
2
3
4
5
6li = [1, 2, 3, 4, 5]
res = 0
for e in li:
res += e
# res -> temmporal locality
# e -> spatial locality
Posted
tags:
{ Computer Science }
{ Study }