주제
프로세스와 스레드
내용
용어정리
- 실행 단위
- CPU Core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념
- 동시성
- 한 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것
- Context Switching
- 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전의 프로세스 상태를 보관하고 새로운 프로세스의 상태를 적재하는 작업
프로그램
- 어떤 작업을 위해 운영체제 위에서 실행할 수 있는 파일
- 피자의 레시피 ⇒ 코드 파일
프로세서
- 프로세스가 동작될 수 있도록 하는 하드웨어 = cpu
- 동작 : 프로그램의 자원들이 메모리에 올라오고, 실행되어야 할 코드의 메모리 주소를 cpu의 레지스터로 올리는 것
- 한 순간에 하나의 프로세스만 실행할 수 있다.
- 운영체제가 짧은 시간에 실행할 프로세스를 교체하고 있기 때문에, 동시에 여러 개의 작업이 실행되고 있다고 느낀다.
- 동시에 실행되는 것처럼 보이기 위해 실행 단위는 시분할로 cpu를 점유하며 context switching을 한다.
프로세스
- 운영체제 위에서 실행중인 프로그램
- 피자 ⇒ 카카오톡, 인텔리제이, 슬랙 …
- PCB (Process Control Block) ⇒ 프로세스를 제어하기 위한 정보 모음
- 프로세스 식별자(Process Id)
- 프로세스 상태
- 다음에 실행할 명령어의 주소
- 이전에 작업하던 작업 내용 (레지스터)
- CPU 스케줄링 정보 (우선순위, 최종 실행 시각, CPU 점유시간 … )
- 프로세스의 주소 공간 …
- 구조
- Stack : 호출된 함수, 지역변수 등 임시 데이터
- Heap : 동적으로 생긴 데이터 ex) new Object(), malloc()
- Data : 전역변수 ex) static 변수, global 변수
- Code : 프로그램의 코드
스레드
- 스레드는 한 프로세스 내에서 나뉘어진 하나 이상의 실행 단위
한 어플리케이션에 대한 작업을 동시에 하기 위한 방법
멀티 프로세스
- cpu가 짧은 텀으로 변경된다.
- 독립적인 메모리를 가지고 있다.
- 코어는 실행중인 프로세스의 메모리를 로딩하는 과정을 가지는데
- 1번 프로세스의 메모리를 로딩해서 가지고 있다가, 2번 프로세스로 넘어갈 때 기존의 프로세스 메모리를 내리고 또다시 새로운 메모리를 적재하는 작업이 필요하다. ⇒ 비효율적
- 같은 작업을 하기위해 만든 프로세스이지만 다른 프로세스의 정보를 이용하기 위해서는 통신이 필요하다. ⇒ IPC 통신
- 여러개의 프로세스 중 하나에 문제가 발생해도 다른 프로세스에 영향이 미치지 않는다.
멀티 스레드
- 한 프로세스 내에서 구분 지어지는 실행 단위
- 실행단위 자체가 스레드가 된다.
- 자원을 공유한다. (Code, Data, Heap)
- 프로세스를 할당하는 것 보다 비용이 적다.
- 스레드 중 하나에 문제가 생긴 경우 전체 프로세스에 영향을 줄 수 있다.