트랜지스터
1. 트랜지스터란?
- 트랜지스터는 쉽게 말해 컴퓨터의 가장 기본적인 요소를 의미한다.(마치 생물의 기본 요소가 단백질(→ 탄소)인 것처럼)
- 컴퓨터의 구성요소 중 하나인 CPU는 트랜지스터 덩어리라고 생각하면 된다.
2. 트랜지스터 구성요소
- N(-) P(+) N(-) 으로 구성되어 있으며 P에 전압이 가해져야만 (-)전류가 통과하는 원리로 작동한다.
- 전압이 가해지지 않은 P는 벽과 같은 존재이며 base라고 부른다. 이 base에 input을 걸어서 논리소자(0 or 1) 생성
3. 트랜지스터 기능
- 스위치 기능
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제곱 개의 문자 표현 가능
- ASCⅡ코드 : 255개까지의 문자 개수에 대해 부여된 코드
- 그림(색)
- 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. 키보드, 마우스 등)
- 키보드 + 마우스 = 기본 입/출력장치
- 콘솔 : 사람이 컴퓨터(기계)를 이용하기 위한 조종 장비(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와 커뮤니케이션할 수 있도록 해주는 간접적인 접근 도구
- 주로 함수 형태로 제공