프로세스는 "실행 중인 프로그램"을 의미한다!
프로그램이 실행 중이라는 것 = 보조기억장치에 저장되어 있던 프로그램을 주기억장치에 적재하여, CPU가 실행하고 있거나 실행 예정인 것
운영체제가 프로세스를 제어하기 위해 정보를 저장해놓은 곳
PCB는 Context Switching 시 사용되는데, CPU 가 여러 프로세스를 빠르게 번갈아가며 작업하기 위해서는 프로세스에 대한 정보 및 상태를 저장/복원 할 필요가 있기 때문
❓Context Switching (문맥 교환)
*문맥 = 프로세스의 정보 및 상태 (PCB에 문맥을 저장하는 것)
하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전의 프로세스의 상태(문맥)를 보관하고 새로운 프로세스의 상태를 CPU에 적재하는 작업
하나의 CPU에서 여러 개의 프로세스가 동시에 수행되는 것처럼 보이는 이유는 문맥 교환이 빠르게 일어나고 있기 때문!
- 준비 큐(ReadyQueue) = CPU 할당을 대기 중인 프로세스
- 대기 큐(DeviceQueue) = 입출력 장치 할당을 대기 중인 프로세스
2→3 디스패치
ReadyQueue의 맨 앞에 있던 프로세스가 CPU를 점유하게 되는 것
3→2 Timer Runout
할당받은 CPU 시간이 초과되면, CPU 반납 후 다시 준비 상태로 전이됨
4→2 Wake Up
입출력이 완료되어 CPU 할당을 기다리는 상태
두 개 이상 다수의 프로세서(CPU)가 협력적으로 하나 이상의 작업(Task)을 동시에 처리하는 것(병렬처리)
프로세스 내에서 실제로 작업을 수행하는 주체를 의미함
스레드는 프로세스 내에서 독립된 Stack 영역을 할당받고, Code, Data, Heap 영역은 다른 스레드와 공유함
❓Stack 영역만 따로 할당받는 이유
스택은 함수 호출시 전달되는 인자, 복귀 주소값 및 지역변수 등을 저장하기 위해 사용되는 메모리 공간
각 스레드는 각각의 코드 및 실행 순서를 가질 수 있기 때문에, 스택 영역은 스레드마다 독립적으로 할당해야 함
PCB처럼 TCB는 각 스레드마다 운영체제에서 유지하는 스레드에 대한 정보를 담고 있음
CPU의 최대 활용을 위해 프로세스가 두 개 이상의 스레드를 동시에 실행하는 것
문맥 교환이 엄청 빠르게 일어나면서, 사용자의 시선에서는 스레드가 동시에 실행되는 것처럼 보임
멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없는 것
아래 세 가지를 통해 스레드 안전 상태인지 판단할 수 있음
상호 배제(Mutual Exclusion)
원자 연산(Atomic Operation)
스레드 로컬 저장소(TLS, Thread-Local Storage)
https://dololak.tistory.com/3
https://trumanfromkorea.tistory.com/51
https://80000coding.oopy.io/ef52431e-cf52-497b-824f-bcb365144c7a
https://ko.wikipedia.org/wiki/프로세스제어블록
https://ko.wikipedia.org/wiki/문맥_교환
https://velog.io/@mingadinga_1234/프로세스란-프로세스의-상태
https://enlqn1010.tistory.com/30
https://livenow14.tistory.com/67
https://show400035.tistory.com/170
https://velog.io/@nnnyeong/OS-프로세스와-스레드-Process-VS-Thread
https://en.wikipedia.org/wiki/Thread_control_block
https://velog.io/@gil0127/싱글스레드Single-thread-vs-멀티스레드-Multi-thread-t5gv4udj
https://mgyo.tistory.com/456
https://developer-ellen.tistory.com/205
https://inpa.tistory.com/entry/👩💻-프로세스-⚔️-쓰레드-차이#프로세스컨텍스트스위칭vs스레드컨텍스트스위칭
https://learn.microsoft.com/ko-kr/cpp/c-language/thread-local-storage?view=msvc-170
https://learn.microsoft.com/ko-kr/windows/win32/procthread/thread-local-storage