프로세스(Process)는 컴퓨터에서 실행되고 있는 프로그램을 말하며, 스케줄링의 대상이 되는 task라는 용어과 거의 같은 의미이다.
Disk에 저장되어 있는 프로그램이 메모리에 올라가면, 프로세스가 인스턴스화 되었다고 하고, CPU스케줄러에 따라 CPU가 프로세스를 실행한다.
New
New는 프로세스가 생성된 상태를 의미하며, fork(), exec() 함수를 통해 생성한다.
🧷fork()
부모 프로세스의 주소 공간을 그대로 복사한 새로운 자식 프로세스를 생성하는 함수이다. 주소 공간만 복사할 뿐, 부모 프로세스의 비동기 작업은 상속하지 않는다.
🧷exec()
현재 프로세스의 이미지를 새로운 이미지로 변환시키는 것이다.
🫧Windows : CreateProcess() = fork() + exec()이 2개의 함수는
스레드가 아닌프로세스의 생성이다!!
Ready
CPU Scheduler로부터 CPU 소유권이 넘어오기를 기다리는 상태이다.
Running
CPU 소유권과 메모리를 할당받고 Instructions가 실행 중인 상태를 말한다.
Waiting
어떤 이벤트가 발생한 이후 기다리며 프로세스가 차단된 상태이다. I/O 디바이스에 의한 Interrupt로 인해 이런 현상이 자주 발생된다.
예를 들어 프린트 인쇄 버튼을 눌렀을 때, 프로세스가 잠깐 멈추는 것이 이와 같은 현상이다.
스레드는 프로세스의 Stack 영역만 따로 할당 받고 나머지 영역은 서로 공유한다.
하나의 프로세스가 생성될 때, 기본적으로 하나의 스레드 같이 생성하고, 하나의 프로세스에는 여러 개의 스레드가 존재할 수 있다.
프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하는데 반해, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용하는 차이가 존재함
멀티프로세싱은 여러 개의 프로세스를 병렬로 수행하는 것을 의미한다.
크롬 브라우저는 Muilti-Process
구조를 갖고 있는 대표적인 예시이다. 크롬 브라우저에서는 여러 개의 Process
끼리 메모리를 공유한다.
시스템 내의 프로세스는 독립적(independent)이거나 협력적(cooperating)일 수 있다. 독립된 프로세스는 다른 프로세스에 영향을 미치거나 받을 수 없다. 하지만 협력 프로세스는 데이터 공유를 포함하여 다른 프로세스에 영향을 미치거나 받을 수 있다. 프로세스가 협력하는 이유는 다음과 같다.
- 정보 공유
- 계산 속도 향상
- 모듈성
- 편의성
멀티 프로세스는 여러 개의 협력 프로세스가 IPC(Inter Process Communication)를 하며, IPC는 프로세스끼리 데이터를 주고받고, 공유 데이터를 관리하는 메커니즘이다.
Shared Memory
Message Queue
Process A
➡ Process B
로 데이터를 전달하기 위해서 User
↔ Kernel
로 스위치가 빈번하게 일어난다.멀티스레딩은 하나의 프로세스에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리한다.
스레드들은 메모리 공유를 통해 효율성을 높일 수 있다.
또한 한 스레드가 Blocked되어도 다른 스레드는 Running상태 일 수 있기 때문에, 중단되지 않은 빠른 처리가 가능하다.
하나의 스레드가 데이터 공간을 망가뜨리면, 모든 스레드가 작동 불능 상태일 수 있다.(공유 메모리를 갖기 때문)
멀티스레드의 안전성에 대한 단점은 Critical Section 기법을 통해 대비할 수 있다.