728x90
프로세스 & 스레드
- 프로세스 : 프로그램을 메모리 상에서 실행중인 작업
- 스레드 : 프로세스 안에서 실행되는 여러 흐름의 단위
- 기본적으로 프로세스마다 최소 1개의 스레드를 소유하고 있다.(메인 스레드 포함)
주소 공간
- 프로세스는 각각 별도의 주소공간을 할당한다.(독립적)
- Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령)
- Data : 전역변수, 정적변수, 배열 등
- 초기화 된 데이터는 data 영역에 저장된다.
- 초기화 되지 않은 데이터는 bss 영역에 저장된다.
- Heap : 동적 할당 시 사용한다.(new(), malloc() 등)
- Stack : 지역변수, 매개변수, 리턴 값(임시 메모리 영역)
- 스레드는 Stack만 따로 할당 받고 나머지 영역은 서로 공유한다.
- 하나의 프로세스가 생성될 떄, 기본적으로 하나의 스레드가 같이 생성된다.
- 프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하는데 반해, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용하는 차이가 존재한다.
멀티 프로세스
- 하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것이다.
- 장점
- 안정성(메모리 침범 문제를 OS 차원에서 해결해준다.)
- 단점
- 각각 독립된 메모리 영역을 갖고 있어, 작업량이 많을 수록 오버헤드가 많이 발생한다. Context Switching으로 인한 성능 저하가 있다.
문맥교환(Context Switching)
- 프로세스의 상태 정보를 저장하고 복원하는 일련의 과정을 뜻한다.
- 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 과정을 말한다.
- 프로세스는 각 독립된 메모리 영역을 할당받아 사용하므로, 캐시 메모리 초기화와 같은 무거운 작업이 진행되었을 때 오버헤드가 발생할 문제가 존재한다.
멀티 스레드
- 하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것을 말한다.
- 스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해준다.
- 장점
- 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소한다.
- 전역변수와 정적변수에 대한 자료 공유가 가능하다.
- 단점
- 안정성 문제가 있다. 하나의 스레드가 데이터 공간을 망가뜨리면, 모든 스레드가 작동 불가 상태가 된다.(공유 메모리를 갖기 때문이다.)
- 멀티 스레드의 안전성에 대한 단점은 Critical Section 기법을 통해 대비한다.
- 하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려고 할 때 발생하는 문제를 해결하기 위한 동기화 과정
프로세스의 주소 공간
- 프로그램이 CPU에 의해 실행된다. = 프로세스가 생성되고 메모리에 프로세스 주소 공간이 할당된다.
- 프로세스 주소 공간에는 코드, 데이터, 스택으로 이루어져 있다.
- 코드 Segment : 프로그램 소스 코드 저장
- 데이터 Segment : 전역 변수 저장
- 스택 Segment : 함수, 지역 변수 저장
- 최대한 데이터를 공유하여 메모리 사용량을 줄어야 한다.
- Code는 같은 프로그램 자체에서는 모두 같은 내용이기 때문에 따로 관리하여 공유한다.
- Stack과 Data를 나눈 이유는, 스택 구조의 특성과 전역 변수의 활용성을 위한 것이다.
- 프로그램의 함수와 지역 변수는, LIFO(가장 나중에 들어간게 먼저 나온다.) 특성을 가진 스택에서 실행된다.
728x90
'Computer > CS' 카테고리의 다른 글
IPC(Inter Process Communication) (1) | 2024.07.03 |
---|---|
PCB & Context Switching (0) | 2024.07.03 |
운영체제(OS, Operationg System) (0) | 2024.06.28 |
ARM 프로세서 (0) | 2024.06.27 |
패리티 비트 & 해밍 코드 (1) | 2024.06.27 |