>
글, 사진 출처가 적혀있습니다. 더 자세한 내용은 링크로 들어가주세요.`
-----------
| Stack | -> 호출된 함수, 지역변수 등 임시 데이터
-----------
| Heap | -> 동적으로 생긴 데이터. 예) new Object(), Kyu()
-----------
| Data | -> 전역변수. 예) static 변수, global 변수
-----------
| Code | -> 프로그램의 코드
-----------
두 프로세스 P0과 P1이 있다고 가정하자. P0은 Running(실행중)인 상태, P1은 Ready(대기) 상태다. 이 상태에서 interrupt 또는 시스템 콜이 발생하면 P0은 Running이 아닌 Ready 상태로 전환된다. 추후 복원될 P0을 위해 해당 프로세스 정보를 PCB에 담아 저장한다. P1은 이전에 저장한 PCB로부터 상태를 복원하여 작업을 계속 수행한다. P1도 어느 시점이 되면 다시 Ready 상태가 되어 PCB에 상태를 담아 저장하고, P0이 PCB로부터 복원되어 작업을 계속 수행할 것이다.
이 작업들이 계속 해서 반복되는데, 이러한 일련과정들을 Context Switching이라고 한다. Context Switching도 메모리에 I/O를 하는 작업이기 때문에 실행되는 프로세스의 수가 많거나, Context Switching의 빈번한 발생은 Overhead를 발생시켜 성능 저하를 결과를 가져온다.
🖼그림&📄글 출처 링크
프로세스 제어 블록(Process Control Block, 줄여서 PCB)은 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영 체제 커널의 자료 구조이다. 프로세스 상태의 이미지에 있는 프로세스와 PCB의 관계를 잘 살펴보자.
일반적으로 멀티스레드르 사용하는 이유는 사용자와 상호작용하는 애플리케이션에서 단일 스레드로 Network 또는 DB 와 같은 긴 작업(Long-running task) 을 수행하는 경우 해당 작업을 처리하는 동안 사용자와 상호작용이 불능인 상태가 될 수 있기 때문이다.
📄글 출처
응답 시간 단축 및 처리 비용 감소
프로세스간의 Context Switching은 느린 반면 쓰레드간의 Context Switching 은 빠른데, 그 이유는 Context Switching 시 스레드는 Stack 영역만 처리하면 되기 때문이다.
멀티 스레드의 안정성 문제
여러 개의 스레드가 동일한 데이터 공간(Critical Section)을 공유하면서 이들을 수정한다는 점에 필연적으로 생기는 문제이다. 멀티 프로세스의 프로그램은 문제가 생기면 해당 프로세스가 중단되거나 중단 시키고 다시 시작 하면된다. 하지만 멀티 스레드 방식의 프로그램에서는 하나의 스레드가 자신이 사용하던 데이터 공간을 망가뜨린다면, 해당 데이터 공간을 공유하는 모든 스레드를 망가뜨릴 수 있다.
Critical Section: 임계 구역(critical section) 또는 공유변수 영역은 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부를 말한다.
📄글 출처
질문답변
좀비프로세스, 프로세스는 항상 부모가 있는데 자식이 매트릭스처럼 변신해있다가 죽는다. 그러고나서 엄마 나먼저죽어 안녕~그러는데 자식프로세스의 시체를 수습하는게 부모의 책임이다. 청소부프로세스가있다. 모든프로세스의 조상인 init or System D or launch D 가 청소부역할을 하거나 운영체제에 따라다른데 전담청소부를 만든다.
waiting과 ready의 다른점은 waiting은 아직 ready되지 못하는거...공부할려고하는데 아직 공부안하는상태는 ready인데 밥먹거나 응가하는건 waiting 그런걸 인터럽트 됐다고 한다