본문 바로가기
컴퓨터 프로그래밍/C

컴퓨터 기본

by __ALE__X__ 2021. 11. 24.

Hardware : Software = Body : Mind

          다른 컴퓨터로부터                  다른 컴퓨터로부터

사용자 -> 입력장치 -> 컴퓨터 본체 -> 출력장치

          키보드, 마우스 등          ↓       스피커, 프린터 등

                                           ↓

가장 큰 부품: 전원 공급 장치

그래픽 카드 크기↑

CPU, 반도체 열↑ -> 냉각장치 안에 있음

 

메인보드-> 중앙 처리장치/주 기억장치(메모리)

                       가운데              *전원 끄면 메모리 없어짐

 

CPU

-      주 기억장치로만 소통함

주 기억장치(메모리, RAM-Random Access Memory)

-      전원을 끄면 데이터가 사라짐 (Volatile type of memory)

-      빠름

그래픽 카드(Graphics Card)

-      GPU: 그래픽 카드에 들어간 CPU -> 냉각장치 있음, 메모리 존재

보조 기억 장치

-      전원을 꺼도 데이터 존재

-      느림

-      Ex) 하드 디스크 드라이브(HDD, 움직이는 부품 있음), SSD(USB의 발전형) -> 물리적으로 움직이는 부품 X, 비쌈

 

 

전원을 킬 때

부팅 절차

-      전원공급

-      부트 프로그램 실행 (ROM: Read Only Memory)

-      하드웨어 검사

-      운영 체제(OS) 로드: 보조기억장치에 저장되어 있음

= 보조 기억 장치 -> 주기억장치로 복사 -> CPU가 사용

-      운영 체제 실행

 

운영 체제의 역할

종류: UNIX, Linux(무료 OS), android, ios, mac os, window

 

사용자 -> 시스템 프로그램, 응용프로그램 -> OS (Operating System) ->

 [ Kernel -> 하드웨어(CPU, 메모리, 보조기억장치, 입출력 장치) ]

OS: 하드웨어 운영 조절(어느 프로그램이 CPU를 더 사용해야 하는지 정함), Interface 제공

 

컴퓨터가 2진수를 사용하는 이유

모든 데이터를 숫자로 바꾸어서 저장 -> 0, 1

Decimal numerical system <-> Binary numerical system

0 – 0                      5 – 101

1 – 1                      6 – 110

2 – 10                    7 - 111

3 – 11

4 – 100

에디슨이 발명한 진공관 -> 컴퓨터로 발전(에니악) -> 트랜지스터 발명(실리콘사용 반도체)

실리콘을 사용하는 반도체 -> 그래서 실리콘밸리

 

트랜지스터 -> 진공관의 기능과 같음, 안전성, 작음

Quad-core 코어 17 -> 트랜지스터 1억 6천개

 

현대적 컴퓨터의 기본 구조

 

과거 프로그래밍

è 플러그 보드 (배선 꼽았다 뺐다)

è 펀치카드

앨런 튜링: Universal Turing machine (UTM)

폰 노이만: 폰 노이만 구조, 핵폭탄 개발 실험 참여

 

-      폰 노이만 구조 (애니악 -> 폰 노이만 구조로 업그레이드)

: 내장형 프로그램 방식의 컴퓨터 (Stored-program computer)

 

                             CPU

Input   ->      Control Unit             ->  Output

Device          Arithmetic/Logic Unit       Device

                             ↓↑

                      Memory Unit

 

 

컴퓨터 메모리의 기본 구조

CPU    ->  메모리

: 연산      : 저장

         ↔

    캐쉬 메모리

 

순차 접근(Sequential access): 테이프처럼 -> 모든 메모리를 확인해야함

임의 접근(Random access): 메모리 -> 정보를 얻고 정보 바탕으로 메모리 찾음

 

Binary Digit = bit

 

          →(어느 주소에 있는)→         ADDRESS

CPU    →(데이터를 보내/저장해)→   CONTROL          RAM

          ↔(데이터수신/발신)↔          DATA

 

C 언어의 포인터가 있는 이유: Address bus 때문에

-> 하드웨어 프로그램 만드는데 유리(빠름)

 

CPU의 구조

프로그램이 시작되는 과정

CPU (프로그램 개발이 CPU에게 어떤 일을 해야 하는지 알려주는 것)

↕

주기억장치(메모리)             보조기억장치(HDD, SSD)

    프로그램             ←                프로그램

 

 

고수준 프로그래밍 언어                   A = 3

(High level programming language)   B = 4

                                                 C = A + B

 

                                                (니모닉, Mnemonic)

어셈블리 언어                             LOAD  [10]               [메모리의 주소]

(Assembly language)                     ADD    [11]

                                                STORE [12]

 

기계어                                       100110          0000001010

(Machine code)                            110011          0000001011

                                                111010          0000001100

 

CPU 명령어 집합(Instruction Set)

