운영체제 프로세스, 스레드

연도·2025년 5월 4일

운영체제 이론&구현

목록 보기
20/20

참고한 블로그 : https://inpa.tistory.com/entry/👩‍💻-프로세스-⚔️-쓰레드-차이

구분프로세스 (Process)스레드 (Thread)
정의운영체제로부터 자원을 할당받은 작업의 단위프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
메모리독립 메모리 (Code, Data, Heap, Stack)Stack만 분리, 나머지 공유
통신IPC 필요함 (공유 메모리, 소켓 등)메모리 공유로 직접 접근 가능
비용생성·전환 비용 높음비용 낮고 빠르다
독립성완전히 독립자원 공유로 의존적

프로세스 : 프로그램이 그냥 코드 덩어리라면, 프로세스는 프로그램을 실행 시켜 정적인 프로그램이 동적으로 변하여 프로그램이 돌아가고 있는 상태를 말한다. 즉 컴퓨터에서 작업 중인 프로그램을 의미하는 것.

스레드 : 하나의 프로세스 내에서 동시에 진행되는 작업 갈래, 흐름의 단위

여러가지 작업이 동시에 가능한 이유는 하나의 프로세스 안에서 여러가지 작업들 흐름이 동시에 진행되기 때문에 가능한 것인데, 이러한 일련의 작업 흐름들을 스레드라고 하며 여러개가 있다면 이를 멀티 스레드 라고 한다.

스레드의 자원 공유

스레드끼리 프로세스의 자원을 공유하면서 프로세스 실행 흐름의 일부가 되기 때문에 동시 작업이 가능한 것이다. 이때 프로세스의 4가지 메모리 영역 중 스레드는 Stack만 할당받아 복사하고 Code, Data, Heap은 프로세스내의 다른 스레드들과 공유된다. 따라서 각각의 스레드는 별도의 stack을 가지고 있지만 heap 메모리는 고유하기 때문에 서로 다른 스레드에서 가져와 읽고 쓸 수 있게 됌.

stack은 함수 호출 시 전달되는 인자, 되돌아갈 주소값, 함수 내에서 선언하는 변수 등을 저장하는 메모리 공간이기 때문에, 독립적인 스택을 가졌다는 것은 독립적인 함수 호출이 가능하다라는 의미이다. 그리고 독립적인 함수 호출이 가능하다는 것은 독립적인 실행 흐름이 추가된다는 말이다.

반면에 프로세스는 기본적으로 프로세스 끼리 다른 프로세스의 메모리에 직접 접근할 수는 없다.

프로세스의 자원 공유

기본적으로 각 프로세스는 메모리에 별도의 주소 공간에서 실행되기 때문에, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수는 없다. 그렇다면 프로세스는 영원히 다른 프로세스 정보에 접근할 수 없을까?

IPC, LPC, 별도의 공유 메모리를 만들어서 정보를 주고받도록 설정.

그러나 프로세스 자원 공유는 단순히 CPU 레지스터 교체뿐만이 아니라 RAM과 CPU 사이의 캐시 메모리까지 초기화되기 때문에 자원 부담이 크다는 단점이 존재함. 그래서 다중 작업이 필요한경우 스레드를 이용하는 것이 훨씬 효율적이다. 현대 컴퓨터의 운영체제에선 다중 프로세싱을 지원하고 있지만 다중 스레딩을 기본으로 하고 있다.

프로세스 상태

상태설명
New생성 중
ReadyCPU 대기 중
Running실행 중
WaitingI/O 등 대기 중
Terminated종료됨

상태 전이는 CPU 스케줄러에 의해 결정됨. 시분할 시스템에서는 자주 컨텍스트 스위칭 발생.

