프로세스, 스레드

kmb·2021년 12월 12일
0

운영체제

목록 보기
2/5

프로세스

실행중인 프로그램을 디스크에서 메모리로 적재해서 CPU의 할당을 받을수있는 상태.
OS가 주소공간, 파일, 메모리를 프로세스에게 할당해준다. OS입장에서의 작업단위를 뜻한다.
(사용자가 프로그램을 마우스로 더블클릭하면 그 프로그램은 프로세스가 된다)


프로그램 vs 프로세스

프로그램은 HW같은 저장장치에 저장되어있는 '정적인 상태'
프로세스는 프로그램이 실행되어 해당 코드가 메모리에 올라와 작업이 진행되는 '동적인 상태'

<프로그램에서 프로세스로 전환되는 과정>
1) OS는 프로그램을 메모리로 가져온다.
2) 그와 동시에 OS 내부에 프로세스 제어 블록(PCB)를 만든다. PCB가 없으면 프로그램이 프로세스로 전환되지 못한다.
3) 프로세스 작업이 종료되면 프로세스가 메모리에서 삭제되고 PCB가 폐기된다.


프로세스의 5가지 상태

1) 생성 상태 : 프로세스가 메모리에 올라와 실행 준비 완료한 상태. (PCB가 생성됨)

2) 준비 상태 : 생성된 모든 프로세스가 자기 차례를 기다리는 상태. (PCB는 ready queue에서 기다리며 CPU 스케줄러에 의해서 관리된다)

3) 실행 상태 : 프로세스가 CPU를 얻어서 일정시간동안 작업을 수행하는 상태.
(일정시간이 지나면 timeout이 실행되고 만약 시간내에 작업을 못끝냈다면 PCB를 준비상태로 옮긴다. 시간내에 작업을 끝내면 exit가 실행된다. 도중에 I/O를 요청하면 block을 실행해서 대기상태로 옮긴다.)

4) 대기 상태 : 실행 상태인 프로세스가 I/O 을 요청하면 CPU는 I/O 관리자에게 I/O를 요청하고 I/O가 완료될때까지 기다린다. I/O가 완료되면 wakeup을 실행해서 준비 상태로 옮긴다.

5) 완료 상태 : 프로세스가 종료되는 상태. 코드와 데이터를 메모리에서 삭제하고 PCB를 폐기한다.
(정상적인 종료는 exit로 처리하고 비정상적 종료는 코어덤프로 강제종료직전의 메모리 상태를 저장장치로 옮긴다)


프로세스 구조

1) Stack : OS가 프로세스를 실행하기위해 부수적으로 필요한 데이터를 모아두는 곳. (사용자에게 보이지 않는다)

2) Heap : 동적으로 할당되는 변수영역.

3) Code : 개발자가 작성한 코드가 탑재되는곳. (탑재된 코드는 읽기만 가능)

4) Data : 코드가 실행되면서 사용하는 변수나 데이터를 모아두는곳. (읽기, 쓰기 가능)


프로세스 작업 과정

OS는 Code, Data를 메모리에 가져오고, PCB를 생성한다.
그 다음 작업에 필요한 메모리 영역을 확보하고, 준비된 프로세스를 ready queue에 삽입한다.
프로세스가 생성되면 CPU 스케줄러가 프로세스가 해야 할 일을 CPU에 전달하고 실제 작업은 CPU가 진행한다.


스레드

프로세스 코드에 정의된 절차에 따라 CPU에 작업을 요청하는 실행 단위.
( 프로세스 작업과정에서 CPU 스케줄러가 CPU에 전달하는 일 1개가 스레드이다 )
OS 입장에서 작업단위는 프로세스, CPU 입장에서 작업단위는 스레드라고 보면 된다.


스레드 구조 및 특징

  1. 스레드는 Stack을 제외한 Code, Data, Heap을 공유한다.
  2. 메모리를 공유함으로써 Context Switching의 오버헤드에 대한 부분을 해결.

오버헤드 : 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간, 메모리

  1. 메모리를 공유함으로써 스레드간의 충돌이 일어날수있음.
  2. 디버깅이 어려움. (스레드간의 충돌 때문에)

프로세스 vs 스레드

프로세스는 독립적으로 서로에게 영향을 미치지 않는다.
스레드는 프로세스 내부에서 서로 강하게 연결되어 있다.

멀티태스킹 : OS가 CPU 1개에 작업을 줄때 여러개의 스레드에 시간을 잘게 나누어서 주는 시분할 시스템. fork( ) 시스템호출로 여러개의 프로세스를 만듬. (스레드 기법)
멀티프로세싱 : CPU를 여러개 사용해서 여러개의 스레드를 동시에 처리하는것.
멀티스레드 : OS가 SW방식으로 1개의 프로세스에서 여러개의 스레드를 분할해서 작업하는 프로세스 운영기법 (프로세스 기법)
CPU 멀티스레드 : HW방식으로 1개의 CPU에서 여러개의 스레드를 동시에 처리하는 병렬처리 기법


멀티스레드 장점 및 단점

<장점>
1) 응답성 향상 : 1개의 스레드가 I/O으로 인해 대기상태로 가더라도 상관없이 다른 스레드가 계속 작업을 해서 빠른 응답 가능. ex) 채팅하면서 파일을 주고받는 행위.
2) 자원 공유 : 1개의 프로세스 내에서 모든 스레드가 내부 자원을 공유 할 수 있다 (공유 못하는것도 있음)
3) 효율성 향상 : 불필요한 자원의 중복을 막아서 시스템 효율 향상
4) 다중 CPU 지원 : 2개 이상의 CPU를 가진 컴퓨터에서 멀티스레드 사용하면 다중 CPU가 멀티스레드를 동시에 처리하므로 CPU 사용량 증가하고 프로세스 처리 시간 단축됨

<단점>
모든 스레드가 자원을 공유하기 때문에 1개의 스레드에 문제가 생기면 전체 프로세스에 영향을 미친다.
ex) 인터넷 익스플로러는 멀티스레드를 사용하기 때문에 여러개의 화면을 띄워놓고 사용하다가 1개의 화면에 문제가 생기면 모든 화면이 꺼진다.
크롬은 멀티태스킹(여러개의 프로세스) 을 사용하기 떄문에 1개의 화면에 문제가 생겨도 다른 화면에 영향이 적다.

참조

  • 쉽게 배우는 운영체제 (책)
profile
꾸준하게

0개의 댓글