How Computers Work [02]

Drawing

How a Little Microprocessor Does Big Things

하노이 타워

Drawing

하노이 타워 게임, 혹은 하노이 타워 퍼즐(문제)라고 불리는 게임 이 게임은 다음과 같은 2가지 규칙을 지키며 tower(pole)에 끼워져 있는 원반(disk)를 다른 pole로 옮기는 게임 혹은 문제를 말한다.

Drawing

예를 들어 총 3개의 원반으로 하노이 타워가 구성되었을 때 한 타워에서 다른 타워로 모든 원반을 옮기는 과정은 다음과 같다.

Drawing

총 4개의 원반으로 하노이 타워가 구성된다면 같이 3개의 원반으로 구성된 타워에서 다음과 같이 확장하여 문제를 해결 할 수 있다.

Drawing

따라서 원반 개수가 하나 씩 늘어날 수록 원반을 옮기는 데 걸리는 시간(옮기는 원반의 개수)은 약 2배 씩 늘어나게 된다.

하노이 타워의 유래인 인도 전설에 의하면, 인도 베나레스의 사원에 있는 64개의 원판을 가진 하노이 타워를 승려들이 차례로 한쪽 끝에서 다른쪽 끝으로 옮기게 되면 세상의 종말이 오게 된다고 한다. 원반의 개수가 증가하면서 옮겨야 하는 원반의 개수는 약 2배 씩 증가하기 때문에, 64개의 원반을 한쪽 끝에서 다른 한쪽 끝으로 옮기기 위해서는 18,446,744,073,709,551,615번의 이동이 필요하다. 승려들이 1초에 한 번 씩 원반을 옮긴다고 생각했을 때, 약 5,850 억 년이 걸릴 것이므로, 하노이 타워로 인해 지구가 종말 할 일은 걱정하지 않아도 될 것 같다.

컴퓨터(프로세서)가 잘 할 수 있는 것.

“A processor such as the Intel Core i7-965 Extreme Edition, with a clock speed of 3.20 gigahertz—3,200,000,000 ticks of the clock every second—could complete the monks’ original tower exercise in 13 day and four hours.”

  • 단순한 연산, 같은 작업(연산)의 반복과 같은 작업 = 하노이타워의 디스크 옮기기(시뮬레이션).
  • 수학 연산

“Multiplying 100 by 3,000 is accomplishing by adding 3,000 a hundred times. Division consists of subtracting one number from another continuously until the result is 0 or the final number is not large enough to subtract the divisor from it.”

-> 컴퓨터는 곱셈과 나눗셈 계산하기 위해 여러번 더하거나 빼는 것을 반복하는 방식으로 계산한다. 사람은 구구단을 “외워서” 계산하지만 결국 사람 역시 여러번 더하거나 빼는방식을 통해 공식이나 방법을 만들었음 -> 자연스러운 방식!

  • Where’s Waldo(with a same template)

Drawing Drawing

컴퓨터가 잘 할 수 없는 것.

  • 그림그리기, 소설 쓰기와 같은 감성적 활동(매우 높은 난이도의 현실 세계를 모델링 해야 함)
  • 컴퓨터는 통찰력과 직감이 없음.

구글, 인공지능(AI)이 쓴 연애소설: http://cm.asiae.co.kr/view.htm?no=2016051608243121704#ba

  • Where’s Waldo(with a different template)

Drawing Drawing

HOW A PROCESSOR TRACKS NUMBERS

Drawing

컴퓨터가 bit들로 이루어진 2진수를 계산하는 방법은 우리가 사람이 메모를 하면서 숫자 계산을 하는 것과 유사하다.

똑똑한 사람은 복잡한 수학 계산을 머릿속으로 계산 할 수 있지만, 매우 단순한 숫자 계산에서도 연필과 메모장이 있어야 숫자가 어디서 어디로 더해지거나 곱해지는 등의 결과를 만들어내는 중간 과정을 확인 해 볼 수 있다. 컴퓨터 프로세서가 계산을 위해 사용하는 메모장은 레지스터라고 하는 저장장치 이고, 연필은 전기(전가기파, 펄스)이다.

1. 마이크로 프로세서의 레지스터는 마이크로 프로세서 칩 내부의 더 빠른 메모리(메인메모리 보다 빠른 메모리, = 캐시 메모리 cache memory)에 위치한다. 이 레지스터에는 수학 명령어를 수행하는 프로세서의 산술 논리 장치 (ALU)와 프로세서를 통해 명령과 데이터를 집계하는 제어 장치가 레지스터에 빠르게 접근 할 수 있다. 레지스터의 크기는 프로세서가 한 번에 처리 할 수있는 데이터의 양을 결정한다. 대부분의 PC에는 32 비트 또는 64 비트의 데이터 레지스터가 있다.
2. The processor’s control unit directs the fetching and execution of program instructions. (See “How a Microprocessor Moves Data”, on pages 36-37.)

