컴퓨터구조 (Computer Architecture)
1. 컴퓨터의 구성
컴퓨터는 크게 하드웨어 + 소프트웨어로 구성된다.
• 하드웨어 (Hardware)
- 컴퓨터를 구성하는 물리적 기계장치
- CPU, 기억장치, 입출력장치로 구성
• 소프트웨어 (Software)
- 하드웨어 동작을 지시, 제어하는 명령어 집합
- 크게 시스템 소프트웨어와 응용 소프트웨어로 나뉨
하드웨어
: 하드웨어는 CPU, 기억장치, 입출력 장치로 구성되며 시스템 버스가 물리적으로 이들을 연결해준다.
(1) CPU (중앙처리장치, Central Processing Unit)
- 컴퓨터의 두뇌에 해당
- 입력받은 명령어를 해석, 실행한 후 그 결과를 출력
- 일반적으로 PC에서 CPU를 마이크로 프로세서라고 부름 (따라서 거의 같은 의미를 가리키지만 동일 개념은 아님)
- ALU, 제어장치, 레지스터로 구성
- ALU (산술논리연산장치) : 산술, 논리 연산 및 쉬프트를 수행, 연산에 필요한 데이터 레지스터에서 가져와서 그 결과 다시 제어장치로 보냄
- 제어장치 : 명령어의 해석과 실행 담당, 명령어 순서대로 실행할 수 있도록 제어, 주기억장치에서 명령어를 꺼내서 해독하고(기계어로 변환) 그 결과에 따라 명령 실행에 필요한 제어신호를 기억장치, 연산장치, 입출력장치로 보낸 후 해당 장치가 보낸 신호를 받아서 다음 수행 동작 결정
- 레지스터 : 명령어 주소, 코드, 연산에 필요한 데이터, 연산 중간값을 일시적으로 저장하는 고속 저장 공간, CPU 종류에 따라 사용가능한 레지스터 크기 및 개수가 다름, 용도에 따라 범용 레지스터와 특수목적 레지스터로 분류
※ 레지스터 분류
- 범용 레지스터 (general purpose register) : 연산에 필요한 데이터 혹은 연산 결과 임시 저장
- 특수목적 레지스터 : 특별한 용도로 사용되는 레지스터
ex) MAR (Memory Address Register) : 메모리 주소 레지스터
PC (Program Counter) : 다음에 수행될 명령어 주소 저장
IR (Instruction Register) : 기억장치에서 읽어낸 명령어를 받아서 저장해두는 레지스터 (즉 현재 실행 명령어)
MBR (Memory Buffer Register) : 메모리 버퍼 레지스터 (주기억장치에서 읽어온·저장할 데이터 임시 저장)
AC (Accumulator) : 누산기, 연산결과 임시 저장
SP (Stack Pointer) : 스택의 최상위(TOP) 지정
(2) 기억장치
- 프로그램, 데이터, 중간 결과를 저장
- 주기억장치와 보조기억장치로 나뉨
- 주기억장치 : 컴퓨터 내부에서 현재 CPU가 처리하고 있는 내용을 저장 ex) RAM, ROM
- 보조기억장치 : 주기억장치보다 느리지만 큰 용량의 데이터를 영구적으로 보관 ex) HDD
※ 주기억장치(메인메모리)의 영역 : 프로그램이 실행되면 운영체제는 메인메모리에 필요한 메모리 공간 할당
1) 코드 영역 : 프로그램 소스코드가 저장, CPU는 코드 영역에 저장된 명령어 가져와서 처리
2) 데이터 영역 : 전역 변수와 정적 변수 저장. 프로그램 시작과 함께 할당되며 프로그램 종료시 소멸
3) 스택 영역 : 프로그램이 사용하는 임시 메모리 영역으로 함수 호출과 관계되는 지역 변수와 매개 변수가 저장됨. 함수 호출될 때 할당되며 함수 종료시 소멸. 함수 호출 구조가 스택 자료구조(LIFO)와 동일하기 때문에 스택으로 구현. 컴파일 타임에 영역의 크기 결정됨
4) 힙 영역 : 사용자에 의해 동적으로 할당되고 해제되는 영역. 동적 할당을 통해 생성된 동적 변수를 관리하기 위한 영역. 런타임에 영역의 크기 결정됨
▷ 여기서 스택 영역과 힙 영역은 사실상 같은 공간을 할당받음 (힙은 메모리 위쪽 주소부터, 스택은 아래쪽부터) 따라서 각 영역이 상대 공간을 침범할 수 있는데 이 경우를 스택 오버플로우, 힙 오버플로우라고 부름
※ RAM과 ROM 비교
- RAM (Random Access Memory) : 읽고 쓰기가 가능, 전원 끊어지면 데이터 모두 지워지는 휘발성 메모리. 프로그램 로딩, 데이터 일시적 저장 등에 사용
- ROM (Read-Only Memory) : 전원이 끊어져도 데이터가 소멸하지 않는 비휘발성 메모리. BIOS 등이 저장됨
(3) 입출력장치
- 입력장치 : 마우스, 키보드 등
- 출력장치 : 프린터, 모니터, 스피커 등 (컴퓨터에서 외부로 표현하는 모든 장치)
(4) 시스템 버스
- 하드웨어의 구성 요소들을 '물리적으로' 연결 : 서로 데이터를 보낼 수 있는 통로가 되어줌
- 용도에 따라 데이터 버스, 주소 버스, 제어 버스로 나뉨
- 데이터 버스 : CPU와 기타 장치 사이에서 데이터 전달하는 통로
- 주소 버스 : 메모리 주소(물리 주소)를 지정하는 데 사용, CPU가 주기억장치 혹은 입출력장치로 보내는 '단방향' 버스
- 제어 버스 : CPU가 기억장치나 입출력 장치에 신호를 보내기 위해 사용하는 장치, 읽기와 쓰기 모두 수행하는 양방향 버스
※ 제어 신호 종류 : 기억장치 읽기·쓰기, 버스 요청·승인, 인터럽트 요청·승인, 클락, 리셋 등
※ 컴퓨터의 모든 작업은 READ-PROCESS-WRITE의 과정을 거쳐서 처리됨
※ 운영체제가 n bit일 때 CPU는 RAM으로부터 한 번에 n bit씩 데이터를 읽어옴
소프트웨어
(1) 시스템 소프트웨어
- 사용자가 손쉽게 컴퓨터를 사용할 수 있도록 도와줌과 동시에 컴퓨터 시스템을 효율적으로 운영
- 일반적으로 컴퓨터 하드웨어 제작 업체에 의해 제공됨
- ex) 컴파일러, 운영체제
(2) 응용 소프트웨어
- OS 위에서 사용자가 직접 사용하는 소프트웨어들
- 어느 응용 분야에 사용하기 위해 특별히 제작됨
- ex) 워드프로세서, 스프레드시트
※ 그 외에도 소프트웨어는 분류 기준에 따라 보안용 소프트웨어, 기업용 소프트웨어, 임베디드 소프트웨어, 미들웨어 소프트웨어, 운영체제 소프트웨어, 데이터베이스 소프트웨어 등으로 분류됨
2. CPU 작동 원리
1) 주기억장치가 입력장치에서 입력받은 데이터 or 보조기억장치에 저장된 프로그램 읽어옴
2) CPU는 주기억장치에 저장된 명령어와 데이터 읽어와서 처리한 후 그 결과 다시 주기억장치에 저장
3) 주기억장치는 처리 결과 보조기억장치에 저장 혹은 출력장치로 내보냄
4) 제어장치가 1~3의 과정이 순서대로 실행되도록 제어
※ 프로그램 실행 순서
(1) 사용자가 운영체제에 프로그램 실행 요청
(2) 운영체제는 하드디스크로부터 프로그램 정보 읽어서 할당된 메인메모리에 적재 (code, data, stack, heap)
(3) CPU는 메인메모리에서 읽어오는 정보를 바탕으로 차례로 실행
명령어 세트(명령어 집합)
- CPU가 인식해서 기능을 이해하고 실행할 수 있는 기계적 명령어
- 연산코드(실행할 연산) + 피연산자(필요한 데이터 or 그 위치)로 이루어짐
- 연산코드 : 연산, 제어, 데이터 전달, 입출력 기능 가짐
- 피연산자 : 주소, 숫자, 문자, 논리, 데이터 등 저장
- CPU는 프로그램 실행하기 위해 주기억장치에서 명령어를 순차적으로 인출-해독-실행 과정 반복
- 명령어 사이클 : CPU가 주기억장치에서 한 번에 하나의 명령어 인출해서 실행하는데 필요한 일련의 활동, 인출-실행-간접-인터럽트 사이클로 나뉘어짐
※ 명령어 사이클 관점에서 바라본 명령어 처리 과정
1) PC에 저장된 주소를 MAR로 전달 (현재 실행할 명령어의 주소)
2) 주기억장치의 해당 주소에서 명령어 인출
3) 인출한 명령어 MBR에 저장
4) 다음 명령어 인출 위해 PC값 증가
5) MBR에 저장된 내용 IR에 전달
6) 연산 결과 AC(누산기)에 저장
※ 수행되는 연산의 종류
- 데이터 이동
- 데이터 처리
- 데이터 저장
- 제어 기능 : 프로그램 실행 순서 결정 (ex. jump, branch)
'CS 공부' 카테고리의 다른 글
[Infra] Scale up & Scale out (0) | 2022.02.23 |
---|---|
MSA (MicroService Architecture) vs Monolithic Architecture (0) | 2022.02.23 |
[OOP] 객체지향프로그래밍의 특성 (0) | 2022.01.31 |
2021-09-22 실시간 네트워킹 (HTTP vs Websocket) (0) | 2021.09.23 |
2021-09-08 CS 공부 2일차 (0) | 2021.09.08 |