프로세스와 스레드에 대해 알아보자!
우선 이번 글은 프로세스에 대해 알아보고, 다음에 스레드, 프로세스와 스레드의 차이를 포스팅할 것이다.
작업
이라고도 부른다. (작업관리자에 들어가면 프로세스라고 써있는걸 볼 수 있음!) 하나의 프로세서(CPU)는 한 순간 하나의 프로세스만 실행할 수 있다!
그런데 컴퓨터를 쓰다보면 우리는 여러개의 프로세스를 동시에 실행한다.
음악을 들으며~ 문서작업하다가~ 카카오톡도 하고~ 어떻게 동시에 가능할까?
==> 하나의 프로세서가 빠르게 프로세스들을 왔다리 갔다리 하는 것이다! --> 이것이 바로멀티태스킹
하나의 작업을 여러개의 프로세서(CPU)가 하는 것!(듀얼코어..쿼드코어..등등) --> 이것은 멀티프로세싱
대기상태와 준비상태의 차이는 무엇일까?
예를 들어 롤을 실행시켰다. 프로세스는 실행상태이다.
롤이 실행되고 나서 로그인창이 뜨게된다.
로그인을 하기 전까지 롤은 그 다음으로 넘어가지 않는다.
이때, 프로세스는 대기상태가 된다. 로그인 입력을 받기 전까지 계속 대기상태가 되는 것!
예를 들어 현재 실행 중인 프로세스가 있다.
그런데 우선순위가 먼저인 프로세스가 들어왔다.
지금 실행하는 프로세스를 실행상태에서 준비상태로 변경하고,
우선순위가 높은(현재 준비상태) 프로세스를 실행상태로 변경한다.
이것이 바로 문맥교환!
int a = 5;
는 초기화 되었으므로 DATA 영역에 저장된다.new
를 사용하여 객체를 생성하면, 객체가 저장되는 영역이다. 위의 사진에서 Heap 영역과 Stack 영역의 화살표를 볼 수 있다.
이는 힙 영역은 위에서 아래로 저장되고, 스택영역은 밑에서 위로 저장된다.
이와 같은 방식으로, 힙이 계속 내려가 스택영역을 침범하면 HeapOverflow!
스택영역이 계속 올라가, 힙 영역을 침범하면 StackOverflow!