Home CS 기초
Post
Cancel

CS 기초

트랜지스터

1. 트랜지스터란?

  • 트랜지스터는 쉽게 말해 컴퓨터의 가장 기본적인 요소를 의미한다.(마치 생물의 기본 요소가 단백질(→ 탄소)인 것처럼)
  • 컴퓨터의 구성요소 중 하나인 CPU는 트랜지스터 덩어리라고 생각하면 된다.

2. 트랜지스터 구성요소

  • N(-) P(+) N(-) 으로 구성되어 있으며 P에 전압이 가해져야만 (-)전류가 통과하는 원리로 작동한다.
  • 전압이 가해지지 않은 P는 벽과 같은 존재이며 base라고 부른다. 이 base에 input을 걸어서 논리소자(0 or 1) 생성

3. 트랜지스터 기능

- 스위치 기능

  • 컴퓨터의 0과 1을 표현하는 물리적인 방법 = 2진수 기법을 활용할 수 있는 방법
  • P에 전압을 가하거나 안가하거나로 0과 1을 표현

    - 증폭 기능

  • 컴퓨터에서는 거의 사용하지 않음

4. 트랜지스터 용량

  • 트랜지스터 1개 = 1bit = 0 or 1 표현
  • 트랜지스터 8개 = 1byte
  • 트랜지스터 8 X 1024 = 1Kbyte
  • 트랜지스터 8 X 1024 X 1024 = 1Mbyte

논리소자(Logic Element)

1. 논리소자 종류

AND : A,B 모두 1일 경우만 결과값 1

|A|논리소자|B|결과| |:–:|:–:|:–:|:–:| |0|AND|0|0| |0|AND|1|0| |1|AND|0|0| |1|AND|1|1|

OR : A, B 둘 중 하나라도 1일 경우 결과값 1

|A|논리소자|B|결과| |:–:|:–:|:–:|:–:| |0|OR|0|0| |0|OR|1|1| |1|OR|0|1| |1|OR|1|1|

XOR : A,B 가 다를 경우 결과값 0

|A|논리소자|B|결과| |:–:|:–:|:–:|:–:| |0|XOR|0|0| |0|XOR|1|1| |1|XOR|0|1| |1|XOR|1|0|

NOT : 입력값과 반대되는 결과값 산출

|A|논리소자|결과| |:–:|:–:|:–:| |0|NOT|1| |1|NOT|0|

2. 옴의 법칙(Ohm’s law)

V = IR , I(전류) = V(전압)/R(저항)

  • 저항이 높으면 전류는 낮아지고, 저항이 낮으면 전류는 높아진다.
  • 트랜지스터 base에 전압을 가하면(input =1) 저항이 O에 가까워져 전류가 흐르고(도체), base에 전압을 가하지 않으면(input = 0) 저항이 무한에 가까워 전류가 흐르지 않는다.(부도체)

3. 도체, 부도체, 반도체

  • 도체 : 전기가 흐르는 물체 / R = 0에 가까움
  • 부도체 : 전기가 흐르지 않는 물체 / R = ∞에 가까움
  • 반도체 : 상황에 따라 전기가 흐르거나 흐르지 않는 물체(=트렌지스터)

4. 논리소자로 계산기 만들기

가산기(1bit)

|input1|input2|C|S| |:–:|:–:|:–:|:–:| |0|0|0|0| |0|1|0|1| |1|0|0|1| |1|1|1|0|

  • C = AND / S = XOR 이며 이를 조합하여 “가산기” 를 만들 수 있다.
  • 또한 C와 또 다른 1bit 가산기와 결합하면 2bit 가산기도 생산 가능(연산 가능 단위 증가)
  • 가산기 뿐만 아니라 다른 논리소자 조합으로 감산기, 곱셈, 나눗셈 만들 수 있다.

컴퓨터(Computer)

