일단 CPU, RAM, SSD로 크게 나뉜다고 생각된다.
1. CPU: 연산처리장치
CPU의 성능은 Hz 1초당 깜빡이는 횟수? 클럭속도
초당 실행하는 사이클수 GHz 단위로 측정 근데 단지 클록속도가 결정하는 것은 아님
단일 클럭 사이클에서 다수의 명령이 완료 가능! 하나의 명령이 다수의 클럭에 완료 가능하기 때문에 동일한 CPU 브랜드와 세대에서 비교하는 것이 좋다
자주 사용하는 데이터를 캐시 메모리에 저장한 뒤, ram이 아니라 캐시에서 가져온다.
듀얼 코어 프로세서의 캐시 메모리 : 각 코어마다 독립된 L1 캐시 메모리를 가지고, 두 코어가 공유하는 L2 캐시 메모리가 내장됨
만약 L1 캐시가 128kb면, 64/64로 나누어 64kb에 명령어를 처리하기 직전의 명령어를 임시 저장하고, 나머지 64kb에는 실행 후 명령어를 임시저장한다. (명령어 세트로 구성, I-Cache - D-Cache)
L1 : CPU 내부에 존재
L2 : CPU와 RAM 사이에 존재
L3 : 보통 메인보드에 존재한다고 함
메모리 시스템이 뭘까?
메모리
이렇게 그림으로 봤을 때 CPU랑 가장 가까운 것은 레지스터
현재 CPU의 연산속도가 너무 빨라서 메모리의 성능이 따라 가지를 못함
주기억장치 RAM을 거쳐 CPU 내부 메모리인 Cache Memory를 통해 CPU로 데이터 이동
CPU에 내부 메모리가 있다고 ? == Cache Memory
보조기억장치 HDD SSD는 꺼도 데이터 live!
주기억장치 RAM: 데이터가 소멸!
L1, L2, L3로 계층이 분리
L1: 빠름, 용량 작음 (프로세서에 근접) <---
CPU 연산에 필요한 데이터 --> L1에 요청 L1없음? L2요청 --> 연속
이 과정중에 일어나는 일이 캐쉬미스!!
즉, L1에 없으면 캐쉬미스가 일어난다!!!
이것이 곧 프로세스 성능을 좌우한다
L1에 없으면 L2꺼를 L1에 복사, L2에 없으면 L3에서 L2, L2에서 L1으로 가져와 쓴다
5를 0101이라는 이진수로 인식 0011 + 0010로 인식? WHY??????
컴파일: C 또는 Java를 CPU가 이해할 수 있는 어셈블리어 같은 기계언어로 변환
즉, 다른 언어의 동등한 프로그램으로 변환하는 작업
어셈블러: 특히 어셈블리어를 기계어로 번역하는 프로그램
Buffer Overflow: 프로그램이 실행 될 때 입력받는 값이 버퍼를 가득 채우지도 못하고 흘러 넘쳐서 버퍼 이후의 공간을 침범 하는 현상! 데이터를 입력 받을 때 준비된 것보다 더 많은 양의 데이터를 입력받을 때 발생. 해커가 프로그램의 메모리 값을 변조할때 쓰임.
ex) 8칸 메모리에 4칸 버퍼인데 5칸 넣으면 버퍼 이후의 값이 바뀌는데, 사용자에게 통지하지 않음
데이터를 요청할때 서버는 메모리에 저장 된 다른 정보까지 끌고와 패킷을 채운 뒤 사용자에게 재전송해준다.
Bit -> Nibble -> Byte -> Word -> DoubleWord -> LongWord
오오 이게 사실 데이터의 크기랑 크게 연관성이 있다~
1바이트를 구성하는 8비트 중에서 7비트만 쓰도록 제정된 이유는, 나머지 1비트를 통신 에러 검출을 위해 사용하기 때문이었다. Parity Bit라고 해서, 7개의 비트 중 1의 개수가 홀수면 1, 짝수면 0으로 하는 식의 패리티 비트를 붙여서, 전송 도중 신호가 변질된 것을 수신측에서 검출해낼 확률을 높인 것. 원시적인 CRC 체크섬이라고 할 수 있지만 당연히 이런 체크에 검출되지 않는 신호 에러도 얼마든지 생길 수 있고 현재는 더 이상 쓰이지 않는다. 현재는 8비트 문자 인코딩에서는 그냥 맨 앞 비트에 0을 붙이고 이어서 7비트가 이어지는 식의 인코딩이 일반적이다.
대박사건
짝수 패리티를 사용한다하면, 현재 전송되는 데이터의 비트 1의 개수가 홀수면, 1을 맨 뒤에 붙여서 짝수로, 짝수라면 0을 맨 뒤에 붙여서 짝수로 1의 개수를 맞춰주는 것이다.
지금 컴파일 해볼려고 하는 데
에러 해결