It uses an electrical signal to fetch each instruction, decodes it, and sends another control signal to the arithmetic logic unit telling the ALU what operation to carry out.

Drawing

  • instruction - 모든 프그램은 수많은 instruction의 순차적 조합으로 이루어져 있음.

Drawing

CPU, RAM, Program

Drawing

Single Programming

Drawing

Multi Programming

Drawing

3. 컴퓨터의 모든 구성요소는 각자의 할 일을 정해진 time stamp 마다 수행할 수 있다. 이 time stamp를 clock cycle또는 system clock cycle이라고 한다. 이 clock cycle의 주기에 따라 프로세서는 전기 pulse를 보내거나 받아서 정보(이진수 bits)를 쓰거나 읽는다.
The computer’s clock regulates how fast the computer works. The faster a clock ticks, causing pulses of electricity, the faster the computer works. Clock speeds are measured in megahertz, or millions of ticks per second.

cpu의 성능이 궁금할 때 봐야 할 것 -> 코어 개수, clock수, 캐시 메모리 크기 http://www.compuzone.co.kr/product/product_list.htm?BigDivNo=4&MediumDivNo=1012

(아래는 가볍게 읽고, 키워드 정도만 기억 해도 좋을 것 같다.)

  1. Address registers collect the contents of different addresses in RAM or in the processor’s on-board cache, where they have been prefetched in anticipation that they would be needed.

  2. When the processor reads the contents of a location in memory, it tells the data bus to place those values into a memory data register. When the processor wants to write values to memory, it places the values in the memory data register, where the bus retrieves them to transfer to RAM.

  3. A program counter register holds the memory address of the next value the processor will fetch. As soon as a value is retrieved, the processor increments the program counter’s contents by 1 so it points to the next program location. (A computer launches a program by putting the program’s first value into the counter register.)

  4. The processor puts the results of executing an operation into several accumulation registers, where they await the results of other executing operations, similar to those shown in the illustration on the next spread, “How a Processor Does Math.” Some of the instructions call for adding or subtracting the numbers in two accumulators to yield a third value that is stored in still another accumulator.

디지털 회로 gate

디지털 부품은 복잡한 회로로 구성되어 있다. 이 회로는 여러가지 gate들의 조합으로 구성되어 있음. 가장 많이(대부분)쓰는 gate는 다음과 같은 3가지 임.

Drawing

위와 같은 gate들을 사용하여 어떻게 컴퓨터는 논리 계산(더하기, 빼기, 곱하기, 나누기, shift, 비트연산)을 수행한다.

다음과 같이 단 2개의 회로를 사용해서 1bit크기의 숫자 연산을 수행할 수 있다.

Drawing

이를 확장하여 다음과 같이 2bit크기의 숫자 연산을 수행할 수 있다.

Drawing

HOW A PROCESSOR MOVES DATA(생략)

HOW MULTI-CORE PROCESSORS WORK

어떻게 멀티코어 프로세스가 작동하는가 = 대부분의 PC에서 프로세스가 어떻게 작동하는가

반도체 칩의 집적도의 한계로 인해 단일 프로세서로 한 컴퓨터를 더이상 빠르게 할 수 없을 경우 여러 프로세서를 한 컴퓨터에서 일하게 하면 된다. 즉, 멀티-코어 프로세싱을 통해 속도를 항샹시키는 방법.

예를 들어

그렇다면 단순하게 프로세서의 개수만 늘린다면 컴퓨터의 속도가 늘어나는 것은 아니다. 컴퓨터의 속도와 프로세스가 어떻게 일을 처리하는지에 대해서 좀 더 고민이 필요하다. 컴퓨터의 속도가 프로그램이(series of machine instructions)이 cpu에서 처리되는 속도 라고 생각했을 때, 단순하게 instructions를 공평하게 여러 프로세스에게 나눠 처리하도록 하는것이 아니다. 예를 들어, 10개의 디스크를 갖는 하노이타워에서 디스크들을 옮기는 시뮬레이션 프로그램을 생각 했을 때, 각 instructions들이 하나의 디스크를 옮기는 과정을 실행한다고 생각 해 보자. 쿼드코어 프로세서에서 각 코어가 공평하게 1번 instruction부터 4번 instruction을 동시에 실행 하더라도 하노이 타워의 특성상 이 instruction들이 동시에 이루어 질 수 없다(정해진 순서가 있있기 때문에).