컨텍스트 스위칭은 CPU가 한 프로세스에서 다른 프로세스로 전환할 때 발생하는 일련의 과정이다. CPU는 한 번에 하나의 프로세스만 실행할 수 있으므로, 여러 개의 프로세스를 번갈아가면서 실행하여 CPU 활용률을 높이기 위해 컨텍스트 스위칭이 필요한 것이다.

  • 저장되는 정보에는 프로세서 레지스터, 프로그램 카운터, 스택 포인터 등이 포함됌.
  • 컨텍스트 스위칭은 오버헤드가 있으며, 자주 발생하는 성능 저하의 원인이 된다.

IPC (Inter-Process Communication)

프로세스끼리 데이터를 주고받는 방법.

필요한 이유는 운영체제는 프로세스마다 독립된 메모리 공간을 할당하는데 A라는 프로세스는 B 프로세스의 데이터를 직접 볼 수 없다.

그래서 서로 데이터를 주고 받으려면, OS가 제공하는 중간 통신 수단을 써야 하는데 그것이 바로 IPC.

방식설명
Shared Memory가장 빠름, 동기화 필요
Message Queue메시지를 큐에 저장해 통신
Socket네트워크 기반, 원격 프로세스 간 통신
Pipe단방향, 부모-자식 간

같은 시스템이면 공유 메모리, 원격이면 소켓 사용.

멀티스레드의 장단점과 동기화

장점

메모리 공유로 빠름

스레드 간 전환 비용 낮음

단점

동기화가 필요함 (Race Condition, Deadlock)

디버깅이 어려움

동기화 기법

동기화란 여러 스레드 or 프로세스가 동시에 같은 자원에 접근할 때, 엉망진창이 되지 않도록 조율하는 것이다.

동기화를 하는 이유는 여러 스레드가 동시에 같은 데이터를 건드리면 문제가 생기기 때문이다.

동기화는 Mutex로 하나씩, Semaphore로 제한적으로, Atomic은 빠르고 안전하게한다.

방법설명
Mutex하나만 접근 허용
Semaphore개수 제한 허용
Monitor객체 기반 동기화 (Java 등)
Atomic 연산락 없이 안전한 연산

공유 자원 접근 시 반드시 동기화 필요. Deadlock 예방 고려해야 함.

스케줄링 알고리즘 요약

알고리즘특징
FCFS(First-Come, First-Served)먼저 온 순, 비선점형
SJF(Shortest Job First)짧은 작업 우선, 비선점형
Priority우선순위 기준, 기아 가능
RR (Round Robin)일정 시간 단위, 공평, 선점형
MLFQ(Multi-Level Feedback Queue)다단계 큐, 동적 우선순위

RR은 시분할 시스템에 적합, MLFQ는 실시간 + 일반 작업 모두 대응 가능함.

선점형은 운영체제가 강제로 CPU를 회수 가능.

  • 실행 중인 프로세스를 운영체제가 중단시키고, 다른 프로세스로 CPU를 넘길 수 있따. 응답성이 좋고, 긴 작업이 짧은 작업을 계속 막지 않는다.

비선점형은 프로세스가 자발적으로 CPU를 반납해야 함.

  • 실행 중인 프로세스를 운영체제가 중단하지 않는다. 하나의 프로세스가 CPU를 끝까지 사용한다. 컨텍스트 스위칭이 적다.

CPU의 작업 처리 방식

병렬성

병렬성은 직관적으로 명령어를 메모리에서 뽑아 해석하고 실행하는 반도체 유닛인 여러개의 코어에 맞춰 여러개의 프로세스, 스레드를 돌려 병렬로 작업들을 동시 수행하는 것을 말한다.

동시성

동시성은 둘 이상의 작업이 동시에 실행되는 것을 의미한다. 즉 1개의 코어가 있고, 4개의 작업이 있다고 가정한다면, 아래 그림과 같이 프로세스들을 계속 번갈아가면서 조금씩 처리함으로써 마치 프로그램이 동시에 실행되는 것 처럼 보이는 것이다. 이때 프로세스들을 번갈아가면서 매우 빠르게 처리하기 때문에 컴퓨터를 모르는 사람들이 보면 마치 동시에 돌아가는 것처럼 보이게 된다.

profile
Software Engineer

0개의 댓글