Functional Group Example Mnemonics
Move Instructions MOV
Math Instructions MUL DIV ADD SUB
Logic Instructions AND IOR XOR NEG
Rotate/Shift Instructions ASR LSR SL
Bit Instructions BEST BCLR BTG BTST
Compare/Skip/Branch BTSC BTSS CPBEQ CPBGT
Flow Control Instructions BRA CALL RCALL REPREAT
Shadow/Stack Instructions LNK POP PUSH ULNK
Control Instructions NOP CKRWDT PWRSAV RESET
DSP Instructions MAC LAC SAC SFTAC

 

 

CPU의 구성 요소들

 

제어 장치                    ↔      

(Control Unit)                         

 

                                            여러가지

          ↓                               레지스터들

 

                                            (Registers)

     산술논리장치           ↔

(Arithmetic Logic Unit)

 

레지스터 종류 기능
주소 레지스터 읽거나 쓸 메모리 주소 저장
프로그램 카운터 다음 명령어의 메모리 주소 저장
데이터 레지스터 메모리에서 읽어온 데이터 저장
명령어 레지스터 메모리에서 읽어온 명령어 저장
어큐뮬레이터 연산에 사용되는 데이터 저장

 

CPU가 일하는 방법

 

 

프로그램 카운터(Program Counter, PC) : 명령어가 어느 주소에 있는지 알려줌

메모리 주소 레지스터(Memory Address Register) : 명령어에 접근함

메모리 데이터 레지스터(Memory Data Register) : 명령어를 가지고 옴

명령어 레지스터(Current Insturction Register) : 명령어가 옮겨감

프로그램 카운터(Program Counter) :

항상 다음번에 가지고 와야할 메모리 주소를 가지고 있어야 하기 때문에 숫자가 하나 증가함

명령어 레지스터 : 명령어가 제어장치로 들어감 (디코딩)

메모리 주소 레지스터 : 10이라는 주소가 입력됨

메모리 데이터 레지스터 : 10 주소의 3이라는 값이 입력

어큐뮬레이터 : 산술 논리 장치와 계산하기를 시작함

 

 

정보의 단위

 

클라우드 섀넌 : 정보의 기본 단위 '비트' 처음 사용

 

데이터 vs 정보

데이터 ↔ 처리과정 ↔ 정보

(디지털 정보의 단위는 디지털 데이터의 단위이기도 합니다)

 

비트 bit (Binary Digit)             정보의 기본 단위

0

1 바이트 byte = 8 비트 bit       메모리 주소의 기본 단위

01010101

1 워드 word = 16 비트 bit        CPU가 데이터를 다루는 기본 단위

                 = 32 비트 bit        = 레지스터의 크기

01010101 01010101

01010101 01010101 01010101 01010101

 

ex)

8 비트 컴퓨터 -> 8 비트 = 1 워드

64 비트 아이폰 -> 64 비트 = 1 워드

 

2진수 (Binary numbers)

 

10진수

256

= 200 + 50 + 6

= 2 * 100 + 5 * 10 + 6 * 1

= 2 * 10^2 + 5 * 10^1 + 6 * 10^0

 

2진수

10(2진수) = 1 * 2^1 + 0 * 2^0 = 2

11(2진수) = 1 * 2^1 + 1 * 2^0 = 3

 

10진수 -> 2진수

148(10진수) ÷ 2 ÷ 2 ÷ 2 ÷ 2 ÷ 2 ÷ 2 ÷ 2 ÷ 2 ...

몫               74    37  18   9    4    2    1    0

나머지          0      0    1   0    1   0     0    1

 

=> 148(10진수) = 1001 0100(2진수)

 

ex) 4비트 2진수 더하기

 

     0110     (10진수 6)

+   0111     (10진수 7)

------------

     1101     (10진수 13)

 

부호가 있는 8비트 정수 (Signed Integer) -> Two's complement(2의 보수) 방법

 

10진수 -5   (10진수 -> 2진수)

1. 5를 2진수로        0000 0101

2. 보수 complement 1111 1010

3. 더하기 1             1111 1011

                           ↑

             첫 비트가 1이면 음수

                           0이면 양수

 

           0000 0101

+         1111 1011

------------------------

         1 0000 0000

 

Two's complement -> -0 = 0

 

(음의 정수 2진수 -> 10진수)

1.                                    1001 1110 (첫 비트 1 = 음수)

2. 보수 complement            0110 0001 

3. 더하기 1                        0110 0010

 

1 * 2^6 + 1 * 2^5 = 98 -> -98

 

※부호가 있는 정수인지 부호가 없는 정수인지 확인※

 

부호가 있는 정수 (signed integer)

1000 0000 ~ 0111 1111

      -128   ~ 127

 

부호가 없는 정수 (unsigned integer)

0000 0000 ~ 1111 1111

           0  ~  255

 

-> 표현할 수 있는 숫자의 갯수는 같음 (256개)