Computer Science 지식 정리

쫀구·2022년 8월 1일
0
post-custom-banner

📌 CPU의 구조

CPU는 중앙처리장치로, 각종 연산을 수행하고 기억장치에 있는 명령어들을 수행하는 컴퓨터 시스템을 이루는 핵심 부품이다.
산술/논리 연산 장치(ALU), 제어 장치와 레지스터로 구성되어 있다.

❓ CPU 기능

명령어를 해독하고 수행한다.
동작 코드(Op-code): 각 명령어의 실행 동작을 구분하여 표현
오퍼랜드(Operand): 명령어의 실행에 필요한 자료나 실제 자료의 저장 위치를 의미
명령어 수행 과정

  • 읽기(Fetch Instruction, FI): 메모리에서 명령을 가져온다.
  • 해석(Decode Instruction, DI): 명령을 해석한다.
  • 실행(Execute Instruction, EI): 명령을 수행한다.
  • 기록(Write Back, WB): 수행한 결과를 기록한다.

🧑🏻‍💻 운영체제

컴퓨터의 하드웨어 상에 프로그램들이 동작되려면 이 하드웨어들과 적절하게 데이터틀 주고 받으며 논리적인 일들을 해야하는데, 일을 시키는 역할이 운영체제이다.

  • 응용 프로그램이 실행되고, 시스템 자원을 사용할 수 있도록 권한과 사용자를 관리한다.
  • 사용자와 시스템 간의 편리한 인터페이스를 제공한다.
  • 프로세스 관리(CPU),메모리 관리,I/O(입출력) 관리 (디스크, 네트워크 등)

하드웨어를 구성하는 일을 하는 CPU, 자료를 저장하는 RAM, 디스크 등의 시스템 자원을 관리하는 주체가운영체제이다.

💡 프로세스

프로세스는 프로그램이 실행 중인 상태로 특정 메모리 공간에 프로그램의 코드가 적재되고 CPU 가 해당 명령어를 하나씩 수행하고 있는 상태, 실행 중인 하나의 애플리케이션이 프로세스이다.
(애플리케이션을 실행하면, 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행)

프로세서

컴퓨터 운영을 위해 기본적인 명령어들을 처리하고 반응하기 위한 논리회로이고, 중앙 처리 장치(CPU)를 의미한다.

코어
CPU 에서 핵심적 부분을 수행하는 역할이고, 시스템의 모든 연산을 처리한다. 코어는 일꾼으로 볼수있고 코어가 많을 수록 처리가 빠르다.

🔌 스레드

스레드는 명령어가 CPU 를 통해서 수행되는 객체의 단위입니다. 하나의 프로세스 내에는 반드시 1개 이상의 스레드가 존재하며, 이러한 스레드는 같은 프로세스에 있는 자원과 상태를 공유한다.
같은 프로세스 내에 있는 스레드는 같은 주소 공간에 존재하게 되며 동일한 데이터에 접근할 수 있다.

스레드의 필요성
워드 프로세서에서 사용자로부터 키보드 입력 받거나, 그래픽이나 UI를 그리고 문법 오류를 체크하는 등 워드 프로세서 내에서 여러 요청들을 동시에 처리해야 하는데, 이때 스레드가 필요하게 된다.

스레드의 특징

  • 프로세스 내에서 실행되는 흐름의 단위입니다. 하나의 스레드는 시작해서 종료할 때까지 한번에 하나씩 명령들을 수행
  • 각 스레드마다 call stack이 존재
  • 독립적으로 동작하기 때문에 두 개 이상의 스레드가 동작되는 경우, 두 개 이상의 스레드의 실행 및 종료순서는 예측할 수 없다.

✔️ 싱글 스레드

프로세스가 단일 스레드로 동작하는 방식으로 일련의 처리를 단일 스레드만으로 직렬 처리하는 프로그래밍 방법입니다. 하나의 레지스터, 스택으로 표현합니다.자바스크립트가 가장 대표적인 싱글 스레드 언어이다.
일반적으로 하나의 프로세스는 하나의 스레드를 가지고 작업을 수행한다.

장점
모든 스레드가 일정 자원에 동시에 접근하거나, 똑같은 작업을 실행하려는 경우,에러가 발생하거나 원하는 값이 나오지 않습니다. 그래서, 스레드들이 동시에 같은 자원에 접근하지 못하도록 제어해야한다.

  • 자원 접근에 동기화를 신경 쓰지 않아도 된다.
  • 프로그래밍 난이도가 쉽고, CPU 메모리를 적게 사용한다.
  • 자원 접근에 대한 동기화를 신경쓰지 않아도 되므로 문맥 교환(context switch) 작업 또한 요구하지 않는다.

