목록CS(Computer Science) (7)
기록하는삶
CPU의 구성과 성능컴퓨터에서 인간의 뇌와 같은 역할을 담당해 기억, 해석, 연산, 제어의 4대 기능을 관할하는 장치인 CPU는 크게 산술 연산을 담당하는 ALU(Arithmetic Logic Unit)와 어떤 명령을 실행할 지 결정하는 제어장치(Control Unit) 그리고 처리할 명령어와 데이터를 메모리로부터 불러와 임시로 저장하는 공간인 레지스터(Registers)로 구성된다. CPU의 성능은 클럭 속도와 코어 수로 결정된다. 클럭(Clock)은 초당 몇 번의 명령어를 처리할 수 있느냐를 의미하는 주파수 신호로, Hz 단위를 사용한다. 클럭 수가 3GHz라면 초당 30억 번의 명령어를 처리할 수 있다는 것을 의미한다. 코어는 CPU 역할을 하는 더 작은 단위의 블록으로, 한 개의 CPU안에 여러 ..
프로세스(Process) 본래 실행중인 프로그램 자체를 의미하는 용어지만, 프로그램의 실행 단위를 말하기도 한다. 하나의 프로그램을 실행한다는 것은 하나의 프로세스가 진행된다는 것과 같은 의미이며, 이전에는 이것이 유일한 프로그램의 실행 단위였으나 더 작은 의미의 실행 단위인 쓰레드 개념이 등장했다. 이전에는 컴퓨터가 한 번에 하나의 프로세스만을 처리할 수 있었으나, 다양한 프로세스 스케줄링 기법을 통해 여러 프로세스를 동시에 수행하는 것이 가능해졌다. 쓰레드(Thread) 하나의 프로세스 내에서 실행되는 흐름의 단위로, 하나의 프로세스는 최소 한 개의 쓰레드를 가진다. 하나의 프로세스 내에서 여러 개의 쓰레드를 생성하는 경우, 작업 수행을 위한 스택은 각각 별도로 가지지만 메모리는 공유하게 된다. 은행..
C 혹은 C++ 등의 언어로 작성된 프로그램을 실행할 수 있는 binary 파일로 변환하는 과정을 컴파일이라 하는데, 아래 4개의 세부 동작을 거쳐 진행된다. 1) Pre-processor(전처리기 _ file.cpp → file.i) #으로 선언한 코드들을 먼저 처리 외부에 선언된 소스코드, 라이브러리 등 불러오기 (#include) 매크로 변환 (#define) 컴파일 영역 명시 (#if, #ifdef) 변환 결과는 여전히 소스코드 2) Compiler(컴파일러 _ file.i → file.s) 소스 코드를 어셈블리어로 변환 동일한 소스 코드에 대한 변환 결과라 하더라도 CPU와 환경에 따라 달라질 수 있음 3) Assembler(어셈블러 _ file.s → file.o) 어셈블리어를 기계어로 변환(..
본문에 첨부하는 내용과 이미지의 상당 부분은 유튜브 CrashCourse의 컴퓨터 과학 특강을 참고하였음을 밝힙니다. 컴퓨터에서 연산을 처리하는 장치는 CPU, 그 중에서도 ALU(Arithmetic Logic Unit)다. 앞서 공부했던 기본적인 논리 회로(and, or, xor, not 등)의 결합으로 사칙 연산 등의 산술 연산과 논리합, 논리곱 등의 논리 연산을 할 수 있는 ALU에 대해 알아본다. 1) 산술 연산 먼저 1bit의 덧셈 연산을 살펴보면, 4가지의 연산이 존재한다. 앞의 세 연산은 xor 연산으로 처리 가능하지만, 1+1의 경우 올림하여 10으로 표기해야하므로, 추가적인 장치가 필요하다. 올림하는 숫자를 carry라는 output으로 하는 and 연산을 두 입력에 추가해주면, carr..
본문에 첨부하는 내용과 이미지의 상당 부분은 유튜브 CrashCourse의 컴퓨터 과학 특강을 참고하였음을 밝힙니다. 컴퓨터는 모든 정보를 0,1로 표현하고 그 한 자리를 'bit'라 칭한다. 8bit = 1 byte로 데이터의 양을 나타내는 기본 단위가 되고, 초기 컴퓨터들은 0~255를 나타낼 수 있는 이 8bit를 데이터 저장의 최소 단위로 하는 경우가 많았지만, 현대에는 32bit를 거쳐 64bit가 대부분이다. 64bit로 표현할 수 있는 정수의 최대가 약 920경이라고 하니, 적어도 아직까지는 현실 세계에서 필요한 모든 숫자를 다룰 수 있을만큼 커다란 그릇이라 봐도 무방하다. 컴퓨터가 정수를 저장할 때는 맨 앞 bit로 부호를 표현하고, 나머지로 수의 크기를 표현한다. 실수를 표현하는 방법에는..
본문에 첨부하는 내용과 이미지의 상당 부분은 유튜브 CrashCourse의 컴퓨터 과학 특강을 참고하였음을 밝힙니다. 컴퓨터가 0과 1의 무수히 많은 숫자들로 정보를 구성한다는 것 정도는 알고 있었지만, 인간이 사용하는 10진수를 두고 왜 굳이 2진수를 사용하는 지에 대해 고민해보지 않았던 것 같다. 초기에는 3진수, 5진수 등의 사용을 위한 시도들이 실제로 존재했으나 3개 이상의 state가 존재할 때 1초에 수백만 번에 달하는 신호 변경에서 그 경계를 명확히 하기가 어렵고, 전기적인 신호가 외부 다른 전기장치에 의해 영향을 받을 수 있다는 단점을 극복할 수 있는 이진법이 사용되었다. 또한 영국의 수학자 Boole의 이름을 딴 Boolean Algebra가 논리적 연산에 대한 수학적 기반을 다져놓은 상..
본문에 첨부하는 내용과 이미지의 상당 부분은 유튜브 CrashCourse의 컴퓨터 과학 특강을 참고하였음을 밝힙니다. 컴퓨터(computer)의 어원은 '계산을 하는 사람 혹은 직업'이라고 한다. 1강에서 짚어주는 역사의 흐름은 기술 발전 속도에 새삼 경외심을 느끼게 되는 흥미로운 내용이었다. 나처럼 현대의 컴퓨터를 사용하는 사람들은 복잡한 컴퓨터의 구조나 원리를 이해하지 않아도 되지만, 내가 앞으로 계속해서 사용하며 살아가게 될 이 도구이자 친구와 좀 더 친해져보기 위해 CrashCourse의 내용들을 공부하며 정리해본다. 컴퓨터에서 정보를 저장하고, 업데이트 하는 기본 원리는 전류가 흐르는지 흐르지 않는지 여부를 통해 0과 1을 표현하는 것이다. 가장 먼저 이것이 가능했던 것은 계전기를 통해서였다고 ..