본문 바로가기
면접 준비

CS공부 ) 운영체제

by jennyiscoding 2025. 3. 24.

운영체제에서 프로세스와 스레드의 차이점은?

  프로세스 스레드
정의 실행 중인 프로그램 (RAM에서 실행) 프로세스 안에서 동작하는 개념
작동 포토샵 프로그램을 시작하기 전까지는 "Photoshop.exe" 같은 실행 파일에 하드디스크에 코드가 저장되어 있다. 사용자가 포토샵을 키면 RAM에 로드하고 프로세스를 생성한다 프로세스 안에서 여러 개의 스레드가 동작한다
컨텍스트스위칭 속도 프로세스는 자기만의 메모리 공간 (힙, 스택, 데이터 세그먼트 등)을 가지고 있기 때문에, 새로운 프로세스를 실행해서 컨텍스트 스위칭을 할 때 전체 프로세스 상태 (CPU 레지스터, 프로그램 카운터 등)를 저장하고 복원해야 한다. 다른 프로세스와 메모리 공유하지 않기 때문에 각 프로세스의 고유한 주소 공간을 변경 시 OS는 프로세스의 주소 공간을 전환해야 하므로 메모리 복사 및 저장 등의 작업이 필요해 스레드보다 속도가 느리다.  스레드들이 같은 프로세스 내에서 실행되기 때문에 같은 메모리 공간 (힙, 스택은 제외)을 공유하므로, 컨텍스트 스위칭 시 프로세스 상태를 저장할 필요 없이, 스레드 관련 정보만 저장하고 복원하기 때문에 프로세스보다 빠르다. 
동시동작 멀티프로세스 멀티쓰레딩
통신 IPC(Inter-Process Communication) 방식(예: 파이프, 소켓) 메시지 큐
예시1 Photoshop 실행 자체 하나의 프로세스 안에는 여러 개의 스레드가 존재한다(
1. 필터를 적용하는 동안에도 포토샵이 멈추지 않고 UI 버튼을 클릭할 수 있음
2. 포토샵에서 여러 이미지를 동시에 열어 놓고 편집 가능하다
예시2 브라우저 자체 (크롬 실행) 1~4가 동시에 일어남(실제 실행은 다수의 스레드나 프로세스가 번갈아 가며 비동기적으로 수행)
1. 웹 페이지 로딩

2. 자바스크립트 실행
3. UI 처리
4. 네트워크 요청 처리
독립성 독립적 같은 프로세스 내에서 메모리 공유
 

OS는 CPU이고 오른쪽 네모는 메모리이다

 

멀티테스킹: OS를 통해 CPU가 작업하는데 필요한 자원(시간)을 프로세스 또는 스레드간에 나누는 것이다. 여러 응용 프로그램을 동시에 열고 작업 할 수 있다. 음악을 들으면서, 웹서핑을 하고, 메신저의 메시지를 확인할 수 있는 이유는 모두 멀티태스킹 덕분이다. CPU는 한번에 한가지 명령어밖에 처리하지 못한다. 동시가 아닌 재빠르게 프로세스들을 번갈아가며 실행하고, 관리하는 것이다. 이것이 Context Switching(문맥교환)이다. Context Switching은 운영체제의 CPU자원을 할당하는 스케줄러(레디 큐에 존재하는 프로세스들을 특정한 우선순위를 기반으로 CPU를 할당받게 해주는 역할)에 의해 발생한다. 

 

 

언어 별 프로세스와 스레드 관리

  자바 파이썬 자바스크립트
멀티스레딩 자바는 내장된 멀티스레딩 지원을 제공합니다. Thread 클래스나 **ExecutorService**와 같은 라이브러리를 사용하여 멀티스레드를 관리하고 실행할 수 있습니다. 자바는 기본적으로 GIL이 없기 때문에, 여러 코어에서 병렬 실행이 가능합니다. 파이썬은 GIL(Global Interpreter Lock)이 있기 때문에, 멀티스레딩을 통한 병렬 처리에 한계가 있습니다. I/O 바운드 작업에서는 멀티스레딩이 유리하지만, CPU 바운드 작업에서는 멀티프로세싱이 더 효과적입니다. 자바스크립트는 싱글 스레드 기반 언어입니다. 하지만 Web Workers와 같은 기술을 사용하여 백그라운드 스레드에서 작업을 처리할 수 있습니다. 이는 자바스크립트가 기본적으로 싱글 스레드로 동작하지만, 비동기적으로 여러 작업을 동시에 처리하는 방법입니다.
멀티프로세싱 자바에서 프로세스를 관리하려면 ProcessBuilder나 Runtime.getRuntime().exec()를 사용하여 외부 프로세스를 실행할 수 있습니다. 자바는 멀티프로세싱을 기본적으로 다루는 방법을 제공하지만, 멀티스레딩이 더 일반적입니다. 파이썬은 multiprocessing 모듈을 통해 진정한 병렬 처리를 할 수 있습니다. 각 프로세스는 독립적인 메모리 공간을 사용하므로, GIL의 영향을 받지 않습니다. 자바스크립트에서 프로세스를 직접적으로 다루는 것은 Node.js와 같은 런타임에서 가능합니다. child_process 모듈을 사용하면 자식 프로세스를 생성하여 병렬 처리할 수 있습니다.
스레드 관리 자바의 스레드는 각 스레드가 독립적인 실행 흐름을 가지며, 스레드 간에 자원을 공유하기 때문에 동기화가 중요한 역할을 합니다. 파이썬에서 스레드는 threading 모듈을 사용하여 생성할 수 있습니다. 그러나 GIL로 인해 파이썬은 스레드 간 병렬 실행이 제한적입니다. 자바스크립트에서 웹 워커(Web Worker)를 사용하면, 멀티스레딩처럼 백그라운드 작업을 처리할 수 있지만, 데이터는 메시지 패싱 방식으로 전달되어야 합니다.

 

 

참고:

1. https://charlezz.medium.com/process%EC%99%80-thread-%EC%9D%B4%EC%95%BC%EA%B8%B0-5b96d0d43e37

 

Process와 Thread 이야기

프로세스(Process)

charlezz.medium.com

 

메모리 관리 기법 중 가상 메모리란?

가상 메모리(Virtual Memory)는 컴퓨터 시스템에서 물리적 메모리(RAM)의 한계를 뛰어넘어, 프로그램이 필요한 메모리보다 더 많은 메모리를 사용할 수 있도록 하는 메모리 관리 기법입니다. 이는 운영체제(OS)가 관리하는 기술로, 물리적 메모리(RAM)가 부족할 때 하드디스크SSD와 같은 보조 기억 장치를 활용하여 마치 시스템이 충분한 RAM을 가진 것처럼 동작하게 만듭니다. 

1. 하드디스크나 SSD 안에 페이지 파일 또는 스왑 공간이라고 불리는 특별한 영역이 물리적으로 존재한다(이 말은 내 컴퓨터의 SSD용량이 )

 

 

 

 

 

 

 

 

'면접 준비' 카테고리의 다른 글

CS공부 ) 컴파일러  (0) 2025.03.25
CS공부 ) 데이터베이스 설계  (0) 2025.03.25
CS공부 ) 네트워크  (0) 2025.03.25
CS공부 ) 데이터베이스  (0) 2025.03.24
CS공부 ) 자료구조와 알고리즘  (0) 2025.03.24