IT's 우

[OS] 프로세스와 스레드 본문

CS/OS

[OS] 프로세스와 스레드

디우 2023. 8. 24. 14:30
728x90
✅ 프로세스
: 운영체제로부터 자원을 할당받은 작업의 단위
✅ 스레드
: 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위

1. 프로세스(Process)

1. 1 프로세스(Process)란?

 

프로세스는 실행 중인 프로그램을 뜻한다. (프로그램 : 명령어들의 모음을 포함한 디스크에 저장된 파일)

 

프로그램이 실행되면 이 프로그램의 명령어들과 데이터가 메모리에 적재되고 이것이 프로세스가 된다.


 

1.2 프로세스의 메모리 구조

 

Code 영역 : 프로그램을 실행시키는 실행 파일 내의 명령어들이 위치하는 공간

 

Data 영역 : 전역 변수, static 변수들이 위치하는 공간

 

Heap 영역 : 동적할당을 위한 메모리 영역(malloc(), new 등)

 

Stack 영역 : 지역 변수, 파라미터(함수에 전달되는 인자)가 위치하는 공간


 

1.3 프로세스 상태(Process State)

 

 

new(생성) : 프로세스가 생성된 상태. OS 커널에 존재하는 Ready Queue에 올라가면 ready 상태가 된다.

 

ready(준비) : 프로세스가 CPU로부터 메모리 공간을 할당받길 기다리는 상태. 이때 프로세스 스케줄러에 의해 프로세스가 할당을 받게 되면 running 상태가 된다. 이것을 dispatch라고 한다.

 

running(실행) : 명령어들이 실행되는 상태. 이때 interrupt(간섭)이 발생하면 ready 상태로 변한다. 실행을 끝마치면 exit(종료)되고 terminated 상태로 변한다. I/O(입출력)이나 event가 발생하면 waiting 상태로 변한다. 

 

waiting(대기) : 특정 event가 발생하길 기다리는 상태이다. 이때 I/O 나 특정 event가 완료되면 ready상태로 변한다.

 

terminated(종료) : 프로세스가 실행을 끝마친 상태


1.4 프로세스 스케줄링(Process Scheduling)

 

하나의 CPU를 가지고 있는 컴퓨터는 프로세스를 동시에 실행시킬 수 없다.

따라서 CPU는 고속으로 여러 프로세스를 일정한 기준으로 순서를 정해서 실행한다.

→ 이러한 CPU 할당 순서 및 방법을 결정하는 과정을 프로세스 스케줄링이라고 하며 CPU 스케줄러가 이를 담당한다.


 

2. 스레드(Thread)

 

2.1 스레드(Thread)란?

프로세스 하나만을 사용해서 프로그램을 실행하기에는 메모리의 낭비가 발생한다. 스레드는 프로세스와 다르게 스레드 간 메모리를 공유하며 작동한다.

 

프로세스 내에서 실행되는(프로세스가 할당받은 자원을 이용하는) 프로그램 코드의 흐름의 단위

 

스레드는 운영체제의 스케줄러에 의해 독립적으로 관리될 수 있는 프로그래밍된 가장 작은 시퀀스이다. 하나의 프로세스는 하나 이상의 스레드를 가지고 있다.

 

  • 프로세스 내 주소 공간이나 자원 공유가 가능
    • 스레드는 프로세스 내의 Code, Data, Heap 영역을 공유하고 Stack 영역은 따로 할당받는다.
    • 여러 스레드는 한 프로세스 내의 Code, Data, Heap 영역을 공유하지만, 프로세스 간에는 서로 메모리에 접근할 수 없다.
    • 스레드는 별도의 Register와 Stack을 가지고, 그 외의 다른 영역은 공유한다. 한 스레드가 프로세스 자원을 변경하면 다른 스레드도 그 변경 결과를 가져올 수 있다.

 

2.2 스레드가 필요한 이유

 

여러 개의 작업 단위로 구성된 프로그램에서 요청을 동시에 처리하기 위함이다.

 

예를 들어, 워드 프로세서에서 사용자로부터 키보드 입력받는 스레드, 그래픽이나 UI를 그리는 스레드, 그리고 문법 오류 체크하는 스레드 등 워드 프로세서 내에서 여러 요청들을 동시에 처리해야 할 때, 스레드가 필요


2.3 스레드의 이점

  1. 응답성: 다른 스레드의 실행 시간이 길거나 입출력 요청으로 인해 block 되더라도 계속 실행되는 것을 허용
  2. 자원 공유 : 프로세스 내 자원(Data, Code, Heap)을 공유
  3. 경제성 : 프로세스 생성을 위한 메모리 자원 할당, 프로세스 간 문맥 교환은 비용이 많이 들고 오버헤드가 발생하는 반면에, thread는 프로세스의 자원을 공유하고 있으므로 스레드 생성이나 문맥 교환 시에 더 경제적
  4. 확장성 : 멀티 프로세서 구조에서는 스레드들이 각자 프로세스 위에서 병렬적으로 실행되기 때문에, 다중 CPU 환경에서 병렬성이 크게 증대

2.4 스레드가 경량 프로세스(Light Weight Process)라 불리는 이유

  1. 프로세스 생성(Process fork)에 비해 스레드 생성 시간이 더 빠름
  2. 스레드 간에 프로세스 자원을 공유할 수 있기 때문.
  3. 스레드 간에 통신이 용이하기 때문.

출처

https://code-lab1.tistory.com/38

https://velog.io/@aeong98/운영체제OS-프로세스와-스레드

https://wookkingkim.tistory.com/entry/운영체제-스레드Thread의-개념

 

728x90
반응형

'CS > OS' 카테고리의 다른 글

[OS] 커널(kernel)  (0) 2023.08.18