컴퓨터 구조 지식은 크게 두가지로 나뉜다.
- 컴퓨터가 이해하는 정보 : 데이터와 명령어
- 컴퓨터의 4가지 핵심 부품 : CPU, 주기억장치, 보조기억장치, 입출력장치
컴퓨터 구조를 이해하는 이유는 프로그래밍 문법만으로는 알기 어려운 성능, 용량, 비용을 고려한 개발이 가능하게 하며 문제 해결 능력을 향상 시키기 때문이다.
데이터
- 문자 표현
컴퓨터는 0과 1만 인식한다. 그러면 한글과 영어, 특수문자는 어떻게 표현될까? ‘A’는 65 (1000001)로 변환되어 표현됩니다. 이를 인코딩이라 하며 유니코드가 가장 널리 사용된다.
- 실수 표현
0.625를 2진법으로 표현하면 0.101이 된다. 이를 통해 컴퓨터에서 실수를 표현하는 두 가지 방식이 있다.
- 고정소수점
- 장점 : 표현 방식이 간단하다
- 던좀 : 표현할 수 있는 버위가 적다
- 부동소수점
- 장점 : 넓은 범위를 표현할 수 있다
- 단점 : 실수 연산이 부정확할 수 있다
- 해밍 코드 : 1비트의 에러를 정정할 수 있게 만든 코드이다.
명령어
컴퓨터는 명령어를 처리하는 기계이다. 고급언어는 사람을 위한 언어, 저급언어는 컴퓨터를 위한 언어이다.
- 컴파일과 인터프리트
- 컴파일 : 고급언어 소스코드 전체 파일을 저급언어로 변환한다.
- 인터프리트 : 고급언어 소스코드를 한 줄씩 저급언어로 번역한다.
- 명령어의 구조
- 연산코드 : 어떤 연산을 할 것인지
- 오퍼랜드 : 피 연산자
컴퓨터의 4가지 핵심 부품
- CPU (중앙처리장치)
CPU는 컴퓨터의 두뇌이다. 명령어를 받아들이고 해석하며 실행한다. 내부 구성요소는 ALU(산술 논리 장치), Control Unit(제어 장치), Register Set(레지스터들) 등이 있다.
- 주기억장치
현재 실행 중인 프로그램의 데이터와 명령어를 저장한다. 일반적으로 RAM을 의미하며 휘발성이다. ROM은 비휘발성으로 BIOS 등을 저장한다.
- 보조기억장치
영구적으로 데이터를 저장한다. 하드디스크와 USB 메모리가 포함된다.
- 입출력장치
컴퓨터 외부와 정보를 주고받는 장치이다. 보조기억장치도 입출력장치로 볼 수 있다.
CPU 구성 요소
- ALU ( 산술 논리 장치 )
연산을 담당하며, 연산결과를 레지스터에 내보낸다.
- 제어장치
명령어를 해석하고 제어신호를 보낸다.
- 레지스터
다양한 레지스터가 있으며, 프로그램 카운터, 명령어 레지스터, 메모리 주소 레지스터, 메모리 버퍼 레지스터, 범용 레지스터, 플래그 레지스터가 있다.
받아들이는 정보
클럭 신호
명령어 레지스터로부터 해석할 명령어 받아들임
플래그 레지스터로부터 플래그 값 받아들임
시스템 버스 중 제어 버스로부터 제어 신호 받아들임
내보내는 정보
1. CPU 내부에 전달하는 정보
ALU에 수행할 연산 제어 신호
레지스터 간에 데이터를 이동시키기거나 해석하기 위한 제어신호
2. CPU 외부에 전달하는 정보
메모리에 저장된 값을 읽거나 쓰기 위한 제어신호
입출력장치의 값을 읽거나 쓰기 위한 제어신호
레지스터
알아야 할 웰노운 레지스터들
1. 프로그램 카운터
메모리에 담긴 프로그램 명령어의 주소를 저장하는 레지스터. 프로그램 카운터의 값을 읽고 프로그램의 어느 부분부터 명령어를 시작시키면 될지 판단할 수 있다.
2. 명령어 레지스터
해석할 명령어, 즉 메모리에서 가져온 명령어를 저장하는 레지스터. 제어장치는 명령어 레지스터의 명령어를 받아들여 해석하고 제어신호를 뿜는다.
3. 메모리 주소 레지스터
메모리의 주소를 저장하는 레지스터. CPU가 읽어 들이고자 하는 주소 값을 주소 버스로 주고 받는다.
4. 메모리 버퍼 레지스터
메모리의 값을 저장하는 레지스터. 메모리와 주고받을 그 값을 저장하는 레지스터. 데이터 버스로 값을 주고 받는다.
5. 범용 레지스터
말그대로 다양한 상황에서 유연하게 사용할 수 있는 레지스터. 주소값 혹은 데이터 값 둘 다 저장 가능하다.
6. 플래그 레지스터
플래그를 담는 레지스터. ALU 가 보낸 플래그 값이 저장되는 곳이다.
명령어 사이클
- 인출 사이클 : 명령어를 가져온다.
- 실행 사이클 : 명령어를 실행한다.
- 인터럽트 사이클 : 인터럽트 발생 시 처리한다.
- 간접 사이클 : 간접 주소 지정 방식으로 명령어를 처리한다.
인터럽트
- 동기 인터럽트
CPU에 의해 발생한다. 예외, 폴트, 트랩 등이 있다.
- 비동기 인터럽트
CPU 외부의 원인으로 발생한다. 하드웨어 인터럽트, 정전 등이 포함된다.
슈퍼스칼라
CPU 내부에 여러 개의 명령어 파이프라인을 포함하는 기법이다.
이론적으로는 파이프라인 개수에 비례해 처리 속도가 증가할테지만, 파이프라인의 위험도 증가 때문에 비례해서 처리 속도가 증가하지는 않는다.
CISC와 RISC
- CISC
명령어의 종류가 매우 다양하고 복잡하다.
위의 어셈블리어를 보면 알 수 있듯이 명령어의 길이가 짧아 메모리를 아낄 수 있다는 것이 장점이다.
하지만 명령어가 워낙 다양하기 때문에, 명령어마다 수행시간이 가지각색이다. 따라서 클럭 단위로 일정하게 딱딱 나눠서 병렬처리하기 힘들어진다. 이는 파이프라이닝을 어렵게 만들고 성능 저하를 유발한다.
- RISC
CISC 에 비해 명령어의 종류가 적다. 그리고 CISC의 어셈블리어보다 명령어의 길이가 길다.
하지만 명령어의 수행 시간이 비교적일정하기 때문에 파이프라인을 설계하는데 유리하다.
그래서 좋은 성능을 기대할 수 있다.
메모리
- RAM
휘발성 저장장치로, DRAM, SRAM, SDRAM, DDR SDRAM 이 있다.
- ROM
비휘발성 저장장치로, MASK ROM, PROM, EPROM, EEPROM, UVEPROM이 있다.
컴퓨터 부팅 과정
- 전원 공급
- ROM에 저장된 BIOS 실행
- POST 실행
- 운영체제가 메모리에 로드
캐시 메모리
레지스터와 메모리 사이에 위차하여 속도 성능을 향상 시킨다.
보조 기억 장치
- 하드디스크 (HDD)
물리적 디스크를 고속으로 회전시켜 데이터를 저장한다.
- 플래시 메모리
전기적으로 데이터를 읽고 쓸 수 있는 반도체 기반 저장장치이다. USB메모리, SD카드, SSD가 포함된다.
RAID
여러 물리적 보조 기억 장치를 하나의 논리적 보조 기억 장치처럼 사용하는 기술이다.
RAID 레벨 0
입출력 속도가 향상 된다.
RAID 레벨 1
데이터 복구가 간단하다.
RAID 레벨 4
오류 검출 및 수정이 가능하다.
RAID 레벨 5
RAID 4의 병목현상을 완화시킨다.
RAID 레벨 6
RAID 5보다 안전하다.
입출력장치
- 장치 컨트롤러
CPU와 입출력장치 간의 통신을 중개한다.
- 장치 드라이버
장치 컨트롤러의 동작을 제어하는 프로그램이다.
프로그램 입출력
명령어로 입출력 장치를 제어하는 기본 방법이다.
- 인터럽트 기반 입출력
장치 컨트롤러가 입출력 작업을 끝내면 CPU에게 인터럽트를 요청한다.
- DMA 입출력
CPU의 개입 없이 입출력 장치가 직접 메모리에 접근한다.
'◽️ Programming > ◽️ Computer Science' 카테고리의 다른 글
iOS Swift의 자료구조, 알고리즘에 대해서 알아보자 (2) (0) | 2024.10.30 |
---|---|
iOS Swift의 자료 구조, 알고리즘에 대해서 알아보자 (1) (0) | 2024.10.28 |
[CS] 운영체제에 대해서 자세하게 알아보자 (0) | 2024.07.13 |
객체지향 프로그래밍과 SOLID원칙 (0) | 2024.06.24 |
비트와 바이트 ( CS 50 강의 ) (1) | 2024.04.19 |