#32 컴퓨터 과학

국기웅·2024년 6월 7일
  1. 컴퓨터의 발전의 역사
  2. 하드웨어 구조

이 두가지에 대한 TIL이다.

숫자를 계산하는 방법

초기에 우리는 손가락으로 숫자를 계산해왔다. 이를 통해 10진법을 본능적으로 활용했다. 하지만 이것으로 큰 수를 계산하기는 어려워져 주판과 같은 도구를 사용하게 되었다.
이후에는 도구를 이용하여도 복잡한 계산은 어려워 컴퓨터가 등장하기 시작하였다.
컴퓨터는 라틴어가 어원으로 "계산하다"라는 뜻을 가지고 있다.

컴퓨터의 계산 방법

컴퓨터는 0과 1로 이루어져있다. 이 공간을 bit라고 한다. 0,1로 이루어져 있기에 2진수를 활용해야한다.
2진수는 2 -> 10으로 대치해서 본다고 생각할 수도 있을 것 같다. 숫자의 나열은 아래와 같다
0, 1, 10, 11, 100, 101, ....

1바이트는 8비트로 이루어져 있다.
예로 Int자료형에서 32비트로 할당된 공간은 4바이트이다.

0110 0001 로 표시되는 숫자는 10진수로 97로 읽을 수 있다.
하지만 char로 읽으면 a가 되고, 255색으로 보면 회색이 나온다.
하나의 같은 데이터라도 자료형에 따라 다르게 읽힐 수 있다는 것이다.

최초의 컴퓨터

첫 컴퓨터는 애니악Eniac이다. 하지만 그 기원은 세계대전때 사용된 암호 해독 기계 콜로서스에 있다.
암호화는 보통 "내용"과 "암호화 키"로 이루어져 있다.
암호화는 encrypt라고 하고 되돌리는 복호화 과정은 decrypt라고 한다.
웹에서 사용되는 JWT도 위와 비슷한 절차를 가진다.

PC

PC는 Personal Computer의 약자이다. 여러가지 개인 사용의 컴퓨터가 발매되기 시작되었다.
컴퓨터는 cpu, ram, 하드디스크로 이루어져 있다. 각자 하는 역할에 맞춰서 분리되어 있다.

cpu의 경우 Arthmetic Logic Unit과 제어장치, 레지스터와 캐시메모리로 이루어져 있다.
하나의 회사로 비유해 보았을때, 농촌은 하드디스크에 비유할 수 있다. 저장할 수 있는 공간들이 많이 있다. 이 물건들은 도심 근교의 물류창고, ram에 저장할 수 있다.
여기서는 다시 비서실에 있는 캐시 메모리로 옮길 수 있고, ceo, 즉 cpu ALU는 도심의 모든 일들을 처리하는 역할을 한다.

캐시메모리로 데이터를 옮기는 것은 ALU로의 작업을 빠르고 원활하게 작동하게 만들어 준다. 캐시메모리의 공간이 클수록 더 많은 양을 저장할 수 있고, 이건 속도 향상에 큰 도움이 된다.

GPU

과거에는 dos에서 프로그램이 진행되었기 때문에 그래픽에 대한 필요성이 드러나지 않았다. 하지만 영상이나 게임과 같은 매체들을 표현하기에는 cpu로는 매우 부족하였다.

1920 1080모니터라고 했을 때, 이 해상도는 픽셀의 수를 의미한다. 즉 FHD해상도의 픽셀은 2,073,600개인 것이다. 매 프레임마다 저 픽셀만큼 계산을 해야하는데 매우 큰 작업량이다.
이때 등장한 것이 GPU이다. GPU는 여러개의 계산처리코어로 이루어진 것으로, 복잡한 계산은 어려워도 단순계산을 빠르게 가능하다. CPU는 GPU에 드로우콜을 보낸다. GPU의 작업을 한번에 요청하는 것을 의미한다.

최적화 방법 기본 이론

빌드 용량이 너무 큰 경우 스토어에 업로드 제한이 걸린다.
하드 : 최초 실행시 메모리에 올리는 양이 많아도 부하가 걸릴 수 있다.
램 : 메모리를 만힝 차지할 시 앱 내에서 강제로 종료시킨다
cpu : 연산에 부하가 걸릴 시 지연된다.
GPU : 셰이더 연산이나 텍스처 메모리가 큰 경우 화면 렉걸림이나 제대로 표현이 안되는 상황이 발생한다.

운영체제, 쓰레드

windows는 가장 기본적이고 대중적인 운영체제이다.
두가지가 있는데 x64와 x86로 나누어져 있다.
x64는 64비트로, x86d은 32비트로 계산한다.요즘은 대부분 64비트계산이다.

운영체제의 큰 역할은 리소스 관리에 있다. 각 ram cpu gpu의 리소스를 운영체제가 관리한다.
프로그램을 실행시킨 경우 하드에서 램으로 데이터를 옮긴다. 이 과정을 "프로세스"라고 한다.
프로세스는 일하는 과정을 의미하는데, 여기서 일하는 일꾼과 같은 개념을 스레드라고 한다.

Unity는 싱글스레드였는데, 최근들어 jobsystem을 통한 멀티스레드를 지원하기 시작하였다. 스레드는 컨베이어 벨트에 비유하기도 한다. 박스(업무)들을 계속해서 옮기게 된다. 순차적으로 일을 수행한다. Jobsystem 은 이 컨베이어 벨트를 하나 더 생성하는 개념이다. 로딩과 같은 업무에서 주로 사용한다.

profile
게임개발호소인

0개의 댓글