본문 바로가기

CS

[OS] Process / Thread

스레드 개념이 헷갈려 정리하고자 하였으나, 프로세스와 스레드 두 가지 개념 자체가 혼동되어 정리하기로 하였다.

 

 

 

프로세스(Process)

 

1.  프로세스의 정의

 

 -  운영체제로부터 자원을 할당받은 [작업]의 단위

 

 -  프로그램(실행 파일)이 실행되어 -> 파일이 컴퓨터 메모리에 올라가게 되는 상태(동적인 상태)의 프로그램

 

 -  즉, 프로그램 -> 프로세스로 이어지는 단계이다.

 

그렇다면, 프로그램은?

 

 

2.  프로그램이란, 

 

 -  '프로그램'이란. 파일이 저장 장치에 저장되어 있지만, 메모리에 올라가 있지 않은 정적인 상태

 

 -  즉, 아직 실행되지 않은 파일(코드 덩어리)

 

    Ex) Window *.exe 파일, Mac OS의 *.dmg 파일 등

 

 여기서, 

 

  1)  메모리에 올라가 있지 않은: 운영체제(OS)가 프로그램에게 독립적인 메모리 공간을 할당해주지 않은 상태

   

   -  여기서, 모든 프로그램은 운영체제가, 실행되기 위한 메모리 공간을 할당해주어야 실행 가능하다. 

 

  2) 정적인 상태: 움직이지 않는, 아직 실행되지 않고 가만히 있는 상태

 

 

3.  프로세스 단계

 

 -  프로그램 -> 프로세스로 이어지는 단계에서, 운영체제는 프로그램을 메모리의 적당한 위치로 가져오고, 동시에 프로세스 제어 블록(PCB, Process Control Block)을 만든다.

 

->  프로세스 = 프로그램 + 프로세스 제어 블록

 

이라고 할 수 있으며, 이때 PCB는 프로세스를 처리하는데 필요한 다양한 정보가 포함된 운영체제 커널의 자료구조이다. 

 

 (1)  프로세스 제어 블록(PCB)

 

   -  특정 프로세스를 처리하는데 필요한 정보가 포함된 운영체제 커널의 자료구조로

 

   -  운영체제가 프로세스 스케줄링을 위해 프로세스에 관한 모든 정보를 가지고 있는 데이터베이스라고 할 수 있다.

 

   -  각 프로세스 생성마다 고유의 PCB가 생성되고 -> 프로세스 완료 시 PCB는 제거된다.  

 

   -  프로세스는 CPU를 점유해 작업을 처리하다가, 상태가 전이되는 경우 -> 진행 작업 내용을 정리하고 CPU를 반환해야 한다.

 

   ->  이때, 프로세스는 진행하던 작업을 PCB에 저장하여 -> 다시 CPU를 점유하여 작업 수행 시 PCB로부터 저장된 정보를 CPU로 넘겨온다.

 

   프로세스 제어 블록에 저장되어 있는 정보로는, 

 

 

PCB 구성 정보

 

PCB 구성 정보 설명
프로세스 식별자(Process ID)  
프로세스 상태(Process State) 생성(Create) - 준비(Ready) - 실행(Running) - 대기(Waiting) - 완료(Terminated) 상태 존재
프로그램 계수기(Program Counter) 해당 프로세스가 다음에 실행할 명령어의 주소
CPU 레지스터 및 일반 레지스터  
CPU 스케줄링 정보 우선 순위, 최종 실행 시각, CPU 점유 시간 등
메모리 관리 정보 해당 프로세스 주소 공간
프로세스 계정 정보 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등
입출력 상태 정보 프로세스에 할당된 입출력 장치 목록, 열린 파일 목록
포인터 부모 프로세스에 대한 포인터, 자식 프로세스에 대한 포인터, 프로세스가 위치한 메모리 주소에 대한 포인터, 할당된 자원에 대한 포인터 정보 등

 

 (2)  프로세스 단계

 

   -  프로세스는 아래와 같은 단계로 정의되며, 

 

각 단계는

 

단계 설명
생성(new, create) 프로세스가 메모리에 올라와 실행 준비를 완료한 상태
준비(ready) 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태
수행(running) 준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 -> 실제 작업 수행하는 상태
대기(waiting) 실행 상태에 있는 프로세스가 입출력 요청 시 -> 입출력이 완료될 때까지 기다리는 상태
종료(exit) 프로세스 종료 상태

 

 (3)  프로세스의 구조

 

   -    프로세스는 '코드 영역, 데이터 영역, 스택 영역, 힙 영역' 으로 구성

 

 

