저장공간(HDD)에 저장되어 있는 코드와 리소스 등이 집합되어 있는 파일
- 프로그램이 실행되어 메모리에 올라간 것
- 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)
- 운영체제로부터 시스템 자원(CPU, 주소 공간, 메모리 영역(Code, Data, Stack, Heap))을 할당받아 작업한다.
프로그램 실행 파일 실행
디스크에서 해당 프로그램을 실행하여 프로세스를 사용자 메모리 공간에 비치하고,
2-1. 해당 프로세스의 메타데이터를 담은 PCB를 만들어 커널 메모리 공간에 배치
운영 체제의 프로세스 스케줄러는 PCB를 읽으면서, 높은 우선순위가 주어진 프로세스를 적절한 순위에 맞춰 준비큐에 배치
기존에 실행중이던 프로세스의 시간할당량이 끝나면 CPU를 실행하고자 하는 프로세스에 할당하여 실행
프로그램 실행
프로세스가 할당받은 자원을 이용하는 실행의 단위
하나의 프로그램에서 복잡한 동시 작업을 요구할 경우, 여러개의 프로세스가 동시 작업을 수행할 경우 각 프로세스의 메모리를 모두 공유해야 하며 Context Switching 부담이 상당해진다.
하나의 프로세스에서 여러개의 스레드가 메모리를 공유하여 작동할 수 있으며, 그래서 생성과 속도가 빠르고, 적은 메모리를 점유하며 정보 교환이 쉽고 Context Switching 부하가 적다.
→ 멀티 스레드를 사용하는 이유
자원 선점과 자원 공유(동기화)의 문제가 발생한다. 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다.
→ 멀티 프로세스를 사용하는 이유
프로세스의 상태 정보를 저장하고 복원하는 일련의 과정
CPU에서는 한 번에 하나의 프로세스만 실행 가능 하므로, 여러 프로세스를 실행할 경우 각각 하나씩 돌아가면서 작업을 하게 된다.
이 경우, 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스를 복구하는데 이 과정을 Context Switching이라고 한다.
두 개 이상 다수의 프로세서(CPU)가 협력적으로 하나 이상의 작업(Task)을 동시에 처리하는 것 (병렬처리)
각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우 사용한다.
하나의 프로세스를 여러 개의 스레드로 구성하고 각 스레드로 하여금 자원을 공유하며 작업을 처리하는 것
프로세스 간의 통신(IPC)보다 스레드 간의 통신의 비용이 적으므로 작업들 간의 통신의 부담이 줄어든다.
프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
Stack을 제외한 모든 메모리를 공유하기 때문에 global(전역), static(정적) 변수 그리고 new, malloc에 의한 모든 자료를 공유할 수가 있다.
주의점 : 다만, 스레드 간의 자원 공유는 전역 변수를 이용하므로 함께 상용할 때 충돌이 발생할 수 있다.
https://namu.wiki/w/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4
https://mamu2830.blogspot.com/2020/02/blog-post_18.html
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
https://you9010.tistory.com/136
https://gyoogle.dev/blog/computer-science/operating-system/Process%20vs%20Thread.html
https://livenow14.tistory.com/67