Process
- 프로세스는 "실행 중인 프로그램"
- 하나의 프로그램이 여러 개의 프로세스가 될 수 있다.
- stack: 지역 변수 / 매개변수 저장
- heap: 동적 메모리 할당
- data: 전역 변수 / static 변수
- code: 프로그램의 코드 / 컴파일된 기계어
Multi Process
- 여러 프로세스가 동시 실행
- concurrency(동시성): 1 CPU / 시분할 시스템
- parallelism(병렬성): N CPU
메모리 관리
메모리에 여러 개의 프로세스가 탑재된 경우, 운영체제는 각각의 프로세스가 서로를 침범하지 않도록 관리해준다.
3개의 프로세스 실행 & PC Register가 그림과 같은 순서로 동작한다고 하면 아래와 같이 프로세스가 진행된다.
context
프로세스 2에서 프로세스 1로 넘어갈 때, 마지막 연산 수행 위치를 알아야 한다. 그래야 그 위치부터 다시 연산을 재개할 수 있기 때문이다. 이 때 필요한 정보를 context라고 부른다. 게임의 세이브 기능과 비슷한 역할을 한다. 이는 PCB(Process Control Block)에 저장된다.
PCB
- 프로세스를 표현한 자료구조
- context를 파악하기 위해 존재
- 프로세스의 중요한 정보를 담고 있기에 일반 사용자 접근 제한
- 따라서 커널 스택에 위치
Context Switch
-
Context switch란 한 프로세스에서 다른 프로세스로 CPU 제어권을 넘겨주는 것
-
Process 연산 진행도에서 1에서 2, 2에서 3 ,..., 4에서 5 모든 과정들이 context switch
IPC
Inter Process Communication
프로세스 간 자원을 주고 받기 위한 방법
큰 분류로 message passing / shared memory로 구분
shared memory
- 서로 다른 프로세스일지라도 메모리를 공유하는 메커니즘
- 한 번 공유 메모리가 구축되고 나면 커널의 도움 없이도 메모리 접근이 가능하기 때문에 통신 속도가 빠름
- <일관성 문제> 발생 가능
ex)
message passing
커널을 통해 메시지 전달
- shared memory에 비해 통신 속도 느림
- <일관성 문제> 걱정 안 해도 됨
- 통신 속도가 느리므로 데이터 양이 적을 때 적합
스레드는 IPC일까 아닐까?
- 스레드는 프로세스가 아니기 때문에 엄밀히 말하면 IPC의 정의에 어긋난다.
- 하지만 <code/data/heap을 공유한다는 shared memory 특성 / 각 스레드 별로 CPU를 할당받는 점> 때문에 IPC로 간주한다.
Multi Thread
- thread는 한 process 내에서 실행되는 동작(기능 function)의 단위입니다. 각 thread는 속해있는 process의 Stack 메모리를 제외한 나머지 memory 영역을 공유할 수 있습니다.
Multi thread란 하나의 process가 동시에 여러개의 일을 수행할수 있도록 해주는 것입니다. 즉, 하나의 process에서(실행이 된 하나의 program에서) 여러 작업을 병렬로 처리하기 위해 multi thread를 사용합니다. multi thread에서는 한 process 내에 여러 개의 thread가 있고, 각 thread들은 Stack 메모리를 제외한 나머지 영역(Code, Data, Heap) 영역을 공유하게 됩니다.
- 프로세스: 카카오톡,유튜브,LOL,크롬
- 스레드: 채팅,영상,음향 등
- 스레드는 프로세스에 포함 관계
유튜브 프로세스 실행 과정처럼 context switch는 스레드에도 적용
스레드 특징
메모리에 탑재된 유튜브 프로세스를 표현하면 위와 같다.
- 스레드들은 code/data/heap을 공유하며 stack은 별도
- 다만, code에서 pc는 별도 존재
- 왜냐하면 스레드 간에도 context switch 발생하기 때문
왜 스레드는 stack을 공유하지 않을까?
스레드는 프로세스 내에서 독립적인 기능을 수행하며 따라서 독립적인 함수 호출이 필요
스택 영역은 지역변수와 함수에서 쓰이는 매개변수가 저장되는 영역인데 이를 공유하게 되면 독립적인 함수 호출 불가(전역 변수와 다를 바가 없어짐)
따라서 각 함수의 변수들을 따로 저장하기 위해 스택 별도 관리
프로세스 vs 스레드
프로세스는 작업의 단위, 스레드는 실행의 단위
프로세스와 스레드는 일대다 관계
Multi Process vs Multi Thread
- multi thread는 multi process보다 적은 메모리 공간을 차지하고
Context Switching
이 빠릅니다.
- multi process는 multi thread보다 많은 메모리공간과 CPU 시간을 차지합니다.
- multi thread는 동기화 문제와 하나의 thread 장애로 전체 thread가 종료될 위험이 있습니다.
- multi process는 하나의 process가 죽더라도 다른 process에 영향을 주지 않아 안정성이 높습니다.
참고 자료
이대 운영체제 공개강의 - 반효경