6. 프로세스 개념
프로세스란?
간단히 말해, 실행중인 프로그램
Mac OS에서 프로세스 보기 : Spotlight에서 [활성 상태 보기]를 입력
CPU를 점유하는 친구들
메모리가 어떻게 사용되고있나
각 프로세스가 디스크에서 읽고 쓴 데이터
멜론, 구글 크롬, 카카오톡처럼 현재 돌아가는 프로그램이 프로세스다.
CPU는 이런 프로세스들이 구동되도록 도와주는 프로세서
그런데, 프로그램 = 프로세스가 아니다.
그 차이는, 실행했냐 아니냐?
프로그램은 생명이 없다. 그냥 정적인 데이터
이런 프로그램을 메모리에 적재하고 실행할때 프로세스가 된다.
즉 프로세스는 실행중인 프로그램.
CPU는 하나인데, 어떻게 우린 여러가지 작업을 한번에 수행할 수 있을까?
위의 프로세스들을 보면, 나는 지금 멜론을 틀으며 음악을 듣고, 카카오톡도 하면서 구글 크롬으로 블로그를 작성하고 있다.
결론은 CPU는 하나의 일만 수행하고 있지만, 빠르게 프로세스를 교체하면서 여러 작업을 동시에 하는 것 처럼 보여지는 것이다. 이런 프로세스 스케줄링에 대해선 다음에 얘기하고, 지금은 프로세스 상태에 대해서 얘기할 것이다.
프로세스 상태
NEW : 프로세스가 생성 중이다. 카톡 킴
READY : 생성하고나서, 실행할 준비 완료했다. 여차하면 바로 실행
RUNNING : 프로세스 실행중
WAITING(BLOCKED) : 현재 실행중인데, I/O나 어떤 이벤트 발생하면, 잠시 물러난다.
TERMINATED : 종료됐다.
프로세스 구조
메모리 상에 프로세스는 다음과 같이 올라간다.
만약 우리가 코드를 짜고 프로그램을 실행했다고 생각해보자...
TEXT : CPU에서 실행될 명령어들은 여기에 있다. (코드)
DATA : 전역 변수가 들어간다.
위 두개는 크기가 변하지 않는다.
HEAP : new나 malloc처럼, 동적 할당해준 친구들이
여기 들어간다.그래서 가변적이다.
STACK : 여긴 지역 변수가 들어간다. 함수가 끝나면 지역 변수도
사라지니까 얘도 늘어났다 줄어들다 그런다.