-
[OS] - Process vs ThreadCS/면접준비 2022. 9. 29. 15:23
Process
Program을 Memory 상에서 실행 중인 작업
- Process마다 최소 1개의 Thread가 존재한다. ( Main Thread )
- Process는 각각의 Process마다 별도의 주소 공간을 할당한다. ( 독립적 )
Memory
1. Code
- 코드 자체를 구성하는 Memory
2. Data
- static , global , 배열 등
- Init된 Data들은 Data Area ( static a = 10 )
- Init되지 않은 Data들은 BSS Area ( static b )
- global = life cycle = Program이 죽을 때 까지 / 다른 File에서 접근하여 사용 가능
- static = life cycle = Program이 죽을 때 까지 / 다른 File 및 함수에서 접근하여 사용 불가
- Init하지 않은 Static 변수는 사용하지 않는다면 Memory에 올라오지 않는다.
- Init을 처리하여 주지 않는다면 이전 flow에서 사용했던 변수 값이 사용될 수 있다(Middleware에 의한 Process가 통제 )
3. Heap
- 동적 할당 시 사용 ( new() , malloc() )
4. Stack
- 지역변수 , Paramenter , Return ( 임시 메모리 영역 )
Thread
Process 안에서 실행되는 여러 흐름 단위
- Thread는 Stack영역만 별도로 할당 받고 나머지 Data, Code, Heap 영역은 공유한다.
- 하나의 Process가 생성되면 최소 하나의 Thread 생성
- Process는 자신만의 Resource,space을 할당 받아 사용하는 반면 Thread는 Resource, space를 Share하면서 사용한다.
Multi Process
하나의 Program은 Multi Process로 구성하여 각 Process가 병렬적으로 작업 수행
- 안정성 ( 별도의 Memory 공간을 할당 받기 때문에 )
- 독립된 Memory 공간으로 인하여 작업량이 많을 수록 Overhead가 발생한다.
- Context Switching으로 인한 성능 저하
Context Swithcing
- Process의 state 정보 저장 및 복원하는 과정
- Process Run -> wait -> Queue에 대기 중인 Process를 Run하기 위해 이전에 상태를 복구하는 과정
- Process는 각 독립된 영역의 메모리 영역을 할당 받기 때문에 Cache Memory 초기화가 된다면, Overhead가 발생한다.
Multi Thread
하나의 Program에서 여러 Thread를 구성해 Thread가 하나의 작업을 처리
- Shared Memory를 통해 다수의 작업을 동시에 처리
- Shared Memory만큼 time, resoure 손실이 감소한다.
- 전역, 전역 변수를 통하여 Shared 가능하다.
- 안정성 문제 -> 하나의 Thread가 data를 망치게 된다면 나머지도 영향을 받는다.
- 하지만, 이를 막기 위하여 Critical Section이 나오게 되었고 Shared Memory를 변경하기 위해서는 여러 조건이 필요하다.
- Mutual Exclusion = 하나의 Process가 임계구역을 수행하고 있다면, 다른 누구도 수행 불가
- Progress = Critical Section을 수행하는 Process가 없다면, 어떤 Process라도 들어가서 resource를 수행할 수 있다.
- Bounded waiting = Mutual Exclusion으로 인해 무한정 대기하지 않아야 한다.
'CS > 면접준비' 카테고리의 다른 글
[OS] - System call / PCB (0) 2022.09.29 [OS] - Interrupt (0) 2022.09.29 [Database] - Join (1) 2022.09.21 [Database] - Key (0) 2022.09.20 캐시 메모리 (1) 2022.09.20