구조 영역 설명
코드(Code) 코드 자체를 구성하는 메모리 영역(프로그램 명령)
데이터(Data) 전역 변수, 정적(static) 변수, 배열 할당 공간(초기화 된 데이터)
스택(Stack) 지역 변수, 매개 변수, 리턴 값 저장 공간(임시 메모리 영역)
힙(Heap) 동적 할당시 사용되는 공간(new(), mallock() 등)

 

 

 

스레드(Thread)

 

1.  스레드의 정의

 

 -  프로세스가 할당받은 자원을 이용하는 [실행 흐름]의 단위

 

->  스레드는 프로세스 안에 '포함'되어 있다.

 

 -  CPU 입장에서의 작업 단위  cf) 프로세스: 운영체제 입장에서의 작업 단위

 

 

2.  스레드 필요성

 

 -  프로그램 실행 시작부터 끝까지 프로세스 하나만을 사용해서 진행될 때의 복잡성을 해결하기 위해

 

 -  '한 프로그램을 처리하기 위한 프로세스를 여러 개 만드는 방법'은, '운영체제가 안정성을 위해, 프로세스마다 자신에게 할당된 메모리 내의 정보에만 접근'할 수 있어 이 메모리를 벗어나는 정보에 접근하려면 오류가 발생해

 

 -  프로세스 보다 더 작은 실행 단위 개념 등장

 

 

3.  스레드의 메모리 공유

 

 -  스레드는 프로세스 내에서 Stack만 각각 따로 할당 받고 & Code, Data, Heap 영역은 공유

 

 ->  한 프로세서 내의 주소 공간이나 자원 대부분을 공유

 

멀티스레드 구조

 

  + ) Code, Data, Heap 자원은 공유하지만, Stack은 공유하지 않는 것은, 

 

   -  Stack의 후입선출(LIFO, Last In First Out) 특성과 연관이 있는데,

 

   -  Stack 영역은 Stack이 쌓일 때 위에서부터 프로세스가 섞인 상태로 나오기 때문에 원활한 실행 흐름을 위해 Stack은 독립적으로 존재한다.

 

 

4.  스레드 생성

 

 -  하나의 프로세스 생성 -> 하나의 스레드 생성(메인 스레드)

 

 -  스레드를 추가로 생성하지 않는 한, 모든 프로그램 코드는 메인 스레드에서 실행

 

 -  하나의 프로세스는 여러 개의 스레드를 가질 수 있음(멀티 스레드)

 

 

5.  멀티 프로세스 Vs 멀티 스레드

 

멀티 프로세스 구조

 

  멀티프로세스 멀티스레드
의미 하나의 컴퓨터에 여러 CPU -> 하나 이상의 프로세스 동시(병렬) 처리 하나의 프로세스 -> 여러 스레드 생성(각 스레드가 하나의 작업 처리)
장점 구조 독립 -> 안정성 높음 - 프로그램 응답 시간 단축
- 시스템 처리율 향상
- 메모리 공간, 시스템 자원 효율성 증가
- Data, Heap 영역을 이용해 데이터 주고받음 -> 스레드 간 통신 간단
단점 - 독립된 메모리 영역 -> 작업량 증가 시 오버헤드 발생 가능(Context Switching)
- 프로세스 간 통신(IPC) 복잡
- 하나의 스레드에 문제 발생 시 전체 프로세스에 영향
- 서로 다른 스레드가 Stack 제외 메로리 공간 공유 -> 동기화 문제 발생 가능

 

 

6.  스레드 제어 블록(TCB, Thread Control Block)

 

 -  스레드의 메타 데이터를 저장하는 블록

 

 -  스레드 별로 존재하는 자료 구조

 

 

 + ) PCB와 TCB

 

  -  같은 프로세스 내에서 스레드 간 Context Switching -> TCB(Context Switching 의 기본 단위)

 

  -  다른 프로세스의 스레드로 Context Switching -> PCB & TCB

 

 

7.  자바 스레드(Java Thread)

 

 -  일반 스레드와 거의 동일

 

 -  JVM이 운영체제의 역할

 

 -  Java Thread는 JVM에 의해 스케줄되는 실행 단위 코드 블럭 -> JVM 내에 메모리를 공유하여 사용

 

 -  main() 메소드 수행 -> 하나의 스레드 실행

 

 

 

'CS' 카테고리의 다른 글

[Network] HTTP 란 ?  (0) 2022.07.09
[Network] TCP 와 UDP 의 차이 ?  (0) 2022.07.09
[Network] TCP/IP 란 ?  (0) 2022.07.09
[DB] 데이터베이스 인덱스(Index)  (0) 2022.07.09
[Network] OSI 7계층(feat.TCP/IP Updated)  (0) 2022.06.21