프로세스의 개념
쓰레드의 개념
프로세스와 쓰레드의 관계
1. 프로세스의 개요
1) 프로세스 : 실행중인 프로그램
- 프로그램 : 동작을 하지 않는 정적, 수동적 개체
- 프로세스 : 동작을 하는 능동적 개체
2) 운영체제로부터 자원을 할당받아 동작
- 자원 : CPU, 메모리, 입출력장치, 파일 등
- 동작 : CPU가 프로세스의 명령을 실행
3) 운영체제(프로세스 관리자)가 처리하는 작업
- 프로세스 생성 및 종료
- 프로세스를 실행시키기 위한 스케줄링 작업
- 프로세스의 상태 관리(실행중인지 중지되었는지 ..)

- 작업관리자에서 현재 내 pc에서 실행중인 프로세스들을 확인할 수 있음

- 동일한 프로그램(ex.Hwp) 여러 번 실행시켰을 경우 동일한 이름으로 구분할 수 없기에 프로세스 아이디인 PID로 확인할 수 있음
2. 프로세스의 구성
⚒️ 메모리 구조
- 프로그램 실행에 직접적으로 필요한 코드와 데이터

1) 코드 영역 : 프로그램 자체
2) 프로그램 실행 시 필요한 데이터
- 상수나 변수의 값
- 서브 프로그램 호출상태 등
(대략적으로 전역변수는 정적데이터 영역, 지역변수는 스택 영역, 동적 변수 중 사용자가 수동으로 할당하는 값은 힙 영역)
⚒️ 프로세스 제어 블록(Process Contrl Block : PCB)
- 운영체제가 프로세스를 관리하기 위해 필요한 정보
(특정 프로세스를 다른 프로세스와 구분하여 처리하기 위해서는 정보들이 필요함)

- 각 프로세스마다 존재
- 여러 프로세스가 번갈아 실행되는 경우 PCB에 저장된 정보 활용
⚒️ 프로세스 상태 관리
- 크게 5가지 단계로 나눌 수 있음

1) 생성
- 처음 작업이 시스템에 주어진 상태
- 메모리 할당, PCB 생성
- 위 준비가 끝나면 준비단계로 넘어감
2) 준비
- CPU 할당이 끝나면 실행 상태로 넘어감
- 실행 준비가 되어 cpu 할당을 기다리는 상태
3) 실행
- 프로세스가 처리되는 상태
4) 대기
- 프로세스가 실행 중 다른 이벤트(ex.입출력 등)로 기다리게 되었을 때 대기상태로 진입함
5) 종료
- 프로세스가 더 이상 실행되지 않도록 끝난 상태
⚒️ 프로세스 상태 관리
- 프로세스 상태 변화가 가능한 길은 한정되어있음

1) 생성단계에서는 준비단계로만 변화가 가능함
2) 준비단계에서 cpu를 할당받게 되는 것을 "디스패치" 라고 함
3) 실행단계에서 할당된 시간을 다 사용했을 경우에는 준비단계로 되돌아감
4) 실행단계에서 특정 이벤트가 생겼을 경우 대기단계로 변화함
5) 특정 이벤트가 끝난 경우 실행상태가 아니라 준비 상태로 변화함(이후 디스패치-실행단계 거침)
6) 실행과정이 잘 끝나거나 오류가 생긴 경우에도 종료단계로 변화할 수 있음
⚒️ 프로세스 생성 방법
- 사용자가 프로그램을 직접 실행
- 한 프로세스가 다른 프로세스를 생성
- 프로세스 생성 시스템 호출 이용
(※ 시스템 호출 : 사용자 모드에서 커널 모드로 변화하는 것)
- 부모 프로세스 : 시스템 호출을 하는 프로세스
⚒️ 프로세스 생성하는 시스템 호출
1. UNIX, Linux
1) fork() 명령어 사용
- 자식 프로세스는 부모 프로세스의 복제본
- PID(프로세스ID)만 달라짐
- 부모 프로세스의 pid에는 결과값(자식의 pid)이 들어가고 자식 프로세스의 pid에는 0이 들어감.

2) exec() 명령어 사용
- 자식 프로세스에게 부모와 다른 프로그램을 시키고 싶을 경우 사용
- 만약 pid가 0이라면(자식 프로세스라면) exec 명령어를 통해 prg2라는 새로운 프로그램 실행 -> 메모리 구조, PCB가 새로운 프로그램에 따라 바뀜(pid는 바뀌지 않음)

2. Windows
1) CreateProcess()
- 자식 프로세스는 새로운 프로그램으로 생성
- 자식 프로세스는 처음부터 prg2라는 프로그램으로 생성됨

⚒️ 프로세스 종료 방법
1) 프로세스가 모든 처리를 완료(정상적 종료)
2) 부모 프로세스에 의해 자식 프로세스가 강제 종료
- 프로세스 종료 시스템 호출 이용
- 자식 프로세스 생성시 얻은 자식 PID 이용
3) 부모 프로세스가 종료되는 경우 운영체제가 자식 프로세스 종료
2. 쓰레드 (Thread)
⚒️ 전통적인 프로세스

- 하나의 프로그램을 실행하기 위한 기본적인 단위
- 자원 소유의 단위
- 하나의 메모리 구조
- 디스패칭의 단위
- 하나의 제어 흐름
- 프로세스 내에서 다중처리 불가능
⚒️ 쓰레드(Thread)

- 프로세스 내에서의 다중처리를 위해 제안된 개념
- 하나의 프로그램을 실행하기 위한 기본적인 단위
- 디스패칭(cpu를 할당받아 명령어 처리)의 단위
- 하나의 프로세스 내에는 하나 이상의 쓰레드 존재
- 이전에는 PCB 안에 있던 pc를 쓰레드가 가지게 됨
⚒️ 프로세스 비교
- 전통적인 프로세스

- 쓰레드 있는 프로세스

⚒️ 프로세스 비교

1) 쓰레드는 실행에 필요한 최소한의 정보만 가짐
- PC를 포함한 레지스터 값
- 상태정보
- 스택영역
2) 나머지 정보는 프로세스에 두고 다른 쓰레드와 공유
⚒️ 다중 쓰레드로 구성된 프로세스

1) 처리속도 별로 쓰레드가 나눠진 경우
- 효율적인 처리 가능
- 프로세스는 실행 중인 프로그램을 의미하며, CPU, 메모리, 파일, 입출력장치 등 실행에 필요한 자원이 할당된다.
- 프로세스 제어 블록은 프로세스를 명시해 주는 다양한 내용을 포함하고 있다.
- 프로세스는 생성, 준비, 실행, 대기, 종료의 다섯 상태 중 하나로 존재하며, CPU의 스케줄링, 입출력 대기 등에 따라 준비, 실행, 대기 등으로 상태가 변화되며 동작한다.
- 쓰레드는 프로세스에서 실행의 개념만 분리한 것으로 디스패칭의 단위이다.
- 하나의 프로세스 내에는 하나 이상의 쓰레드가 있을 수 있어, 다중 쓰레드를 생성하여 프로세스 내에서의 다중처리를 할 수 있다.
'방통대 > 운영체제' 카테고리의 다른 글
메모리 관리 (0) | 2025.04.06 |
---|---|
운영체제 소개 (1강) (2) | 2025.03.02 |
댓글