독서&그 외

컴퓨터 구조 이해

winteringg 2022. 8. 3. 17:09

1. 일반적인 컴퓨터 구조 이해하기
1) deskTop PC, noteBook Computer, smartPhone 에서 사용하는 여러가지 프로그램을 사용.
2) java, C 언어로 만든 프로그램을 실행하는 기반을 제공.
3) 소프트웨어가 실행되는 하드웨어.
4) 프로그램 (소프트웨어)을 실행한다는 의미
 - 프로그래머가 미리 만들어 놓은 명령어를 CPU 가 읽어 들여서 그 명령어대로 컴퓨터의 하드웨어를 작동시키는 과정.

2. 하드웨어 구성 요소
1) CPU (중앙처리장치, Central Processing Unit)
 - 어떤 작업을 시키는 주체는 '사람'임.
 - 수학적 계산, 연산의 역할
 - 사람이 SSD에 설치한 프로그램을 사용하기 위해서 실행하면, CPU가 읽어 들여서 실행.
2) 주 메모리 (Main memory)
 - CPU가 작업 수행 시 필요한 명령어나 데이터를 저장하는 역할.
 - 우리가 프로그램을 실행하면 바로 CPU가 읽어서 실행하는 것이 아니라, 일단 SSD에 미리 설치되어 있는 프로그램이 주메모리에 먼저 적재(load)가 됨.
 - CPU가 실행하는 프로그램의 명령어나 자료를 저장하는 저장소 역할을 함.
 - 이 주메모리에 저장되는 프로그램의 명령어나 자료는 영구적으로 보존되는 것이 아니라 컴퓨터를 다시 껐다가 켰을 때 모두 사라져버리는 휘발성(volatile) 메모리임.
3) 입력 장치 (Input)
 - 프로그램과 상호작용하기 위해서 키보드나 마우스와 같은 장치를 사용.
 - 컴퓨터와 사용자간의 상호작용을 하는 매개체 역할.
4) 출력 장치 (Output)
 - 어떤 작업을 시키면 컴퓨터는 그 작업 결과나 상태를 사용자에게 보여줌.
 - 모니터, 프린터, 스피커
5) 외부 저장 장치 (Secondary memory)
 - 작성한 문서를 저장하면 하드디스크에 파일로 저장 됨.
 - 작업한 결과나 상태를 영구적으로 저장하는 데 사용하는 장치.
 - 하드디스크, CD, USB
 - 비휘발성(nonvolatile) 메모리

3. 중앙처리장치 (CPU, Central Processing Unit)
1) 컴퓨터에서 프로그램의 명령어를 수행하는 컴퓨터의 두뇌와 같은 역할.
2) 구성요소
 - 제어 장치 : 명령어를 해석하고 구성 요소들을 제어
 - 처리 장치 : 제어 장치의 지시에 따라 명령어 실행
    * 산술 연산, 논리 연산
    * 레지스터 (register) : 산술적·논리적 연산이나 정보 해석, 전송 등을 할 수 있는 일정 길이의 정보를 저장하는 CPU 내의 소규모 기억 장치.

4. 주메모리 (Main memory)
1) RAM
2) 컴퓨터가 작업을 수행하는 동안 작업 수행에 필요한 명령어와 자료(data)를 저장하는 장치.
3) 내부적으로 자료를 저장할 수 있는 셀(cell)로 이루어져 있음.
4) 각각의 셀에는 고유번호 즉 주소(address)가 할당되어 있음.
5) 사용자(개발자)가 프로그램을 실행하면 CPU는 수행할 명령어를 주메모리 각각의 셀에 적재함.
 => 그 후 CPU는 주메모리에서 실행할 명령어를 가지고 올 때 명령어가 저장된 각 셀에 있는 주소를 이용해서 자신이 원하는 명령어와 자료를 읽어 옴.
 => 동일하게 자료를 주메모리에 저장할 때도 주소를 이용해서 원하는 셀에 저장함.

5. 프로그램 실행 원리와 그 과정
1) 컴퓨터의 실행 방식은 '폰 노이만 방식' 임.
 - 폰 노이만 방식 : 컴퓨터가 실행할 프로그램을 미리 하드디스크 기억장치에 저장해 놓고(설치해 놓고), 프로그램 실행시 프로그램의 명령어들을 주메모리에 적재한 후, CPU가 메모리에 있는 명령어를 순차적으로 실행하는 방식.
 - 프로그램 내장 방식(stored program)

