728x90
프로세스(process)란 ?
운영체제로 부터 시스템자원을 할당 받은 작업단위
*실행중에 있는 프로그램
특징
프로세스 내부에는 최소 하나의 스레드 를 가지고 있는데, 실제로는 스레드 단위로 스케줄링을 한다.
*스케줄링 : CPU가 할당 순서 및 방법을 결정하는 일.
하드디스크에 있는 프로그램을 실행하면, 실행을 위해서 메모리 할당이 이루어지고,
할당된 메모리 공간으로 바이너리 코드가 올라가게 된다. 이 순간부터프로세스라 불린다.
- 프로세스는 독립된 메모리를 할당 받는다.
- 프로세스가 메모리를 관리하기 위해 이 공간들을 어떤 구조로 관리하는데, 이를 프로세스 주소 공간이라고 부른다.
- 프로세스 주소 공간은 Code, Data, Stack, Heap 으로 구성된다.
- Code: 코드 자체를 구성하는 메모리 영역(프로그램 명령)
- Data: 전역변수, 정적변수 등
- Stack: 지역변수, 함수 매개변수, 리턴 값 (임시 메모리 영역)
- Heap: 동적 할당 시 사용 (new(), malloc() 등)
- 기본적으로 프로세스마다 최소 1개의 스레드(메인 스레드)를 갖는다.
멀티 프로세스
장점
- 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는다.
단점
- 문맥 교환(Context Switching)*에서의 오버헤드 (자원비용이 많이 든다.)
*Context Switch -동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 프로세스 제어 블록(PCB)*에 보관하고,
대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.
다른 자원으로 바뀔때 사용되는 자원 비용 - Context Switching 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생하게 된다.
- 프로세스 간 통신 기법(IPC, Inter Process Comunication)
- 프로세스는 각 독립된 메모리 영역을 할당받았기 때문에 하나의 프로그램에 속하는 프로세스들 사이의 변수를 공유할 수 없다. 따라서 IPC라는 방법을 사용해야 하며, 이는 어렵고 복잡한 통신 방법이다.
*프로세스 제어 블록(PCB, Process Control Block)- 특정 프로세스에 대한 중요한 정보를 저장하고 있는 커널 내의 자료구조이다.
- 프로세스는 CPU를 할당받아 작업을 처리하다가 프로세스 전환이 발생하면 진행하던 작업을 저장하고 CPU를 반환해야 한다. 이때 작업의 진행 상황을 모두 PCB에 저장한다. 그리고 다시 CPU를 할당받게 되면 PCB에 저장되었던 내용을 불러와 종료되었던 시점부터 다시 작업을 수행한다.
- PCB에 저장되는 정보
- 프로세스 식별자(Process ID, PID) : 프로세스 식별 번호
- 프로세스 상태 : new, ready, running, waiting, terminated 등의 상태를 저장
- 프로그램 카운터(Program Counter, PC) : 프로세스가 다음에 실행할 명령어의 주소를 가리킨다.
- CPU 레지스터
- CPU 스케줄링 정보 : 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
- 메모리 관리 정보 : 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보를 포함한다.
- 입출력 상태 정보 : 프로세스에 할당된 입출력 장치들과 열린 파일 목록
- 어카운팅 정보 : 사용된 CPU 시간, 시간 제한, 계정 번호 등
스레드란 (thread) 란 ?
프로세스 내에서 프로세스의 자원을 이용하는 여러 실행 흐름의 단위
특징
스레드는 프로세스 내의 Code, Data, Heap 영역은 다른 스레드와 공유하고 Stack 영역을 따로 할당받는다.
프로세스와 해당 프로세스 내의 다른 스레드와 자원과 공간(Data / Heap) 을 공유하면서 사용한다.
멀티 스레드
장점
- 스레드는 하나의 프로세스 내의 자원(코드, 데이터, 힙)을 공유하기 때문에 프로세스에 비해 자원 할당 비용이 적게 들고 문맥 교환(Context Switch) 비용이 적게 든다.
*Context Switch - 다른 상태 또는 레지스터 값을 교체하는 작업에 들어가는 자원비용
다른 자원으로 바뀔때 사용되는 자원 비용 - 다중 스레드의 경우 일부 스레드의 처리가 지연되더라도 다른 스레드에서 작업을 계속 처리할 수 있다.
- 프로세스 간의 통신은 IPC가 필요한 반면, 스레드는 공유(데이터, 힙) 주소 공간을 사용하여 데이터를 교환할 수 있다.
- 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
단점
- 하나의 스레드에서 발생한 문제가 프로세스 전반에 영향을 미칠 수 있다.
- 자원을 공유하기 때문에 동기화 문제가 발생할 수 있다.
728x90
'개-발 > 이론' 카테고리의 다른 글
[CS]쓰레드와 쓰레드 풀 (0) | 2023.05.23 |
---|---|
[CS] HTTP Method 특성 (멱등성, 안정성) (0) | 2023.04.24 |
[CS]웹 브라우저에 URL 입력하면 일어나는 일 (0) | 2023.04.14 |
[CS지식] JVM(Java Virtual Machine) 이해하기 (1) | 2022.11.30 |
[CS지식] CPU (0) | 2022.11.11 |