어떤 작업을 위해 실행할 수 있는 파일
우리가 어떤 file에 실행가능한 코드를 작성하면 그것이 바로 프로그램이다 !
컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
운영체제로부터 시스템 자원(ex. CPU, 메모리 영역 등)을 할당받고 실행된 상태의 프로그램의 인스턴스
프로그램이 메모리에 올라가서 OS(운영체제)로부터 CPU를 할당받고 프로그램이 실행되는 상태
각 프로세스는 각각 독립된 메모리 영역을 할당받는다.
프로그램 별로 실행될 때 (Code, Data, Stack, Heap)에 대한 메모리 영역이 할당되는 것이다.
각 프로레스는 별도의 주소 공간에서 실행되므로 각각의 변수 등에 접근할 수 없다.
다른 프로세스의 자원에 접근하기 위해서는 IPC(Inter Process Communication)을 사용해야함
Inter Process Communication
- PIPE
- Socket
- Semaphore
etc
프로세스 내에서 실행되는 여러 흐름의 단위
스레드는 Process에서 code, data, heap 영역은 공유하고
Stack만 각각 할당받는다.
따라서 한 프로세스 내에서 여러 스레드가 있을 때,
스레드1이 프로세스의 자원을 변경하면 다른 스레드들도 그 변경사항을 확인할 수 있다.
ex. pipex, minishell 에서 우리는 멀티 프로세싱을 통해 작업을 수행한다.
Context Switch
운영 체제는 한정된 CPU 자원을 할당하는 Scheduler를 통해 여러 프로세스가 CPU를 효율적으로 사용할 수 있도록 한다.
프로세스 A가 CPU를 점유 중일 때, 다른 프로세스 B가 CPU를 사용할 수 있도록 하기 위해, 이전 프로세스의 상태를 저장하고 새 프로세스의 상태를 적재한다.
이 때, 이전 프로세스의 상태 저장 및 새 프로세스 상태 적재가 너무 자주 일어나게 되면 성능 저하가 될 수 있다.
🦋 Philosophers repo address
https://github.com/kyj93790/42-cursus/tree/master/Philosophers
참고 사이트