----OS-----
[A프로그램], [B 프로그램] , [C 프로그램]
운영체제 위에 3개의 프로세스가 동작하고 있다.
각각의 프로세스는 메모리 위에서 서로 독립적으로 실행이 된다.
A 프로세스가 문제가 생긴다면 A프로세스만 죽는다.
ex) 안드로이드 휴대폰 에서 음악재생 프로그램에 문제가 생겨서 죽어도 카톡 프로그램엔 영향이 없다.
각각의 프로세스는 저마다 리소스 자원들이 정해져 있다.
즉 프로세스 마다 할당된 메모리나 데이터들이 저장되어 있다.
Code : 프로그램을 실행하기 위한 코드
Stack : 함수들이 어떤 순서로 실행되어야 하는지 이 함수가 끝나면 어디로 가야하는지에 대한 정보를 저장하고 있다.
Heap : 동적으로 할당된 변수를 저장
Data : 전역 변수나 정적 변수
동적 변수와 전역 변수?
c 언어 기준
- 기본적인 동적(dynamic) 변수로써 변수 선언과 동시에 메모리에 할당되며 변수 사용이 모두 끝남과 동시에 메모리가 해제
- 정적(static) 변수는 전역변수와 동일하게 컴파일시 메모리에 할당되며, 프로그램 종료시 메모리가 해제된다.
- 정적 변수는 전역변수처럼 변수의 범위를 벗어나는 경우에도 값을 유지하는 속성을 가지고 있다.
쓰레드는 한 프로세스 안에서 여러 개가 동작할 수 있다.
쓰레드는 각각 저마다 해야 되는 업무를 배정받는다.
쓰레드들마다 자신의 역할을 수행한다.
쓰레드는 자신들이 해야 하는 일(함수)호출을 기억해야 된다.
함수호출을 기억해야 되기 때문에 쓰레드마다 스택이 할당이 되어져 있다.
음악을 들으면서 사진 편집을 동시에 제공하는 어플이 있다.
음악재생 쓰레드
편집 쓰레드
서버에서 데이터를 받아와서 뿌려주는 쓰레드
결국은 한 프로그램을 위헤서 일해야 되므로 프로세스에 지정된 코드와 데이터 힙들을 공통적으로 접근한다.
공통적으로 접근해서 공통적으로 업데이트가 가능하다.
쓰레드들은 동시다발적으로 발생할 수 있기 때문에 프로세스가 더 효율적으로 일을 할 수 있도록 도움을 준다.
프로세스가 하나의 일만 한다면 음악을 듣는 동안 사진 편집은 불가능.
쓰레드는 일을 수행할 때 어디에서부터 어디까지 일을 했는지 어디로 가야하는지 일에 흐름을 기억할 수 있는 고유의 스택이 지정되어져 있다.
데이터, 코드, 힙 같은 공통적인 데이터 리소스는 프로세스 에 있다
때문에 쓰레드들은 프로세스에 공통적으로 할당된 리소스에 동시로 접속해서 동시로 업데이트 해야 되므로 서로 공유하면서 사용한다.
정리
프로세스 안에는 쓰레드가 존재한다.
쓰레드는 한 프로세스 안에서 여러 개가 동작할 수 있다.
쓰레드는 가각 저마다 해야 되는 역할을 수행한다.
쓰레드는 자신들이 해야하는 일을 기억해야 하기 때문에 쓰레드마다 스택이 할당되어져 있다.
자기가 어디에서부터 어디까지 일을 했는지 어디로가야하는지 흐름을 기억할 수 있는 고유 스택이 지정되어져 있고
데이터, 코드, 힙 같은 공통적인 데이터리소스는 프로세스에 있다.
때문에 쓰레드들은 프로세스에 공통적으로 할당된 리소스에 동시로 접속해서 동시로 업데이트 해야하므로 서로 공유하면서 사용한다.