실제 프로그램에서는 각 instruction이 실행하는 과정은 훨신 더 작은 단위로 실행 될 것이다.(예를 들어, A번타워로 손을 가져간다, 디스크의 순서를 계산하다, 디스크를 집는다, 디스크를 들어올린다. 등)

따라서 멀티 프로세서가 컴퓨터의 전체 성능에 제공할 수 있는 컴퓨팅 파워와 장점을 충분하게 얻으려면 운영체제의 도움이 필요하다. 운영체제는 컴퓨터 하드웨어, 즉 프로세서의 코어 개수를 알 수 있어야 하고 각 프로그램의 실행 단위인 instruction들을 적절하게 여러 프로세스로 보내줄 수 있어야 한다(운영체제의 가장 중요한 기능 중 하나).

따라서 고성능의 프로세싱 파워가 필요한 프로그램의 경우(머신러닝, 딥러닝, 고사양 게임 등) 프로그램을 만들때, 멀티코어 프로세싱을 고려하여 프로그램을 제작한다.

일반적인 프로그램(프로그램 제작 시 멀티 프로세싱을 고려하지 않은 경우)은 프로세서의 여러 코어 중 하나가 전적으로 그 프로그램의 실행을 담당하고 나머지 코어들은 다른 프로그램의 실행을 담당하거나 백그라운드 프로세스를 실행(메모리 옵티마이징, 파일 다운로드, 등등)할 수 있다.

How Motherboards Conduct a Symphony of Data

  • 마더보드(motherboard), 시스템보드(system board), 북미에선 mobo등으로도 불리며 애플에서는 로직보드(logic board)라는 이름으로 쓰이기도 한다.

컴퓨터 시스템은 중앙처리장치(CPU), 주기억장치(램), 보조기억장치(하드디스크) 등의 다양한 장치들로 구성되어 있다. 그리고 이러한 장치들이 한데 설치되는 주 기판을 메인보드(Mainboard), 혹은 마더보드(Motherboard)라고 한다. 축구 경기로 비유하자면 CPU나 램, 하드디스크를 축구공이나 축구 선수라 한다면 메인보드는 이들이 경기를 펼치는 그라운드라고 할 수 있다.

마더보드는 컴퓨터(또는 모바일, 각종 컴퓨팅 디바이스)의 각 하드웨어 구성요소(CPU, RAM, GPU, USB모듈 등등등….)를 연결 해 주는 역활을 하며, 각 구성요소가 조화롭게 작동할 수 있도록 중간 사다리 역활을 한다.

저항(Resister)

Drawing

콘덴서(capacitors)

Drawing

microchips

다양한 microchip들을 관리하기 위한 부품은 chipset이라고 함

Drawing

chipset

Drawing

회로

Drawing

위키 메인보드: https://namu.wiki/w/메인보드

Additional

Hex(Hexadecimal, 16진법)

10 진법: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 을 사용,
16 진법: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

컴퓨터에서 2진수를 이용하여 표현할 때 너무 많은 자리를 차지하기 때문에, 2진수 4개를 묶어서 16진수로 만들어 표기하게 되었다. 가령 16비트 2진수 1010000111001001의 경우 너무 길어서 식별이 어렵다. 그러나 이 16비트를 4비트씩 나누어서 1010 0001 1100 1001으로 만든 후에 각각을 16진수로 표현하면 A1C9 로 표현 할 수 있다.

Hash(Hashing, Hash table, Hash function)

자료구조의 한 종류로서 일종의 mapping table 이라고 생각, 입력 값에 대한 출력값 고정(압축), 데이터의 무결성 검증, 인증, 암호화 등에 사용된다.

Drawing

MetaData

간단하게는 데이터를 위한 데이터 라고 표현한다. 어떤 데이터나 자료 자체가 아닌 그 자료나 데이터의 특징이나 성질을 나타낼 수 있는 데이터를 말함, 책을 예로 들면, 책은 데이터이고 책의 전체 쪽 수, 출판사, 책의 주인 등등이 메타데이터가 될 수 있다. 컴퓨터에서도 메타데이터는 여러 분야에서 적용 될 수 있는 개념이지만, 가장 중요한 것은 컴퓨터 파일시스템이 정의하는 파일들의 메타데이터 이다.

Drawing

위키 “메타데이터” https://ko.wikipedia.org/wiki/메타데이터

코어 덤프(core dump), 메모리 덤프(memory dump), 또는 시스템 덤프(system dump)

