CPU


Central Processing Unit ➝ 중앙 처리 장치
컴퓨터 시스템의 가장 핵심적인 제어 장치
연산, 시스템 통제 등 모든 데이터 흐름의 중심
클럭 - CPU의 성능을 나타내는 지표
1 Hz = 1초에 1번 작동
1 KHZ = 1초에 1천번
1 MHz = 1초에 100만번
1 GHz = 1초에 10억번
CPU 구성
- Core – 명령을 실행하는 유닛 (ALU, 레지스터 내장)
- 캐시 메모리 (L1, L2, L3) – 빠른 데이터 접근과 공유
- 인터커넥트 – 코어 간, 메모리 간 데이터 고속도로
- 메모리 컨트롤러 – RAM과의 통신 조율
- I/O 인터페이스 – 장치들과의 연결, 전력/보안 관리
Core
Core란?
CPU 내부에서 실제로 연산을 수행하는 실행 유닛
CPU = 회사
Core = 직원
초기 컴퓨터 - CPU 1개 당 Core 1개 (싱글코어)
코어가 1개 ➝ 한명만 일하고 있다. ➝ 동시에 2개의 일을 못한다.
하지만 싱글 코어도 여러가지 일을 동시에 처리 가능
❓한명이 어떻게 동시에 일을 처리하는가❓
동시에 일을 하는 것 "처럼" 보이게 해줌

프로그램의 복잡도 증가
↓
코어 성능을 높여보자
Thread
public class MyThread extends Thread {
public void run() {
System.out.println("시작");
}
public static void main(String[] args) {
MyThread t = new MyThread();
t.start();
System.out.println("종료");
}
}
Java에서 Thread = 각각 모듈의 역할을 나누어서 각각 자기 역할을 수행시키는 것
❓프로그래밍에서 Thread와 CPU의 Thread는 다른 것인가❓
프로그래밍에서 Thread = 소프트웨어의 Thread
CPU가 말하는 Thread = 기술의 이름
Hyper Threading
하나의 Core를 2개의 Thread로 용도를 나누어서 마치 물리적인 Core가 있는것처럼 만듦
❓싱글 코어의 Thread를 늘려서 성능을 높이면 되겠네❓
집적도의 한계, 발열 문제 발생🔥
↓
멀티코어로 진입 ➝ 하나를 좋게 하는것 보다 두개 이상의 코어가 조화롭게 작동하게 하는데에 초점

동시성과 병렬성

동시성과 병렬성은 동시에 둘 이상의 작업을 처리하는 방법이라는 공통점이 있지만 동작하는 방식에 차이
동시성: 하나의 코어에서 둘 이상의 작업을 번갈아가며 실행하여 동시에 처리되는 것처럼 보이게 하는 것
병렬성: 여러 개의 코어에서 각각의 작업을 담당하여 처리
그렇다면 서버에는 왜 코어가 많이 필요할까 ❓
일반적으로 병렬성(멀티 코어)가 더 빠름
1. 동시성은 물리적으로 동시에 처리하는 방식이 아님
2. Context Switching에 오버헤드
코어가 하나면 여러 작업을 동시에 하는 척만 가능
코어가 여러 개면 실제로 동시에 수행 가능 ➝ 성능 향상
총 정리

캐시 메모리
캐시 메모리는 CPU와 메인 메모리 사이에 위치한 SRAM 기반의 저장장치

CPU가 메인 메모리에 접근하는 것은 시간이 오래걸림
클럭이 좋아도 메인 메모리에 접근하는 시간이 오래걸리면 무용지물
CPU가 사용할 일부 데이터를 미리 메모리에서 가져와 저장

Core와 가까운 순으로 L1, L2, L3 캐시로 나뉨
L1, L2는 일반적으로 Core내부
L3는 일반적으로 Core 외부
코어가 2개인 멀티코어의 경우 L1 및 L2 캐시는 각 코어마다 고유한 캐시 메모리로 할당,
L3 캐시는 두 개의 코어가 공유하는 형태로 구현
캐시 히트와 캐시 미스
캐시 = CPU가 사용할 것 같은 데이터를 미리 가져와 저장.
가져온 데이터를 실제로 사용되는 경우를 캐시 히트, 사용되지 않은 것은 캐시 미스
캐시 적중률 = 캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)
범용적인 컴퓨터의 캐시 적중률 85~95% 정도
어떻게 예측하길래?
참조 지역성의 원리
- 시간 지역성
CPU가 최근에 접근했던 메모리 공간에 다시 접근하려는 경향
- 공간 지역성
CPU가 접근한 메모리 공간의 근처에 있는 데이터에 접근하려는 경향
SW (OS)
Process
프로세스란 실행 중인 프로그램을 의미
프로그램 파일(exe, out 등)이 디스크에 존재할 때는 단순한 정적인 파일에 불과하지만,
사용자가 실행하면 운영체제가 메모리 공간을 할당하고, CPU 자원을 배분 ➝ 독립적인 작업 단위인 "프로세스"로 변환
과거의 프로그램
시작~끝까지 프로세스 하나만으로 진행해도 충분
현재의 프로그램 – 웹 브라우저 (Ex. Chrome, Edge ...)
- 동시에 탭 여러 개 열기
- 영상 재생
- 광고 차단
다양한 기능들이 동시에 실행

👇

예시를 보면 디자인(Process)과 개발(Process)는 병렬형으로 진행됨
➝ 자원 공유가 어렵다.
Thread
더 작은 실행단위의 개념

Thread는 같은 자원을 공유할 수 있다.
한 프로세스를 실행하다 오류가 발생하면, 다른 프로세스에게 영향이 있을까?
영향X
그럼 Thread는?
스레드는 Code/Data/Heap 메모리 영역의 내용을 공유하기 때문에 어떤 스레드 하나에서 오류가 발생한다면 같은 프로세스 내의 다른 스레드 모두가 강제로 종료된다.
멀티스레드의 장점
▪ *Context-Switching할 때 공유하고 있는 메모리만큼의 메모리 자원을 아낄 수 있다.
▪ 스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적어서 응답 시간이 빠르다.
멀티스레드의 단점
▪ 스레드 하나가 프로세스 내 자원을 망쳐버린다면 모든 프로세스가 종료될 수 있다.
▪ 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수밖에 없다.
*Context
CPU 가 프로세스를 실행시키기 위해 필요한 정보
*Context Switch
실행중인 Process를 멈춤 ➝ 새로운 Process를 실행시 이전 Process의 Context를 저장 ➝ 새로운 Process의 Context로 교체
PCB
운영체제 입장에서 프로세스 상태 관리와 Context Switch에 필요.

PCB에 담기는 정보

관리방식

운영체제는 빠르게 PCB 에 접근하기 위해서 프로세스 테이블을 사용해 각 프로세스의 PCB 를 관리.
PCB 는 LinkedList 방식으로 관리. 프로세스가 생성, 삭제될 때 PCB 의 삽입 삭제가 용이하다.
'📖Computer Science' 카테고리의 다른 글
| 프록시와 리버스 프록시 (0) | 2025.03.07 |
|---|---|
| [프로그래밍 공통] 기술면접 (0) | 2025.01.03 |
| [백엔드] 기술면접 (1) | 2025.01.02 |
| [네트워크] 기술면접 (1) | 2025.01.02 |
| [DB] 기술면접 (0) | 2025.01.01 |