프로세스는 운영체제로부터 자원을 할당받은 단위이고, 스레드는 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
프로그램이란
프로그램이란, 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태. 엑셀 프로그램을 아직 실행하지 않았다면 파일 그 자체로 남아있다. 코드 덩어리
아직 운영체제가 프로그램에게 독립적인 메모리 공간을 할당해주지 않음.
모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당해줘야 실행할 수 있음
프로세스란
프로그램을 메모리에 할당하여 실행한 상태
프로그램을 실행하면 해당 파일은 컴퓨터 메모리에 올라가게 된다. 이 상태의 프로그램을 프로세스라고 한다
스케줄링 단계에서 작업이라고 생각 가능
스레드
스레드는 프로세스의 코드에 정의된 절차에 따라 실행되는 특정한 수행 경로. 프로세스 실행 흐름의 일부라고 생각할 수 있다. CPU입장의 최소 작업 단위
스레드는 프로세스 안에 포함되어 있다
과거 프로그램은 실행할 때 실행 시작부터 실행 끝까지 프로세스 하나만을 사용해서 진행했다.하지만 시간이 흐를수록 스프로그램이 복잡해지고, 프로세스 하나만을 사용해서 프로그램 실행하기 벅차게 됨
한 프로그램을 위한 여러 개의 프로세스를 만드는 방법
-> OS는 안정성을 위해서 프로세스마다 자신에게 할당된 메모리 내의 정보에만 접근할 수 있도록 제약둠, 벗어나는 정보에 접근하면 오류가 발생
프로세스와는 다른 더 작은 실행 단위의 개념이 필요하게 되었음
스레드끼리는 자원을 공유함. 프로세스 실행 흐름의 일부
스레드의 동작 방식
프로세스가 할당받은 메모리 영역 내에서 별도의 스택만을 할당받고, 나머지 메모리는 서로 공유한다.
프로세스가 할당받은 메모리영역 내에서 Stack 형식으로 할당된 메모리 영역은 따로 할당받고, 나머지 Code, Data, Heap 형식으로 할당된 메모리 여영ㄱ을 공유한다.
프로세스와 스레드의 차이점
프로세스는 한 프로세스에 오류가 발생하여 프로세스가 강제로 종료된다면, 다른 프로세스에게 영향이 없다.
스레드의 경우 Code/Data/Heap 메모리 영역의 내용을 공유하기 때문에 어떤 스레드 하나에서 오류가 발생한다면 같은 프로세스 내의 다른 스레도 모두가 강제종료됨
운영체제 관점: 프로세스가 최소 작업의 단위
CPU 관점: 스레드가 최소 작업의 단위
프로세스는 하나 이상의 스레드를 가진다.
멀티태스킹, 멀티스레드란
멀티태스킹이란 하나의 운영체제 안에서 여러 프로세스가 실행되는 것(동시 실행처럼 보임)
멀티스레드는 하나의 프로세스가 여러 작업을 여러 스레드를 사용하여 동시에 처리하는 것. 멀티태스킹보다 자원을 아낌 + 동기화문제 처리 필요
멀티스레드의 장점
- Context-Switching 할 때 공유하고 있는 메모리만큼의 메모리 자원을 아낄 수 ㅇ
- 스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유함 -> 통신의 부담이 적어 응답시간이 빠름
멀티스레드의 단점
- 스레드 하나가 프로세스 내 자원을 망치면 모든 프로세스가 종료됨
- 자원을 공유함 -> 동기화 문제 필연적 발생 <Synchronization Issue>
프로그래밍 시 멀티스레드를 사용하려면 신중해야함
다른 프로세스 정보에 접근하고싶다
프로세스 간 정보공유 방법
(이 경우 단순히 CPU 레지스터 교체뿐만 아니라 RAM과 CPU 사이의 캐시 메모리까지 초기화됨 -> 자원부담이 크다)
- IPC(Inter-Process Communication) 사용
- LPC(Local inter-Process Communication) 사용
- 별도로 공유 메모리를 만들어서 정보를 주고받도록 설정
참고자료
https://fastcampus.co.kr/media_branding_cs