-
OS - 프로세스와 쓰레드CS/OS 2021. 2. 15. 20:52
프로세스와 쓰레드
프로세스
-
실행중인 프로그램으로 메모리에 적재되어 CPU자원의 할당을 받을 수 있는 것을 말한다.
쓰레드
-
프로세스의 작업 실행 단위로 프로세스에 할당된 메모리, 자원을 공유할 수 있다.
- 쓰레드 간에는 각자 독립적인 작업을 수행하기 때문에 각각의 스택과 레지스터를 가진다.
-
프로세스의 메모리, 자원등을 공유하므로 커널의 도움 없이 상호 통신이 가능하다.
-
사용자 수준의 쓰레드: 사용자가 만든 라이브러리를 사용하여 쓰레드를 운용한다. 속도는 빠르지만 구현이 어렵다.
-
커널 수준의 쓰레드: 운영체제의 커널에 의해 쓰레드를 운용한다. 구현이 쉽지만 속도가 느리다.
멀티 프로세스
-
다수의 프로세스를 실행하는 것이다.
-
멀티 프로세스는 프로세스 간 데이터, 힙, 스택영역 모두를 비공유 한다.
-
장점
-
하나의 프로세스가 비정상적으로 종료되더라도 다른 프로세스가 영향을 받지 않는다.
-
동기화 작업이 별도로 필요하지 않는다.
-
-
단점
-
프로세스마다 메모리를 할당해 주어야 하므로 자원 소모, 메모리 낭비, 문맥 교환이 많이 나타나게 된다.
-
-
멀티 프로세싱, 멀티 프로그래밍, 멀티 태스킹
-
멀티 프로세싱: CPU코어 여러개로 프로세스를 여러개 수행한다.
-
멀티 프로그래밍: CPU코어 하나로 프로세스를 여러개 수행한다.
-
멀티 태스킹: CPU코어 몇 개를 쓰던 간에 작업을 수행한다. (프로세스보다 확장된 의미)
-
-
컨텍스트 스위칭
-
멀티 프로세스 환경에서 CPU스케줄러가 인터럽트 발생 시 현재 프로세스의 상태를 PCB에 저장하고, 새로운 프로세스의 상태를 레지스터에 저장하는 것을 말한다.
-
인터럽트의 종류
-
I/O Request: 입출력 요청
-
Time slice expired: CPU 사용시간 만료
-
Fork child: 자식 프로세스 생성
-
Wait for interrupt: 인터럽트 처리 대기
-
-
컨텍스트 스위칭시 CPU는 아무런 작업을 하지 못하므로 잦은 컨텍스트 스위칭을 성능 저하를 일으킨다.
-
멀티 쓰레드
-
하나의 프로세스를 다수의 실행단위로 구분햐여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화 하여 수행 능력을 향상시키는 것이다.
- 즉, 하나의 프로그램이 동시에 여러개의 일을 수행할 수 있도록 해주는 것이다.
- 멀티 쓰레드는 데이터, 힙, 스택 영역중 데이터, 힙 영역을 공유한다.
- 장점
- 프로세스를 이용해 동시에 처리하던 일을 쓰레드로 구현할 경우 메모리 공간과 시스템 자원 소모가 줄어들게 된다.
- 쓰레드의 생성 및 컨텍스트 스위칭(쓰레드의 문맥전환은 캐시메모리를 비울 필요가 없다.)은 프로세스보다 빠르다.
- 데이터 영역과 힙 영역을 통해 데이터 교환이 가능하다.
- 단점
- 동기화 작업을 통해 공유 자원에 대한 관리가 필요하다.
- 병목 현상이 발생하여 성능이 저하될 가능성이 높다.
교착상태(Dead Lock)
- 멀티 프로세스, 쓰레드가 한정되고 공통된 자원을 사용할 때 발생한다.
- 둘 이상의 프로세스나 쓰레드들이 자원을 점유한 상태에서 서로 다른 프로세스나 쓰레드가 점유하고 있는 자원을 기다리며 무한정 기다리는 현상을 말한다.
-
발생 조건(4가지 모두 만족해야 한다.)
-
상호 배제: 한 자원에 대해 여러 프로세스는 동시에 접근할 수 없다.
- 점유 대기: 프로세스는 자원을 가진 채 다른 자원을 기다릴 수 있다.
- 비선점: 다른 프로세스가 사용중인 자원을 강제로 뺏을 수 없다.
- 순환 대기: 각 프로세스가 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.
-
- 해결 방법
- 예방: 발생조건 중 하나라도 만족되지 못하게 한다.
- 회피: 교착상태가 발생하지 않도록 알고리즘을 적용한다.(은행원 알고리즘)
- 회복: 교착상태가 발생하면 그때 해결한다.
- 무시: 교착상태에 의한 성능 저하보다 이를 해결할 때의 성능저하가 큰 경우 무시한다.
동기, 비동기
-
동기: 어떤 일에 대한 요청과 응답이 동시에 이루어져야 한다. 즉 요청한 장소에서 결과가 주어집니다.
- 동기화(동시성 프로그램에서 공유 자원에 대해 동시 접근을 허용하지 않는다.) 방법의 종류
- 뮤텍스
- 임계영역(공유된 자원에 접근 가능한 공간)에 들어가기 위해 뮤텍스를 가지고 있어야 하며 임계영역에 들어갈 때 락lock 을 걸어 다른 프로그램이 접근하지 못하도록 하고, 임계영역에서 나와 해당 락을 해제한다.
- 오직 1개만 동기화 할 수 있다.
- 세마포어
- 임계영역에 세마포어 변수만큼의 프로그램이 접근할 수 있다.
- 현재 수행중인 프로그램이 아닌 다른 프로그램이 세마포어를 해제할 수 있다.
- 1개 이상 동기화 할 수 있다.
- 뮤텍스
- 동기화(동시성 프로그램에서 공유 자원에 대해 동시 접근을 허용하지 않는다.) 방법의 종류
- 비동기: 어떤 요청에 대해 응답이 바로 주어지지 않고 나중에 처리된다.
블로킹, 넌블로킹
-
블로킹: 어떤 요청에 대한 응답이 올 때까지 작업을 중단하는 것을 말한다.
-
넌블로킹: 어떤 요청에 대한 응답이 올 때까지 기다리지 않고 다른 작업을 수행한다.
reference
'CS > OS' 카테고리의 다른 글
[OS] CPU 작동원리 (0) 2021.08.06 [OS]Process VS Thread (0) 2021.07.10 OS - 은행원 알고리즘 (0) 2021.02.20 OS - CPU스케줄링 (0) 2021.02.16 OS - 메모리 (0) 2021.02.09 -