CS 기초

[운영체제] 프로세스와 쓰레드

태현123 2021. 9. 13. 22:02
728x90
반응형
SMALL

프로세스와 쓰레드에 대해 알아보자.

 

프로세스는 무엇인가?

- 프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다. 여러 개의 프로세서를 사용하는 것을 멀티프로세싱이라고 하며 같은 시간에 여러 개의 프로그램을 띄우는 시분할 방식을 멀티태스킹이라고 한다. 프로세스 관리 운영 체제의 중요한 부분이 되었다.

 

운영 체제 - 위키백과, 우리 모두의 백과사전

운영 체제(運營 體制, 문화어: 조작 체계) 또는 오퍼레이팅 시스템(Operating System, 약칭:OS)은 시스템 하드웨어를 관리할 뿐 아니라 응용 소프트웨어를 실행하기 위하여 하드웨어 추상화 플랫폼과

ko.wikipedia.org

간단하게 말하면, 프로세스는 실행중인 프로그램의 실행 단위를 말한다. 프로세스에는 PCB라는 제어블록이 있다. PCB는

Process Control Block의 약자로, 프로세스에 대한 중요 정보를 저장하고 있는 운영체제의 자료구조이다. 운영체제는 프로그램을 관리하기 위해 프로세스의 생성과 동시에 고유한 PCB를 만든다.

 

쓰레드는 무엇인가?

- 쓰레드는 프로세스보다 더 작은 단위이며, 프로세스의 실행 단위라고 할 수 있다. 이는 한 프로세스 내에서 여러 실행 흐름으로 프로세스 내의 주소공간이나 자원을 공유할 수 있다. 이 때, 만약 멀티쓰레드 프로그램을 개발해야 한다면, 동기화를 잘 해주어야만 한다. 그 이유는 두 쓰레드가 공유변수에 접근할 때, 순서가 맞지 않을 경우 원하지 않는 결과를 낼 수 있기 때문이다. 

 

쓰레드는 왜 중요할까?

- 주로 우리가 병렬 프로그래밍을 할 때, 멀티 쓰레드를 이용하여 프로그래밍을 하는데 이 때 쓰레드가 병렬로 돌아가면서 공유자원에 참조를 하면서 문제가 생기는 경우가 생긴다.

예를 들어 A라는 쓰레드와 B라는 쓰레드가 전역변수 N에 접근한다고 하자, 그리고 A쓰레드는 해당 변수에 1씩 더하는 연산, B쓰레드는 해당 변수를 10으로 초기화한다. 이 두 쓰레드를 동시에 실행시킨다고 했을 때, 무슨일이 일어날까?

-> 알 수가 없다. 왜냐? 쓰레드의 순서를 정해놓지도 않았기 때문이다. 또한, 동시성을 제어하지 않았기 때문에, 원하는 결과를 얻을 수도 없다. 그리고, 동시성을 제어한다고 했을 때도 문제가 생길 수 있다. 바로 병목현상(DeadLock)이다.

병목현상이 생기는 이유는 다음 4가지와 같다.

1. 상호배제

- 공유자원을 한 시점에서 한 쓰레드만 사용할 수 있게 해준다.

2. 환형대기

- 특정 자원을 가진 채로 다음 쓰레드가 가지고 있는 자원해제를 대기한다. 이런 상태가 순환형태로 대기중이다.

3. 점유대기

- 쓰레드가 할당된 자원을 가진 상태에서 다른 자원을 대기한다.

4. 비선점

- 이미 선점된 자원을 뺏을 수 없다.

 

다음 4가지 조건 때문에 데드락이 발생할 수 있다.

 

데드락을 막는 방법은 3가지가 있다.

1. DeadLock이 발생하지 않도록 예방

2. DeadLock이 발생하는 것을 인정하면서 적절히 회피하기

3. DeadLock의 발생을 허용하면서 탐지하여 회복하기

 

반응형
LIST

'CS 기초' 카테고리의 다른 글

[운영체제] 메모리의 구조  (0) 2021.11.01
[Design Pattern] MVC Pattern  (0) 2021.09.28
[CS기초] 컴파일러, 인터프리터  (0) 2021.09.14
[운영체제] CPU 스케줄러  (0) 2021.09.13