6. 소프트웨어
1) 컴퓨터 하드웨어의 기능을 통제하여 원하는 결과나 기능을 얻도록 하는 명령어의 집합.
2) 소프트웨어의 종류는 시스템 소프트웨어와 응용 소프트웨어로 나뉨.
3) 시스템 소프트웨어(system software)
 - 운영체제(operating system) : 시스템의 효율적인 운영과 관리를 목적으로 하는 소프트웨어.
 - 컴파일러, 디버거 : 다른 소프트웨어를 개발하는 데 사용되는 소프트웨어.
 - 메모리 관리 프로그램, 압축/해제 프로그램 : 운영체제 관리를 보완해주는 소프트웨어.
4) 응용 소프트웨어(applycation software)
 - 시스템 소프트웨어가 아닌 거의 대부분의 소프트웨어.
 - 프로그램(program) : 오피스 프로그램, 그래픽 소프트웨어, 게임, 브라우저 etc.

7. 컴퓨터의 정보 처리
1) 컴퓨터는 인간과 달리 모든 정보(명령어, 데이터)를 0과 1로만 인식.
2) 그렇기 때문에 컴퓨터에서는 모든 정보를 0 또는 1로 이루어진 2진수로만 처리하며, 입력 받은 숫자들을 2진수로 변화함.
 - ex) 더하기에 해당되는 명령어도 역시 2진수로 변환됨. 변환된 2진수들을 각각 더한 후, 다시 10진수로 변환해서 화면에 표시해줌.
3) 숫자 뿐만 아니라 문자, 문자열, 이미지, 소리, 동영상 등 모든 데이터와 그 데이터를 처리하는 명령어들을 2진수로 변환해서 처리함.
4) 컴퓨터의 CPU는 2진수의 명령어와 데이터만 인식함.

8. 비트(bit)와 바이트(byte)
1) 위에 언급했듯이, 컴퓨터가 받아들이는 모든 정보는 0과 1로 변환되어서 메모리에 저장됨.
2) 메모리에 있는 이진수 한 자리를 '비트'라고 함.
 - 2가지 정보만 구분할 수 있음. (0과 1)
 - 신호 하나를 0 또는 1로 처리.
3) 8개의 비트를 묶은 것은 '바이트'라고 함.
 - 8자리의 2진수로 총 2의 8승인 256까지 표현이 가능.
 - 1 바이트는 1 비트보다 훨씬 더 많은 값을 나타낼 수 있음.
 - 컴퓨터에서 정보를 처리하는 기본 단위로 삼음.

9. 프로그래밍 언어
1) 프로그램
 - CPU가 실행하는 명령어와 데이터의 집합.
2) 프로그래밍
 - 컴퓨터에게 사용자가 원하는 작업을 시키는 명령어를 작성하는 과정.
3) 프로그래밍 언어
 - 컴퓨터에게 어떤 일을 지시하려면 컴퓨터가 인식할 수 있는 규칙과 문법에 맞게 문장을 작성하여 지시해야 함.
 - 명령어를 작성할 수 있게 만든 수단.
4) 고급 언어
 - 사람이 컴퓨터에게 일을 시킬 때, 사람이 사용하는 언어를 기반으로 해서 작업하는 방식.

10. 컴파일러(Compiler)
1) 사용자가 프로그램을 실행시키면 CPU는 메모리에 적재된 명령어를 읽어와서 기능을 실행함.
 - 명령어는 2진수로 이루어진 2진 코드에 해당.
2) 고급 언어 프로그래밍 과정은 반드시 프로그래머가 작성한 소스 코드를 CPU가 인식할 수 있는 2진 코드로 변경해 주는 과정이 필요함.
 => 이 과정을 '컴파일링'(compiling) 이라고 하고, 컴파일링을 하는 도구를 '컴파일러'(compiler) 라고 함.
 - 고급 언어로 작성된 명령어를 코드(code) 라고 부름.
 - 작성된 명령어의 묶음을 소스 코드 (source code) 라고 부름.

11. 프로그램 개발 과정 
1) 문법에 맞게 소스 코드를 작성, 파일로 저장.
2) 2진 명령어 코드로 변환 작업(컴파일링) 을 함.
3) 사용자가 실행 코드(실행파일) 를 실행하면, CPU가 2진 코드를 읽어서 실행함.
 - 오류 발생 시, 다시 첫번째로 돌아가서 오류를 수정하여야 정상적으로 프로그램이 실행 됨.