← All writing
Development

section 7 part 1 note taking

ㅋㅋㅋㅋ 강의 3개 도합 30분이 안 되는데 한나절이 걸리네ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

section 7 buffer

memory alloc

  • 전체 메모리에서 이진데이터 전용 보관함
  • 항상 단위는 1 바이트
  • os가 울타리를 침
  • memory.allocate(buffer) 할당
  • 할당 구역 내 자유로운 데이터 입출력
  • buffer와 array는 매우 흡사한 구조
  • 여러 data를 일렬로 나열한 기차 구조
  • 하지만 완전히 동일하진 않으니 혼동하지 말 것
  • 버퍼는 그 크기가 아닌 하드웨어를 직접 통제 할 수 있다는 것이 중요함

buffer

  • 생성시 모든 공간을 0으로 초기화
  • node.js 에서 buffer는 항상 1바이트 단위
  • 할당된 용량을 초과한 데이터는 error없이 가차없이 버려진다. discard
  • 버퍼객체는 데이터를 자유자재로 다룰 수 있는 내장 함수를 제공
  • 버퍼 작업이 빠른 이유는 하드웨어와 직접 맞닿아 있기 때문에 low level
  • ram : capacity라는 초미니 배터리 수백억개의 모음, 배터리에 전자를 꽉채우면 1 비우면 0

2의 보수 2's complement

  • -42 <-> 214 : 2의 보수 변환 : 음수를 표현하는 영리한 규칙 0과 1만으로 해결
  • 첫번째 bit MSB 0 양수 + 전기가 꺼짐 1 음수 전기가 켜짐
  • 음수를 다루는 순간, 실제 숫자를 담는 공간은 7자리로 줄어든다.
  • -128 ~ -1, 0 ~ 127 total 256
  • 숫자크기용 공간 7자리
  • 마법의 해결책 complement 보수 등장
  • 비트를 뒤짚는 1의 보수 그 결과에 1을 더하는 2의 보수
  • 뺄셈을 덧셈으로 처리하는 방식, 왜? 뺄셈은 존재하지 않기에
  • 1의 보수의 문제점은 +0 과 -0의 개념이 발생한다는 점
  • 단순히 비트를 뒤집고 1을 더하면 buffer는 8bit이기 때문에 1이 overflow
  • a - b === a + (2의 보수 b)

메모리 저장

  • -42 의 2의 보수를 메모리에 저장 11010110
  • [0]을 이용해 값을 저장/읽는 경우, 음수를 부호없는 양수로 인시하는 경우 발생
  • writeint8, readInt8 method
  • offset은 기준값으로부터 얼마나 떨어져 있는지 나타내는 거리의 값
  • writeInt8은 2의 보수 규칙을 적용한다.
  • []인덱스 방식 부호를 적용하지 않는다, 양수가 기본값

URL

  • toString("hex") 를 이용하면 정제된 원시데이터 16진수 문자열 획득
  • 다른서버에서 목적에 맞게 재가공 가능
  • "utf8" === "utf-8"
  • URL은 ASCII만 인식하다.
  • 비ascii 값은 네트워크 % 16진수 순수 이진데이터를 순수 hex로 바꾸고 buffer("utf8") 로 가공

소감

  • 아니 너무 16진수 2진수 10진수 왔다갔다해서 정신이 하나도 없어
  • 왜 필요한지는 알겠음
  • stream 하기 전 buffer에 대해서 잘 알아두는 것이 중요할 것 같음
  • 다만 하드웨어적인 이해도가 조금 떨어져서 아예 컴퓨터를 뜯어보고 싶은 마음이 생기지만 실행하진 않을 것임
  • URL부분은 도움도 되고 자주 쓰일 것 같은 개념이므로 이해가 필요함