CS/운영체제
[운영체제] 프로세스와 스레드
k99812
2025. 4. 9. 16:53
프로세스
프로그램
- 컴퓨터가 실행할 수 있는 명령어의 집합(파일)
- 실행
프로그램을 실행시키면 메모리에 올라가 프로그램의 인스턴스가 생성됨 - 프로그램은 디스크(HDD, SDD)에 저장되어 있음
- 실행
프로세스
- 컴퓨터에서 실행중인 프로그램
즉 메모리에 올라와 실행되고 있는 프로그램의 인스턴스 - 운영체제 입장에서는 잡(Job)의 단위
- 운영체제의 스케줄러가 프로세스를 선택하여 CPU에 할당
- 프로세스의 실행 단계
- 프로세스 생성
- 스케줄러가 프로세스를 선택
- 스케줄러가 프로세스 내의 스레드를 선택
- 선택된 스레드를 CPU 코어에 할당
- 프로세스는 운영체제로 부터 할당된 자원의 집합 (ex 메모리 공간, PCB, 스레드 등)
운영체제가 잡을 실행하기 위한 정보, 자원을 프로세스에 할당 및 관리
- PCB
운영체제가 프로세스를 관리하기 위한 정보들- PID (프로세스 ID)
- 상태 (Ready, Running, Blocked 등)
- 프로그램 카운터 (다음 실행 명령)
- CPU 레지스터 값
- 스레드 목록 등
- PCB
- Context switching
프로세스간 컨텍스트 스위칭은 현재 실행하고 있는 프로세스의 정보를 저장 후
다음 실행할 프로세스의 정보를 PCB를 통해 불러옴
이 과정에서 메모리 공간 변경 등 여러 작업이 일어나 오버헤드가 큼 - Overhead
작업을 처리하기 위해 추가적으로 처리 해야할 비용(시간, 메모리 등)
ex) 5초면 완료되는 작업이 메모리 교체 등으로 8초가 걸리면 오버헤드는 3초가 된다
- 각각의 프로세스는 독립된 메모리 공간을 할당 받음
- 프로세스는 최소 1개 이상의 스레드를 가지고 있음
- 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간 통신( IPC, Inter-Process Communication )이 필요
스레드
스레드
- CPU에서 작업이 실행되는 단위
- 실제로 CPU에서 실행되는건 프로세스가 가지고 있는 스레드
- 프로세스는 자원의 집합(메모리, PCB, 스레드 등)
- 프로세스에서 작업이 실행되는 단위
- 스레드는 프로세스의 메모리중 Heap 영역은 공유, Stack 영역은 따로 할당받음
- 스레드는 다른 스레드의 Heap영역에 접근할 수 있음
- TCB
스레드를 관리하기 위한 정보들- TID (스레드 ID)
- 상태 (Ready, Running, Blocked 등)
- 프로그램 카운터
- 우선순위, 스케줄링 정보 등
- Context switching
같은 프로세스에서 다른 스레드로의 전환
메모리 공간을 공유하지 않는 스택, 레지스터만 교체가 일어나 오버헤드가 작음 - 운영체제의 스케줄러가 현재 실행중인 프로세스 A의 다른 스레드를 선택하면
스레드 컨텍스트 스위칭이 일어남
하지만 다른 프로세스 B의 스레드를 선택하면 프로세스 컨텍스트 스위칭이 일어남