컴퓨터구조 & 운영체제

컴퓨터 구조&운영 체체 기본 개념(용어)

hakstroy 2025. 8. 24. 17:40

 

 

※ 컴퓨터 구조란?
 : "컴퓨터가 어떻게 동작하는지" 이해하기 위해서 구조를 파악해야 한다.

구조를 알면 알 수 있는 내용(일부분)
 - 코드가 메모리에 올라가고, CPU가 어떻게 처리하는지 알면 성능 최적화에 유리하다.
 - 배포된 서버에서 장애가 생겼을 때 원인을 추측할 수 있다.
 - JVM이 어떻게 메모리를 쓰는지도 알 수 있다.

컴퓨터 구조 개념 설명
 - CPU 
  : 계산하고 명령을 처리하는 두뇌이다.
  : 코드가 실행되는 핵심 부품이다.
 실무 예시
  : 서버가 느려졌을 때 명령어(top, htop)로 CPU 사용률을 확인할 수 있다.
  : 병렬 처리할 때 CPU 코어 수에 따라 멀티스레드 효과가 달라진다.
  : Java에서 Thread.sleep()은 CPU를 쉬게 하고, while(true) 같은 코드가 CPU를 계속 점유하면 과부하로 이어진다.

 - 메모리(RAM)
  : 임시 저장 공간이며, 실행중인 프로그램이 사용하는 작업 공간이다.
 실무 예시
  : 서버에 프로그램 배포 시 메모리 부족으로 인한 Out Of Memory(OOM) 발생 가능성이 있다.
  : DB 쿼리로 너무 많은 데이터를 한 번에 가져오면 부족 현상으로 메모리가 터진다.
   --> 데이터는 페이징 처리로 해결을 하면 된다. ex) LIMIT 20 OFFSET 0

 - 보조기억장치(SSD, HDD 등)
  : 파일 저장소, DB(데이터), 로그파일, 실행파일 등을 저장한다.

 - 명령어
  : CPU가 이해하는 단위 명령어를 뜻한다.
  : 우리가 작성한 자바 코드 --> 컴파일 --> 명령어(컴퓨터가 알아 먹는)로 바꾼다.

 - 레지스터
  : CPU 안에 초고속 임시 메모리 저장 공간이다.
  : 데이터 처리 속도를 향상 시킨다.
 실무 예시
  : 우리가 직접 다루진 않지만, 컴파일러가 성능 최적화(loop 안의 변수를 캐싱 등)할 때, 캐시 관련 최적화 한다.
  : 고성능 연산 라이브러리(ex) Numpy) --> 내부적으로 CPU 캐시 활용 최적화가 핵심이다.

 - 캐시메모리
  : CPU와 메모리 사이의 중간 저장소이다.
  : CPU -> 메모리 || CPU -> 캐시 -> 메모리 - 속도 차이를 극복하고, 성능을 향상시킨다.
 실무 예시
  : 우리가 직접 다루진 않지만, 컴파일러가 성능 최적화(loop 안의 변수를 캐싱 등)할 때, 캐시 관련 최적화 한다.
  : 고성능 연산 라이브러리(ex) Numpy) --> 내부적으로 CPU 캐시 활용 최적화가 핵심이다.

 - 시스템 버스
  : 데이터 이동 통로이다.
  : 부품끼리 어떻게 연결되는지 이해할 수 있다.



※ 운영체제란!?
 : 여러 프로그램이 서로 안 부딪히게, 자원(CPU, 메모리 등)을 나눠쓰도록 관리하는 소프트웨어이다.

 - 프로세스
  : 실행중인 프로그램 하나이다.
  : 서버에서 여러 백엔드 애플리케이션을 동작한다.
 실무 예시
  : Java Spring 웹 서버도 내부적으로 멀티 스레드 기반으로 동작한다. 
   -> 동시에 여러 요청을 처리한다.
  : Redis, Nginx, Tomcat 모두 프로세스/스레드 기반으로 동작.
  : 로그 보면 "PID"가 찍혀 있는 경우가 많다. (PID = 프로세스 ID)

 - 스레드(Thread)
  : 프로세스 안의 작업 단위이다.
  : 동시에 처리할 때 사용 (동시 = 멀티스레드)

 - CPU 스케줄링
  : CPU를 누가 먼저 사용할 지 정해준다.
  : 서버 성능, 응답 속도에 영향을 준다.
 실무 예시
  : 너무 많은 연산 작업을 요청하면 느려진다.
   - OS가 프로세스에 CPU를 안 준다.

 - 동기화
  : 여러 스레드가 하나의 데이터에 접근하는 것을 말한다.
  : 멀티스레드 프로그램에서 중요하다.
 실무 예시
  : 게시글 좋아요, 조회수 증가 --> 여러 요청이 동시에 들어오면 race condition 발생 가능하다.
  : synchronized, Lock, AtomicInteger, Redis 등의 분산락을 활용해서 충돌을 방지해준다.

 - 인터럽트
  : 예외/특별한 상황시 CPU 처리를 요청한다.
  : 서버가 이벤트 처리하는 흐름과 관련이 있다.
 실무 예시
  : 자바에서 Thread.interrupt() 사용하면, 긴 작업 중단이 가능하다.

 - 메모리 관리
  : 메모리를 프로세스마다 효율적으로 분배한다.
  : 메모리 누수 방지, GC(Garbage Collection) 이해할 때 필요하다.
**GC(Garbage Collection) 
  : 자바 언어에서 new로 만든 객체(메모리)를 직접 지우지 않아도 GC가 대신 "안 쓰는 메모리"를 찾아서 정리한다.

 - 가상메모리
  : 실제보다 더 큰 메모리처럼 사용하는 방식이다.
  : 메모리 부족 문제를 해결해 준다.

 - 시스템 콜
  : 사용자 프로그램 <-> 운영체제 요청 인터페이스
   - 파일 읽기/쓰기, 네트워크 사용 등 핵심 기능을 연결한다.
**시스템 콜(System Call)
  : 자바나 파이썬으로 코드작성한다고 해도,  파일을 읽거나, 네트워크를 쓰거나, 메모리 요청시 
  운영체제의 도움이 필요하다. ("운영체제야 ~~해줘")