컴퓨터 사이언스

프로세스와 스레드

woohap 2024. 10. 22. 07:45

프로세스란 ??

프로세스는 머신(컴퓨터)를 추상화한 개념이다.
- 각 프로세스는 마치 전체 컴퓨터를 독점적으로 사용하는 것처럼 동작할 수 있음
  서로 다른 프로세스는 서로의 DRAM, 즉 서로의 주소 공간에 접근할 수 없기 때문
  개별 컴퓨터에서 각 프로그램을 수행하는 것과 동일하므로 머신을 추상화한 개념
  각 프로세스는 자신만의 가상 메모리, 가상 CPU, 파일들을 갖는다.
  프로세스 간 통신 메커니즘(IPC)를 통해 프로세스들 간의 제한적인 정보 교환이 가능함 

  가상 메모리 - 각 프로세스는 가상 주소 공간을 갖는다.
  가상 CPU - 각 프로세스는 CPU를 혼자 점유한다는 착각을 하게 된다. // 시분할 스케줄링 기법 활용
  파일 - 각 프로세스는 자신만의 파일 디스크립터를 갖는다.
프로세스는 실행 중인 프로그램이라고 불린다. 즉 실행 파일을 프로세스로 추상화 
- 프로그램을 실행하면 프로세스 리스트에 프로세스가 등록되고 PCB가 생성되며 가상 주소 공간이 할당된다.
  이후 필요한 데이터가 메인 메모리에 적재되게 되고 더 나아가 파일 디스크립터도 설정된다.
  정적인 프로그램이 동적인 프로세스로 전환됨 
프로세스는 운영체제가 자원을 할당 받는 작업의 단위
운영체제는 프로세스 단위로 CPU시간, 메모리, 파일 시스템 접근 등을 관리한다. 

프로세스 특징

각 프로세스는 독립적인 메모리 영역을 할당 받음
각 프로세스는 적어도 한 개의 스레드를 갖는다.
각 프로세스는 별도의 주소 공간에서 실행된다.
한 프로세스는 다른 프로세스의 변수나 자료구조에 접근 불가
한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스간 통신 (IPC)를 사용해야한다.

프로세스 주요 상태

실행(Running) : 프로세스가 프로세서에서 실행 중인 상태
준비(Ready): 실행할 준비는 되었지만 대기 중인 상태 // CPU가 다른 프로세스 실행 중 
대기(Blocked) : 이벤트나 I/O로 인해 프로세스의 수행을 중단시킨 상태

프로세스 상태 변화

- 준비 → 실행 
현재 실행 중인 프로세스를 중단시키고 준비 큐에서 다음 프로세스를 프로세서가 점유하는 상황 
이를 디스패치라고 한다.

- 실행 → 준비
주어진 타임 슬라이스를 소진하거나 더 우선순위가 높은 프로세스가 준비큐로 들어오는 경우
** 어떤 스케줄러를 사용하는지에 따라 다를 수 있음

- 실행 → 대기
특정 이벤트나 I/O 입출력이 발생하여 현재 작업을 수행할 수 없는 경우 프로세서가 해당 프로세스를 
점유할 수 없도록 대기 큐에 넣어 재운다.

- 대기 → 준비
특정 이벤트나 I/O 입출력을 완수한 경우 프로세서가 선점할 수 있으므로 재워둔 프로세스를 깨워  준비큐에 넣어 깨운다.

- 실행 → 종료
프로세스가 작업을 완료하거나 오류로 인해 강제 종료될 때 발생

- 새로 생성
새 프로세스가 생성되면 바로 준비 상태로 들어간다.

스레드란

프로세스의 코드에 정의도니 절차에 따라 실행되는 특정한 수행 경로이다. 
즉, 한 프로그램을 코드에 따라 여러 흐름으로 처리할 수 있음을 의미한다.

멀티 스레드란 ??

하나의 프로세스 내에서 두 개 이상의 스레드가 동시에 실행되는 것을 의미한다. 
병렬처리할 수 있다는 장점이 있지만 공유 자원에 대한 동기화를 수행해줘야 한다. 
Ex) 파일 I/O와 사용자 데이터 입력은 동시에 실행
하나의 흐름은 파일 I/O을 수행하고 다른 하나는 사용자로부터 데이터를 입력 받는 코드가 실행된다.

스레드 특징

스레드는 프로세스 마다 주어진 전체 자원을 함께 사용한다.
스레드는 서로 주소 공간, 자원들을 공유
같은 프로세스의 여러 스레드는 힙 공간을 공유
각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만 힙 메모리는 서로 읽을 수 있다.
→ 같은 프로세스의 스레드는 서로 다른 스레드의 스택을 읽거나 덮어쓸 수 있음

한 스레드 자원 변경 시, 다른 이웃 스레드도 그 변경 결과를 즉시 볼 수 있다.

스레드 상태 변화

- 준비 → 실행 
현재 실행 중인 스레드를 중단시키고 스레드 준비 큐에서 다음 스레드를 CPU가 점유하는 상황
이를 스레드 디스패처라고 한다.

- 실행 → 준비 
주어진 타임 슬라이스를 소진하거나 더 우선순위가 높은 스레드가 준비 큐로 들어오는 경우
스레드 스케줄러의 정책에 따라 다를 수 있음

- 실행 → 대기 
I/O 작업, 특정 이벤트 등으로 인해 현재 작업을 수행할 수 없는 경우, 해당 스레드를 대기 큐로 이동시킨다.

- 실행 → 종료 : 스레드가 작업을 완료하거나 예외로 인해 강제 종료될 때 발생
스레드의 자원이 해제된다.

- 새로 생성 : 새 스레드가 생성되면 바로 준비 상태로 돌아간다.

**
스레드 한 개가 대기 상태(Blocked)가 될 때, 전체 프로세스를 대기 상태로 바꾸지 않는다.

프로세스와 스레드의 문맥교환

프로세스 문맥교환

프로세스의 경우 프로세스 간 문맥교환이므로 해당 프로세스를 실행하기 위한 모든 정보를  교환해야   한다. 즉, 문맥 교환 비용이 비교적 큼 

- 메모리 관리 정보(페이지 테이블 등)
- 파일 디스크립터
- 프로세스 상태
- 모든 CPU 레지스터 값
- I/O 상태 정보

프로세스는 독립적인 프로그램을 실행할 때, 또는 높은 수준의 격리가 필요할 때 사용

스레드 문맥교환

스레드의 경우 프로세스의 자원을 공유하므로 필요한 스레드 상태 정보만 교환하면 된다.
즉, 문맥 교환 비용이 비교적 작음

- 프로그램 카운터
- 레지스터 값
- 스택 포인터
- 스레드 특정 데이터

스레드는 동일 프로그램 내에서 여러 작업을 병렬로 처리할 때 효과적

문맥교환 속도 차이

프로세스 보다 스레드 문맥교환이 속도가 더 빠르다.
- 프로세스 문맥 교환은 밀리초 단위의 시간 필요.
- 스레드 문맥 교환은 마이크로초 단위의 시간 필요.

'컴퓨터 사이언스' 카테고리의 다른 글

세마포어  (0) 2024.10.24
임계영역, 공유자원, Lock, Mutex  (0) 2024.10.23
CDN  (1) 2024.10.20
파일 디스크립터  (1) 2024.10.18
OSI 7 계층  (0) 2024.10.17