📌 학부생때 가장 많이 들었던 컴퓨터구조, 동작방법 등에 대해서 학습을 하는 날이다...!! 이론적인 부분이니 기술 면접에서 충분히 나올 수 있을거라 생각하니 정리를 꼼꼼히 해보자!
📗 오늘 학습한 내용
컴퓨터 구조
- 하드웨어와 소프트웨어가 합쳐진 형태
- 하드웨어
- 전자 회로 및 기계 장치로 되어 있어 입출력 장치, 중앙처리장치(CPU), 기억장치 등으로 구성되어 있다.
- 소프트웨어
- 하드웨어를 제어하며 작업을 수행하는 프로그램이다.
컴퓨터의 기본 구성 요소
- 입력장치
- 컴퓨터가 처리할 수 있는 형태로 데이터와 명령을 받아들이는 물리적인 장치
- 키보드, 마우스, 스캐너, 타블랫 등 입력할 수 있는 장치
- 출력 장치
- 처리된 데이터를 사람이 이해할 수 있는 형태로 출력하는 물리적인 장치
- 모니터, 프린터 등 출력할 수 있는 장치
- 중앙 처리 장치(CPU)
- 산술/논리 연산 장치(ALU, Arithmetic Logic Unit), 제어 장치, 레지스터로 구성되어 있다.
- 산술: 덧셈을 수행
- 제어 장치: 프로그램에 따라 명령과 제어 신호를 생성하여 각종 장치의 동작을 제어하는 것이다.
- 레지스터: CPU의 내부 메모리로서 CPU에서 사용하는 데이터를 일시적으로 저장하는 장소이다.
- 저장 장치
- 데이터나 프로그램을 보관하기 위한 일차 기억 장치인 주 기억 장치(Memory)와 주 기억 장치를 보조하기 위한 디스크와 CD 같은 보조 기억 장치가 존재한다.
- 프로그램 수행을 위해 필요한 정보에 비해 CPU 내에 구비되어 있는 레지스터의 용량이 작기 때문에, 주 기억 장치는 주로 정보를 저장해 두었다가 필요할 떄 읽어들이는 저장소로 사용된다.
- 주기억장치 (RAM, ROM)
중앙 처리 장치(CPU)
- 중앙 처리 장치를 통해서 연산을 수행하게 된다. (폰 노이만 구조)
- 각종 연산을 수행하고 기억장치에 기억되어 있는 명령어들을 수행하는 컴퓨터 시스템을 이루는 핵심 부품이다.
CPU의 구조
- 산술/논리 연산 장치(ALU, Arithmetic Logic Unit)
- 산술적인 연산과 논리적인 연산을 담당하는 장치로 가산기, 보수기, 누산기, 기억 레지스터, 데이터 레지스터 등으로 구성된다.
- 캐시나 메모리로부터 읽어 온 데이터는 레지스터라는 CPU 전용의 기억장소에 저장되며, ALU는 레지스터에 저장된 데이터를 이용하여 덧셈, 곱셈 등과 같은 산술 연산을 수행한다.
- 부동 소숫 연산장치(FPU)와 정수연산장치, 논리연산(AND, OR 등)장치 등이 있다.
- 제어장치(CU, Control Unit)
- CPU가 자신 및 주변기기들을 컨트롤하는 장치로 프로그램의 수행 순서를 제어하는 프로그램 계수기(Program Counter)이다.
- 현재 수행중인 명령어의 내용을 임시 기억하는 명령 레지스터, 명령 레지스터에 수록된 명령을 해독하여 수행될 장치에 제어신호를 보내는 명령해독기로 이루어져 있다.
- 레지스터
- 중앙 처리 장치 내부에 있는 기억장치이다.
- 주로 산술 연산 논리장치에 의해 사용되는 범용 레지스터와 PC 등 특수 목적에 사용되는 전용 레지스터로 구분된다.
- 레지스터의 종류
- IR (Instruction Register): 현재 수행 중에 있는 명령어 부호를 저장하고 있는 레지스터
- PC (Program Counter): 명령이 저장된 메모리의 주소를 가리키는 레지스터
- AC (Accumulator): 산술 및 논리 연산의 결과를 임시로 기억하는 레지스터
CPU의 기능
- 명령어 인출 및 해독은 모든 명령어들에 대하여 공통적으로 수행하며 기억 장치로부터 명령어를 읽어온다.
- 데이터 인출 및 처리, 쓰기와 같은 것들은 명령어에 따라 필요할 때만 수행한다.
- 명령어 및 명령어 수행 과정과 처리 방식이 CPU의 중요한 부분이다.
명령어
- 시스템이 특정 동작을 수행시키는 작은 단위이다.
- 동작코드(Op-code, Operational Code)
- 오퍼랜드 (Operand)
- 명령어의 실행에 필요한 자료나 실제 자료의 저장 위치를 의미한다.
명령어 수행 과정
- 읽기(FI, Fetch Instruction): 메모리에서 명령을 가져온다.
- 해석(DI, Decode Instruction): 명령을 해석한다.
- 실행(EI, Execute Instruction): 명령을 수행한다.
- 기록 (WB, Write Back): 수행한 결과를 기록한다.
명령어 처리 방식
RISC와 CISC방식이 있다.
RISC(Reduced Instruction Set Computer)
- 컴퓨터 내부적으로 사용하는 명령어 세트를 단순화 시켜서 처리하는 형태의 구조이다.
- 하나의 사이클로 명령어를 처리한다.
- 메모리 Load / Store 명령만 처리하는 방식이다.
- 파이프라이닝, 슈퍼스칼라의 사용이 가능하다.
- 파이프라이닝: 명령어를 읽어 순차적으로 실행하는 프로세서에 적용되는 기술
- 슈퍼스칼라: CPU 내에 파이프라인을 여러 개 두어 명령어를 동시에 실행하는 기술
- 복잡한 컴파일러 구조를 갖고 있다.
CISC(Complex Instruction Set computer)
- 하나의 기능에 해당하는 하나의 명령이 있는 개념이다.
- 여러 사이클로 명령어를 처리한다.
- 많은 명령어가 메모리를 참조하는 처리 방식이다.
- 파이프라이닝의 사용이 어렵다.
- 복잡한 마이크로 프로그램 구조를 갖고 있다.
Memory
- 임시적인 내용들을 기억하는 장치
- 시스템이 활성화 된 상타에서 그 값을 기억하고 있지만 시스템이 꺼지게 되면 지워지는 휘발성이다.
메모리 성능
- 메모리의 속도는 메로리가 CPU와 데이터를 주고받는 시간을 말한다. (엑세스)
- 리프레시 시간, 메모리 엑세스 시간, 사이클 시간 등이 있다.
메모리 종류
주 기억장치
- RAM(Random Access Memory)
- 컴퓨터의 전원이 끊어지면 내용이 휘발되어 보조 저장 장치가 반드시 필요하다. (휘발성)
- RAM의 크기는 프로그램의 수행 속도에 영향을 준다.
- CPU에서 직접 접근이 가능한 유일한 저장 장치이다.
- RAM의 종류
- SRAM: 리프레쉬가 필요 없고 전력 소모가 적으나 비싸다.
- DRAM: 리프레쉬가 필요하고 SRAM보다 저가이며 많이 사용된다.
보조 기억 장치
- 자기 디스크
- 원판 표면의 철 입자의 방향으로 0과 1을 표현한다. (플로피 디스크, 하드 디스크)
- 광 디스크
- 빛의 반사를 이용하여 자료를 읽어내는 저장 매체이다. (CD, DVD, 블루레이 등)
- 플래시 메모리
- 전자적으로 데이터를 지우고 쓸 수 있는 비휘발성 메모리로 충격에 강하여 휴대용 기기에 많이 사용된다. (USB, SSD 등)
- SSD: 헤더와 같은 기계적 장치는 빠졌지만 저전력, 저소음, 저중량이라는 특징을 가지고 있다.
- 캐시 메모리(Cache Memory)
- CPU 내•외 존재하는 메모리며, 메인 메모리와 CPU 간의 데이터 속도 향상을 위한 중간 버퍼 역할을 한다.
- 빠른 CPU의 처리 속도와 느린 메인 메모리에서의 속도의 차이를 극복하는 역할을 한다.
운영체제
- 하드웨어 상에 프로그램들이 동작되도록 데이터를 주고 받으며 논리적인 일을 한다.
- 사용자의 하드웨어, 시스템 리소스를 제어하고 프로그램에 대한 일반적 서비스를 지원하는 시스템 소프트웨어이다.
운영체제 목적 및 기능
- 처리능력 향상, 사용 가능도 향상, 신뢰도 향상, 반환 시간 단축 등의 기능이 있다.
- 프로세서, 기억장치, 입출력장치, 파일 및 정보 등의 자원을 관리한다.
- 자원을 효율적으로 관리하기 위해 자원의 스케줄링 기능을 제공한다.
- 스케줄링: 어떤 자원을 누가, 언제, 어떤 방식으로 사용할지를 결정해주는 것이다.
- 사용자와 시스템 간의 편리한 인터페이스를 제공한다.
- 시스템의 각종 하드웨어와 네트워크를 관리하고 제어한다.
운영 체제의 시스템 자원 관리
- 프로세스 관리(CPU)
- 메모리 관리
- I/O(입출력) 관리 (디스크, 네트워크 등)
응용 프로그램 관리
- 응용 프로그램이 실행되고, 시스템 자원을 사용할 수 있도록 권환과 사용자를 관리한다.
프로세스
- 프로그램이 실행 중인 상태로 특정 메모리 공간에 프로그램의 코드가 적재되고 CPU가 해당 명령어를 하나씩 수행하고 있는 상태를 의미한다.
프로세스 구성 요소
- 유저 메모리 영역 관리 (Virtual Address Descriptors)
- 핸들 테이블 (Handle Table)
- 독립적인 메모리 공간
프로세스 특징
- 자원 소유의 단위
- 각각의 프로세스는 자신의 실행 이미지 로드와 실행에 필요한 추가적인 메모리 공간을 가지고 있어야한다.
- 디스패칭의 단위
- 프로세스는 하나의 프로그램이 운영체제로부터 CPU의 자원을 일정 기간 동안 할당 받아 명령어를 실행하는 것이며, 운영체제는 여러 개의 프로세스가 병렬적으로 실행되게 하기 위해서 CPU의 사용 시간을 각각의 프로세스에 골고루 나누어 주어야 한다.
프로세스 상태
- 실행 (Run): 프로세스가 프로세서를 차지하여 서비스를 받고 있는 상태
- 준비 (Ready): 실행될 수 있도록 준비되는 상태
- 대기 (Waiting): CPU의 사용이 아니라 입출력의 사건을 기다리는 상태
프로세서
- 하드웨어적인 측면: 컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛
- 소프트웨어적인 측면: 데이터 포맷을 변환하는 역할을 수행하는 데이터 처리 시스템
스레드
- 명령어가 CPU를 통해서 수행되는 객체의 단위이다.
- 여러 개의 명령어를 독립적으로 수행하여 처리하려고 할 때 사용하게 된다.
스레드의 구성요소
- 가상 CPU: 인터프리터, 컴파일러에 의해 내부적으로 처리되는 가상 코드
- 수행 코드: Thread Class에 구현되어 있는 run() Method 코드
- 처리 데이터: Thread에서 처리하는 데이터
스레드의 특징
- 프로세스 내에서 실행되는 흐름의 단위이다.
- 하나의 스레드는 시작해서 종료할 때까지 한번에 하나씩 명령들을 수행한다.
- 각 스레드마다 call stack이 존재하며, 나머지 Code, Data, Heap 영역은 스레드 끼리 공유한다.
- 다른 스레드와 독립적으로 동작한다.
싱글 스레드(Single-Thread)
- 프로세스가 단일 스레드로 동작하는 방식
- 장점
- 자원 접근에 대한 동기화를 신경쓰지 않아도 된다.
- 문맥 교환 작업 또한 요구하지 않는다.
- 프로그래밍 난이도가 쉽고, CPU 메모리를 적게 사용한다.
- 단점
- 여러 개의 CPU를 활용하지 못한다.
- 연산량이 많은 작업을 하는 경우, 그 작업이 완료되어야 다른 작업을 수행할 수 있다.
- 싱글 스레드 모델은 에러 처리를 못하는 경우 멈추게 된다.
멀티 스레드(Multi-Thread)
- 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 방식
- 시스템 자원의 활용 극대화 및 처리량을 증대할 수 있어 단일 프로세스 시스템의 효율성을 높일 수 있다.
- 장점
- 작업을 분리해서 수행하므로 실시간으로 사용자에게 응답할 수 있다.
- 한 프로세스를 여러 프로세서에서 수행할 수 있어 효율적이다.
- 단점
- 주의 깊은 설계가 필요하며 디버깅이 까다롭다.
- 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.
- 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받게 되는 자원 공유의 문제가 발생한다.
- 문맥 교환 작업을 요구한다.
문자열
- 유니코드
- 유니코드 협회가 제정하는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준이다.
- ISO 10646 문자 집합, 문자 인코딩, 문자 정보 데이터베이스, 문자를 다루기 위한 알고리즘 등을 포함하고 있다.
- ASCII를 확장한 형태이다.
- ASCII
- 영문 알파벳을 사용하는 대표적인 문자 인코딩으로 7비트로 모든 영어 알파벳을 표현할 수 있다.
- 52개의 영문 알파벳 대소문자, 10개의 숫자, 32개의 특수 문자, 하나의 공백 문자를 포함한다.
- UTF-8 (가변 길이 인코딩)
- 유니코드 한 문자를 나타내기 위해 1 byte(=8 bits)에서 4 byte까지 사용한다.
- 네트워크를 통해 전송되는 텍스트는 주로 UTF-8로 인코딩된다.
- 바이트 순서가 정해져 있다.
- UTF-16
- 코드 그대로 바이트로 표현 가능하며, 바이트 순서가 다양하다.
그래픽
- 비트맵
- 웹 상에서 디지털 이미지를 저장하는 데 가장 많이 쓰이는 이미지 파일 포맷 형식
- 래스터 그래픽 (점 방식)이라고 한다.
- 이미지의 각 점들을 격자형의 픽셀 단위로 구성되며, 한 지역을 차지하는 셀은 위치에 따라 다른 값을 갖는다.
- 확대를 하면 계단현상, 깨짐현상이 발생한다.
- 컴퓨터에게 부담을 덜 주는 구조로 되어 있다.
- 벡터
- 이미지를 수학적인 공식을 사용하여 표현한다.
- 확대를 해도 계단현상, 깨짐현상이 발생하지 않는다.
- 컴퓨터에게 부담을 가하는 방식이므로 주로 도형, 글자 등을 그리는 작업에 사용된다.
- 사이즈를 키워도 용량에는 변화가 없다.
가비지 컬렉션
- 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 정리하는 것이다.
- 가비지 컬렉션 기능을 가진 언어로는 JAVA, C#, JavaScript 등이 있다.
가비지 컬렉션의 대표적인 방법
- 트레이싱: 한객체에 flag를두고, 가비지 컬렉션 사이클마다 flag에 표시 후 삭제하는 mark and sweep 방법이다.
- 레퍼런스 카운팅: 한 객체를 참조하는 변수의 수를 추적하는 방법이다.
웹 서비스에서의 캐시
많은 시간이나 연산이 필요한 작업의 결과를 저장해두는 것을 의미한다.
캐시의 데이터는 일반적으로 RAM과 같이 빠르게 액세스할 수 있는 하드웨어에 저장되며 소프트웨어 구성 요소와 함께 사용될 수 있다.
기본 스토리지 계층에 액세스하여 데이터를 가져오는 더 느린 작업의 요구를 줄이고 데이터 검색의 성능을 높인다.
캐시의 장점
- 애플리케이션 성능 개선
- 데이터베이스 비용 절감
- 백엔드 부하 감소
- 예측 가능한 성능
- 데이터베이스 핫스팟 제거
- 읽기 처리량 증가
캐시 사용의 예시
- 클라이언트: HTTP 캐시 헤더, 브라우저
- 네트워크: DNS 서버, HTTP 캐시 헤더, CDN, 리버스 프록시
- 서버 및 데이터베이스: 키-값 데이터 스토어, 로컬 캐시
📘 추가로 공부할 내용
[udemy] React 완벽 가이드 강의 보기 (매일 조금씩 이라도 꾸준히 듣기)
Study원과 함께 진행중인 프로젝트 구현
📝 중요한 내용
- 컴퓨터 구조
- 중앙 처리장치
- 운영 체제
- 프러세스
- 스레드
- 캐시