컴퓨터 공학 - 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
3
a = 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
2
3
4
ex) 클럭 : 2.4Ghz
f(주파수) = 1/T(주기)
T(주기) = 1/f(주파수)
T(주기) = 1/(2.4 × 10^9) sec/1cycle (= 수정발진자가 한번 떨릴 때의 시간)

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
      6
      li = [1, 2, 3, 4, 5]
      res = 0
      for e in li:
      res += e
      # res -> temmporal locality
      # e -> spatial locality