프로세스
프로그램
IO(input/output)
-한 번에 하나의 프로그램만 실행됨.
( 다른 프로그램을 실행시키기 위해서는 현재 진행중인 프로그램을 종료하고 실행시켜야 함)
-CPU 사용률이 좋지 않다라는 단점이 존재
(실행중에 있는 프로그램이 다른 작업을 하고 있는 동안 CPU는 아무것도 하지 못하고 쉬고있음)
이에 대한 해결책으로 멀티프로그래밍이 등장.
-> 여러 개의 프로세스를 메모리에 올려놓고 CPU를 점유하고 있는 프로세스가 다른작업을 하게 된다면, 다른 프로세스가 CPU를 점유해서 사용한다.
(CPU 사용률의 극대화 목적)
멀티프로그래밍의 단점
-> 한 프로세스의 CPU의 점유시간이 길어지면 다른 프로세스는 계속 대기하는 상황이 존재
-멀티프로그래밍의 단점에 대한 해결책으로 멀티태스킹 개념 등장
여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 cpu time을 나눠 갖는 것
-> 프로세스가 CPU를 점유하고 사용할 때, 아주 짧은 시간(Quantum)의 시간만 CPU에서 실행되도록 하자.
-> 일반 사용자에게는 즉각적인 응답을 받기 때문에 , 동시에 여러 프로세스가 실행되는 것처럼 느껴진다.
(프로세스 응답시간의 최소화가 목적)
멀티태스킹의 단점
하나의 프로세스가 동시에 여러 작업을 수행하지는 못함.
->여러 개의 프로세스를 만들어서 멀티태스킹 시키면 위의 말한 내용을 수행할 수 있는 것 아닌가? 라고 생각할 수 있지만 많은 단점이 존재한다.
컨텍스트 스위칭의 많은 비용이 든다.
프로세스간의 데이터 공유가 어렵다. (프로세스는 독립적 메모리 공간을 갖기 때문)
CPU의 듀얼 코어 기능을 제대로 활용하지 못함.(왜??)
*cf) context Swtiching (컨텍스트 스위칭) : cpu 점유하고 있는 프로세스를 변경하는 작업
-> 위의 단점들을 보안하기 위해 나온 것이 Thread (한 프로세스 내에서 여러개의 작업을 수행하는 역할을 함)
프로세스의 메모리 구조 비교 (싱글 스레드 vs 멀티 스레드)
멀티 스레드 메모리 특징
1. 스레드들은 고유한 Stack 영역이 존재한다.
2. 같은 프로세스들의 스레드들 간의 heap 영역 메모리를 공유한다.
3. 스레드들만의 프로그램 카운터가 존재.
#cf) 프로그램 카운터 : 다음 차례로 실행되어야 하는 명령어가 들어있는 주소를 가르킴.
https://www.youtube.com/watch?v=QmtYKZC0lMU&list=PLcXyemr8ZeoT-_8yBc_p_lVwRRqUaN8ET&index=3