” 기억장치의 내용을 전부 또는 일부를 인쇄하여 출력하는 것을 말한다. 일부만을 출력할 때 출력되는 장소를 덤프영역(dump area)이라 한다. 메모리의 내용을 출력하는 것을 메모리덤프 또는 스토레이지 덤프라 하며, 자기테이프나 자기디스크의 내용을 꺼내는 것을 각각 테이프 덤프, 디스크 덤프라고 한다. 출처: [네이버 지식백과] 덤프 [Dump] (정보통신용어사전, 2008. 1. 15., 일진사)”

컴퓨팅에서, 코어 덤프(core dump), 메모리 덤프(memory dump), 또는 시스템 덤프(system dump) 는 컴퓨터 프로그램이 특정 시점에 작업 중이던 메모리 상태를 기록한 것으로, 보통 프로그램이 비정상적으로 종료했을 때 만들어진다.[2] 실제로는, 그 외에 중요한 프로그램 상태도 같이 기록되곤 하는데, 프로그램 카운터, 스택 포인터 등 CPU 레지스터나, 메모리 관리 정보, 그 외 프로세서 및 운영 체제 플래그 및 정보 등이 포함된다. 코어 덤프는 프로그램 오류 진단과 디버깅에 쓰인다. 이 명칭은 1950년대부터 1970년대 랜덤 액세스 메모리로 주로 쓰던 자기 코어 메모리[3]에서 유래했다. 자기 코어 기술은 더 이상 쓰이지 않지만 그 명칭은 계속 쓰이고 있는 것이다. 많은 운영 체제는 프로그램에 치명적인 오류가 일어나면 자동으로 코어 덤프를 실행시키는데, 이를 “코어를 덤프한다”고 한다. 이 말의 의미가 확장되어, 많은 경우에 프로그램 메모리의 기록이 발생하는지 여부에 관계없이 생기는 치명적인 오류를 의미하게 되었다. “코어 덤프”, “메모리 덤프” 또는 그냥 “덤프”라고도 하는 이 용어는 추가적인 검사를 위해 많은 양의 원시 데이터를 저장하는 것을 나타내는 전문 용어가 되었다.

출처: https://ko.wikipedia.org/wiki/코어_덤프

Ecc(Error Correct Code)
  1. 하나의 데이터 단위, 즉 “워드”가 램이나 보조기억장치에 저장될 때, 그 워드 내의 비트 순서를 나타내는 코드가 계산되어 그 데이터와 함께 저장된다. 64 비트 길이의 워드 각각에는 이 코드를 저장하는데 필요한 여분의 7 비트가 소요된다.

  2. 데이터 단위를 읽어낼 때, 지금 읽으려고 하는 워드의 코드를 원래의 알고리즘을 이용해 다시 계산한다. 새로 생성된 코드와 그 워드가 저장될 때 생성되었던 코드를 비교한다.

  3. 만약 두 코드가 일치하면, 그 데이터에는 오류가 없다고 보고, 내보낸다.

  4. 그러나 만약 그 코드들이 일치하지 않으면, 코드 비교를 통해 잘못되었거나 빠진 비트들을 결정한 뒤, 그 비트를 정정한다.

  5. 그 데이터가 아직 저장 장치 내에 있을 때에는 정정을 위한 시도가 일어나지 않는다. 결국, 그것은 새로운 데이터에 의해 덮어씌워질 것이며, 그 오류들은 일시적이라는 가정 하에 부정확한 비트들은 버려진다.

  6. 시스템이 꺼졌다 켜졌다를 계속해서 반복한 후, 같은 저장장소에서 반복되는 어떤 오류는 영구적인 하드웨어 에러를 의미하므로, 반복적인 에러가 나는 위치를 나타내는 메시지가 로그에 기록되거나 시스템 관리자에게 보내어진다.

64 비트 워드 레벨에서, 패리티 검사와 ECC는 같은 수의 여분의 비트를 필요로 한다. 일반적으로, ECC는 적은 비용으로 컴퓨터나 전송시스템의 신뢰도를 증가시킨다. 보통 Reed-Solomon 코드가 사용되는데, 이것은 틀린 비트뿐 아니라 지워진 비트까지를 찾아내어 복원시킨다.

출처: http://www.terms.co.kr/ECC.htm

데이터 베이스(Database)

example of 관계형 데이터베이스의(relational database)

Drawing

데이터베이스 시스템이란 데이터를 체계화 하여 저장하고, 관리(읽기, 추가, 삭제, 수정)하는 전 과정을 담당하는 시스템.

데이터베이스가 안쓰이는 곳이 없다!!