1. 컴퓨터란?

  • 컴퓨터란 명령(CPU 시선에선 사칙연산같은 단순 명령, 또는 흐름 제어)을 하나씩 순서대로 수행하는 기계를 의미
  • 어떤 명령을 어떤 순서로 수행할 건지를 기술해 놓은 것이 프로그램
  • 문자, 그림, 음악 모두 숫자로 표현 가능하다.(A:1, B:2)
    • 문자
      • ASCⅡ코드 : 255개까지의 문자 개수에 대해 부여된 코드
        • 1byte규모 : 8bit이므로 2의 8제곱 개의 문자를 표현 가능(0 ~ 255)
      • UNICODE : 2byte내에서 전세계 모든 문자에 코드를 할당한 문자 전산 처리 방식
        • 2의 16제곱 개의 문자 표현 가능
    • 그림(색)
      • R(0-255), G(0-255), B(0~255)로 할당(각각 1Byte)
    • 소리
      • 주파수에 따른 파장의 크기를 각각 숫자에 할당

2. 컴퓨터 구성품(요리과정에 비유)

  • CPU(Central Processing unit) = 쉐프 : 요리(연산)를 준비하도록 지시하고 실시하는 역할
    • ALU(Arithmetic Logic Unit) : 산술 및 논리연산 유닛
    • CU(Control unit) : 흐름제어 유닛
  • 레지스터 = 도마+보조쉐프 : 쉐프가 요리를 할 수 있도록 필요한 재료를 도마 위에 올려다 주는 역할
    • 레지스터는 CPU의 구성품으로 포함된다.
    • 임시저장소 역할 수행
  • 하드디스크 = 마트 : 요리에 필요한 재료가 저장되어있는 공간
  • 메모리 = 냉장고 : 필요한 재료를 보관해두는 공간
  • 캐시메모리 = 요리대 옆 공간 : 자주쓰는 재료를 쉐프와 더 가까운 곳에 보관해두는 공간(4Kbyte 용량)
  • 그 외 장비

    • 콘솔 : 사람이 컴퓨터(기계)를 이용하기 위한 조종 장비(ex. 키보드, 마우스 등)
      • 키보드 + 마우스 = 기본 입/출력장치

프로그램 / 프로그래밍 언어

1. 프로그램 / 프로그래밍 언어란?

  • 프로그램이란 수행절차에 대한 명령과 순서를 작성해 놓은 문서이며, 여기서 말하는 문서를 쓰는 언어가 프로그래밍 언어이다.
  • 프로그램을 컴퓨터가 바로 읽을 수 없으니 이 문서를 0이나 1의 형태(기계어)로 바꿔주는 것도 프로그래밍 언어의 범주, 역할에 속한다.

    추가정보
    HTML,CSS 언어는 수행절차에 대한 명령과 순서를 표현한 언어가 아닌 웹 상에 시각적인 모습을 표현하기 위한 언어이기 때문에 프로그래밍 언어라 보기 힘들다.

2. 저수준 vs 고수준 프로그래밍 언어

그 전에!! 기계어(1세대 언어)란?

  • 기계어란 이진법을 활용해 0과 1만을 조합하여 컴퓨터가 직접적으로 이해할 수 있는 언어를 의미한다.
  • 프로그래밍을 통해 사용자가 원하는 작업을 컴퓨터에게 시키기 위해선 결국 최종적으로 기계어로 번역이 완료되어야 한다.

저수준 프로그래밍 언어 = 어셈블리어(2세대 언어)

  • 기계어로 쉽게 변환이 가능한 저급 언어
  • 명령어(OP) :단순 연산만 처리하는 명령

    1
    
      ex) ADD, SUB, MUL, JMP 등
    
  • OPCODE : 각 명령어(OP)에 숫자를 부여한 코드

    1
    
      ex) ADD = 0001 , SUB = 0010 . MUL = 0011 , JMP = 0100
    

즉, “ ADD 3,4 “ 라는 실행 코드를 “0001 0011 0100” 으로 변환해야 컴퓨터가 이해할 수 있다.

