개발 지식/컴퓨터 구조

[컴퓨터 구조] 컴퓨터 시스템의 구성 - HW/SW의 구성, 컴파일러와 인터프리터란? (feat. object file)

Prcnsi 2022. 4. 18. 19:45
728x90

안녕하세요! 오늘은 컴퓨터 구조의 시작은 HW/SW의 구성요소 그리고 컴파일러와 인터프리터에 대해 정확히 알아봅시다. 이야기하기에 앞서 오늘 배울 내용들을 한 장에 담은 선 요약본을 먼저 첨부하니 필요하신 분은 봐주세요.

 

 

 

 

 

1. 하드웨어의 구조

컴퓨터의 구조를 먼저 전체적으로 보면 컴퓨터는 크게 소프트웨어(SW, Software)와 하드웨어(HW,Hardware)로 나뉩니다.  하드웨어의 구조를 먼저 보면 아래와 같이 크게 중앙처리 장치(CPU), 입출력장치(I/O, Input/Output)와 메모리(memory)로 나뉩니다. 그리고 순서대로 보시면 데이터가 입력되어서 주기억장치와 보조기억장치를 거쳐서 출력하게 됩니다. 

 

 

 

 

2. 하드웨어의 구성

하드웨어는 크게 삼대장인 연산장치(CPU)와 메모리 그리고 입출력(I/O) 장치 3개로 나뉩니다.

 

2.1 중앙 처리장치(CPU)

CPU는 Central Processing Unit의 약자로 중앙 처리장치를 뜻합니다.중앙처리 장치는 연산 등을 수행하고

크게 아래 세 가지로 나뉩니다.

산술 논리 연산장치(ALU) 산술/논리/시프트 연산
제어장치 신호로 장치 제어
레지스터 임시 기억 장치, 프로그램 실행 중 접근 가능

 

 

 2.2 기억장치

기억장치는 주기억장치와 보조기억 장치로 나뉩니다. 주기억장치는 CPU 가까이에 위치하며 반도체 칩으로 구성되어 고속으로 액세스가 가능하지만 고가이다. 그에 비해 보조 기억장치는 CPU에 당장 필요하지 않은 많은 양의 데이터나 프로그램을 저장합니다.

주기억장치(램) 고속, 휘발성(고가) -반도체 칩
보조 기억장치 저속, 비휘발성(저가) - SSD, CD-ROM

 

2.3 입출력장치(I/O)

. 키보드, 마우스 같은 입력 장치는 데이터를 2진 형태로 변환하여 컴퓨터 내부로 전달한다.

그리고 LCD 모니터나 프린터 스피커 같은 출력장치는 CPU가 철한 전자적인 형태의 데이터를 사람이 이해할 수 있는 데이터로 변환하여 출력한다.

 

2.4 시스템 버스

컴퓨터 구조 페이지를 보면 계속 '버스'라는 단어가 나오는데 여기서 버스는 통로라는 뜻입니다. 주소 버스는 주소가 이동하는 통로 데이터 버스는 데이터가 이동하는 통로 이런 식으로 말이죠.

 

시스템 버스는 크게 세 가지로 이루어져 있습니다.

주소 버스 주소 정보 전송, 단방향
데이터 버스 데이터 전송위한 신호선의 집합, 양방향
제어 버스 제어에 필요한 신호선 전달, 단방향

 

 

 

3. 소프트웨어

하드웨어는 물리적인 장치였다면 소프트웨어는 프로그램으로 명령어들의 집합입니다.

소프트웨어는 크게 5가지로 이루어져 있습니다. 운영체제, 언어 번역 프로그램(컴파일러/인터프리터), 장치 드라이버, 링커, 로더로 이루어져 있습니다.

 

장치 드라이버는 컴퓨터에 온라인으로 연결된 주변 장치를 제어하는 운영체제 모듈이고 링커는 목적 프로그램을 실행 파일로 만들어 줍니다. 로더(loader)는 단어 그대로 하드디스크 같은 저장장치에 보관된 프로그램을 읽어 주기억 장치에

적재한 후 실행 가능하게 만들어 줍니다. 

1 운영체제 하드웨어 자원 관리
2 언어 번역 프로그램 컴파일러/인터프리터
3 장치 드라이버 주변 장치 제어하는 운영체제 모듈
4 링커 분할된 목적 프로그램 연결
5 로더  저장된 프로그램 불러와 실행 가능하게 함

 

3.1 컴파일러와 인터프리터란?

2번째의 언어 번역 프로그램을 보시면 컴파일러와 인터프리터가 나옵니다. 이를 이해하기 위해 아래 구조를 먼저 봅시다. 우선 저희가 코드 에디터에서 코드를 적고 실행을 하면 자동으로 결과창이 뜰 텐데요. 그 안에는 사실 아래와 같은 과정을 거쳐 결과를 띄웁니다. 결론부터 말하면 컴파일러는 목적 파일을 생성하고 인터프리터는 목적파일을 생성하지 않습니다. 

 

 

컴파일러는 코드(소스 파일)가 있을 때 통째로 목적 파일로 번역 후 실행해서 빠르고 C, C++ 같은 언어가 이 방식을 사용합니다.  인터프리터는 한 줄씩 번역후 바로 실행해서 목적파일을 생성하지 않습니다. 그리고 한줄씩 하다 보니 느리다는 단점이 있습니다. 대표적으로 Python과 JS가 인터프리터 방식을 사용합니다. 정리하면 아래와 같습니다

 

컴파일러 통채로 번역후 실행(빠름) ,목적파일 생성 O C, C++, JAVA
인터프리터 한줄씩 번역후 실행(느림), 목적파일 생성 X Python, JavaScript

 

 

 

4. 프로그램 처리 과정

프로그램은 크게 3단계를 걸쳐 이루어지는데요. 아래와 같이 고급언어로 우리가 코딩을 하면 고급언어는 어셈블리어라고 인간이 알아들을 수 있는 언어로 바뀌고 어셈블리어는 다시 기계어로 바뀌어서 최종적으로 컴퓨터가 인식합니다.

 

(여담으로 어셈블리어 LOAS, ADD 같은 거 리버 싱할 때 잠깐 봤었는데 여기서 다시 마주치니 반갑네요:) 

 

여기서 알아두셔야 할 점은 기계어를 보시면 연산 코드 3비트 + 오퍼랜드 5비트라고 되어 있는데 어셈블리어의 명령어는 각각 기계어의 연산코드 3비트로 대응되어서 해석됩니다. 그러니까 어셈블리어나 기계어나 앞자리는 LOAD, ADD, STOR 같은 수행할 명령을 담고 있고 뒤의 자리는 주소를 담고 있구나 하고 이해하시면 됩니다.

 

1 고급언어 C, C++, JAVA
2 어셈블리어 명령어 + 주소 구조
3 기계어 연산코드 3비트 + 오퍼랜드 5비트(주소)

 

 

이상으로 컴퓨터의 전반적인 작업 구조에 대해 알아봤습니다. 

읽어주셔서 감사합니다!

 

 

 

 

728x90