-
프로세스 생성 원리
프로세스는 프로세스에 의해 만들어진다.
컴퓨터가 부팅이 되면 운영체제가 메모리에 올라오는데 운영체제가 처음으로 수행하는 일 중에 하나는 최초의 프로세스를 생성하는 것이다.
처음 만들어진 프로세스가 다른 프로세스를 만들고 그 프로세스가 또 다른 프로세스를 만드는 과정을 반복한다.
최초의 프로세스는 Init이다. init은 UNIX 운영체제 기준이다.
여러 다른 프로세스들이 생성되면 위 그림처럼 트리로 나타낼 수 있다.
프로세스는 각각 고유의 번호를 갖는데 이를 PID(Process Identifirer)라고 한다.
Process 생성하기 위해서는 System Call( Fork() ) -> Process 내에서 File 실행 System call( exec() ) -> Process 종료 및 resource 회수 System call ( exit() )
Thread
컴퓨터 분야에서 실행되는 스레드는 일반적으로 운영체제의 일부인 스케줄러에 의해 독립적으로 관리 될 수 있는 프로그래밍 된 명령어의 가장 작은 시퀀스다.
메모리 관점에서의 Thread
Thread는 Stack영역만 각각 할당 받고 나머지 Memory 영역( Data , Code , Heap ) 은 서로 공유한다.
Multi Process vs Multi Thread
멀티 프로세스
멀티 프로세스란 하나의 애플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.
- 안정성이 좋다. 여러개의 자식 프로세스 중 하나에 문제가 발생해도, 다른 자식 프로세스에 영향이 확산되지 않는다.
- 프로세스 간 통신을 하기 위해서는 IPC를 통해야 한다.
- 메모리가 독립된 영역임으로 Context Switching이 발생하면서 매번 캐시 메모리를 Reload 해주어야 하기 때문에 Overhead 발생 -> 메모리 사용량이 많다.
- 각 프로세스들이 독립적으로 동작하며 자원의 서로 다르게 할당된다.
Multi Thread
멀티 스레드란 하나의 애플리케이션을 여러 개의 스레드로 구성하여 하나의 스레드가 하나의 작업을 처리하도록 하는 것이다.
이러한 점 때문에 Web Server에서 주로 사용된다.- 자원 공유가 쉽다. 스레드들은 부모 프로세스의 자원과 메모리를 공유 할 수 있다.
- 응답성이 좋다. 프로그램의 일부분(자식 스레드)이 오류 또는 긴 작업으로 인해 중단되어도 프로그램이 계속 적으로 수행된다.
- 구현 및 테스트, 디버깅이 어렵다
- 동기화 그리고 교착상태가 발생하지 않도록 주의해야 한다.
- 자식 스레드 중 하나에 문제가 생긴경우 전체 프로세스에 영향을 줄 수 있다.
- 여러 개의 스레드가 동일한 데이터 공간(Critical Section)을 공유하면서 문제 발생 가능
- CPU가 하나에서 여러 쓰레드가 스위칭에 의해 동시에 수행되는 효과를 concurrent
- 여러 CPU에서 여러 쓰레드가 실제로 동시에 수행되는 것은 simultaneous라고 한다.
* Critical Section: 임계 구역(critical section) 또는 공유변수 영역은 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부를 말한다.
Reference
https://charlezz.medium.com/process%EC%99%80-thread-%EC%9D%B4%EC%95%BC%EA%B8%B0-5b96d0d43e37
'CS > OS' 카테고리의 다른 글
XV6 - 이론 정리_1 (0) 2022.05.13 3. Dual Mode / System Call / OS Service (0) 2022.05.11 2.OS 역사 (0) 2022.05.06 1. 운영체제(OS)란? (0) 2022.05.06 4. Process (0) 2022.04.27