고수준 프로그래밍 언어(3세대 언어)

  • 기계어로 쉽게 변환이 불가능해 변환기(컴파일러)가 필요한 언어
  • 컴퓨터의 입장에선 직접 이해가 불가능하지만 사람은 이해하기 쉬운 구조의 언어
  • C언어, JAVA, Python 등 우리가 널리 사용하는 언어들이 바로 고수준 프로그래밍 언어이다.

세대별 프로그래밍 언어 특징

|고수준 언어|번역기(컴파일러 or 인터프리터)|저수준 언어(어셈블리어)|번역기(어셈블러)|기계어| |:–:|:–:|:–:|:–:|:–:| |3세대 언어|->|2세대 언어|->|1세대 언어| |-|->|기능코드|->|실행코드| |논리언어|->|물리언어|->|물리언어| |문자코드 언어|->|문자코드 언어|->|숫자코드 언어| |3+4|->| MOV AX 3 MOV BX 4 ADD |->|010 011 110 100 011 |

고수준 프로그래밍 언어 구분

동적 언어 / 정적언어의 차이: 자료형 결정 시기에 따른 구분

컴파일 언어 / 인터프리터 언어의 차이 : 실행 방법에 따른 구분

3. 정적(Static)언어 vs 동적(Dynamic)언어

정적 언어

  • 컴파일 전 변수에 들어갈 값의 자료형을 미리 지정하는 언어
  • 정적 언어의 장점
    • 변수의 자료형을 이미 정해진 상태에서 실행되기 때문에 컴파일 시 다른 자료형끼리의 연산으로 인한 오류가 발생할 가능성이 낮다.
    • 실행속도가 동적 언어보다 빠르다.
  • 정적 언어의 단점
    • 컴파일 전 모든 변수값의 자료형을 직접 확인해야 한다.

동적 언어

  • 실행 전 변수에 들어갈 값의 자료형을 미리 지정하지 않고 변수에 따라 형이 결정되는 언어
  • 동적 언어의 장점
    • 자료형에 대한 제약이 적어 유연한 코드를 작성할 수 있다.
  • 동적 언어의 단점
    • 실행해보기 전 자료형에 의한 오류를 발견하기 어렵다.
    • 실행속도가 정적 언어보다 느리다.

4. 컴파일(Compile)언어 vs 인터프리터(Interpreter)언어

컴파일 언어

  • 전체 코딩을 한꺼번에 기계어로 변환해서 명령을 실행하는 프로그래밍 언어
  • 문서 생성(코딩) -> 빌드(기계어로 변환) -> 실행파일 생성(기계어로 구성)
  • 컴파일 언어의 장점
    • 실행 속도가 빠르다(기계어로 변환이 완료된 채로 명령을 실행하기 때문에)
  • 컴파일 언어의 단점
    • 운영체제에 대한 유연함이 낮다. 다시 말해, 플랫폼별 호환되는 컴파일러의 변환 과정이 달라 각 플랫폼에 맞는 실행파일을 따로 만들어야 하는 불편함이 생겨난다.

인터프리터 언어

  • 중간언어를 실행하는 중간에 한줄 한줄 기계어로 변환해서 명령을 실행하는 프로그래밍 언어
  • 문서생성(코딩) → 빌드(매우 짧음 / C#, Java) → 중간언어(문서형태) → 기계어
  • 인터프리터 언어의 장점
    • 운영체제에 대한 유연함이 높다.
  • 인터프리터 언어의 단점
    • 컴파일 언어에 비해 실행 속도가 느리다

API

1. API란?

  • API(Application Programming Interface)란 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
  • 입/출력 API의 경우, 달라질 수 있는 입/출력 장치에 상관없이 약속되어 있는 인터페이스를 통해 CPU와 커뮤니케이션할 수 있도록 해주는 간접적인 접근 도구
  • 주로 함수 형태로 제공

** 참고자료**

tucker님의 유튜브 강의 1~6편

또리장군님의 블로그

뉴랙처님 유튜브 강의(컴퓨터 프로그래밍 하기 위한 사전 지식)

This post is licensed under CC BY 4.0 by the author.

마크다운 문법 기초

스파르타 코딩클럽 개발일지_1주차