단점

  • 여러 개의 CPU를 활용하지 못한다.
  • 싱글 스레드는 하나의 물리적 코어밖에 사용하지 못해 멀티 코어 머신에서 CPU 사용을 최적화할 수 없다.
  • 연산량이 많은 작업을 하는 경우, 그 작업이 완료되어야 다른 작업을 수행할 수 있다.
  • 싱글 스레드 모델은 에러 처리를 못하는 경우 멈춰버린다.

✅ 멀티스레드

멀티 스레드(multi thread)란 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미합니다. 또한, 멀티 프로세스(multi process)는 여러 개의 CPU를 사용하여 여러 프로세스를 동시에 수행하는 것을 의미한다.

장점

  • 싱글 스레드인 경우, 작업이 끝나기 전까지 사용자에게 응답하지 않지만 반면 멀티스레드인 경우 작업을 분리해서 수행하므로 실시간으로 사용자에게 응답할 수 있습니다.
  • 싱글 스레드인 경우 한 프로세스는 오직 한 프로세서에서만 수행 가능하지만 반면 멀티 스레드인 경우 한 프로세스를 여러 프로세서에서 수행할 수 있으므로 훨씬 효율적입니다.

단점

  • 주의 깊은 설계가 필요하며, 디버깅이 까다롭습니다.
  • 단일 프로세스 시스템의 경우 효과를 기대하기 어려우며 다른 프로세스에서 스레드를 제어할 수 없습니다
  • 멀티 스레드의 경우 자원 공유의 문제가 발생한다. 하나의 스레드에 문제 발생시 전체 프로세스가 영향을 받게 된다.
  • 문맥 교환 작업을 요구합니다. CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 데 이 과정을 문맥 교환(Context Switching)이라 합니다. 문맥 교환이란 다른 태스크(프로세스, 스레드)가 시작할 수 있도록 이미 실행 중인 태스크(프로세스, 스레드)를 멈추는 것을 말합니다.

🔎 동시성과 병렬성

동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 코어 개수로 제한된다. 운영체제(또는 가상 머신)는 각 스레드를 시간에 따라 분할하여, 여러 스레드가 일정 시간마다 돌아가면서 실행되도록 한다. 이런 방식을 시분할이라고 한다.

  • Concurrency(동시성, 병행성): 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 착각을 불러일으킴
  • Parallelism(병렬성): 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행됨

📝 가비지 컬렉션

가비지 컬렉션은 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 정리하는 것입니다. 이 기능을 가진 언어(혹은 엔진)는 자바, C#, 자바스크립트 등이 있다.

🕝 웹 캐시

캐시는 일반적으로 일시적인(temporarily) 데이터를 저장하기 위한 목적으로 존재하는 고속의 데이터 저장 공간이다.

  • 작업 이후에 이 데이터에 대한 요청이 있을 경우, 데이터의 기본 저장 공간에 접근할 때보다 더 빠르게 요청을 처리할 수 있다.
  • 을 사용하면 이전에 검색하거나 계산한 데이터를 효율적으로 재사용할 수 있다.

캐시의 작동원리

캐시의 데이터는 일반적으로 RAM(Random Access Memory)과 같이 빠르게 액세스할 수 있는 하드웨어에 저장되며, 소프트웨어 구성 요소와 함께 사용될 수도 있습니다. 캐시는 기본 스토리지 계층(SSD, HDD)에 액세스하여 데이터를 가져오는 더 느린 작업의 요구를 줄이고, 데이터 검색의 성능을 높입니다.

속도를 위해 용량을 절충하는 캐시는 일반적으로 데이터의 하위 집합을 일시적으로 저장합니다. 완전하고 영구적인 데이터가 있는 데이터베이스와는 대조적입니다.

캐시의 장점
애플리케이션 성능 개선 , 데이터베이스 비용 절감 ,백엔드 부하 감소 ,예측 가능한 성능 ,데이터베이스 핫스팟 제거
읽기 처리량 증가

웹 서비스에서 캐시

클라이언트: HTTP 캐시 헤더, 브라우저
네트워크: DNS 서버, HTTP 캐시 헤더, CDN, 리버스 프록시
서버 및 데이터베이스: 키-값 데이터 스토어(e.g. Redis), 로컬 캐시(인-메모리, 디스크)

profile
Run Start 🔥
post-custom-banner

0개의 댓글