동시성과 병렬성, OS에서의 적용

Kyung yup Lee·2021년 2월 15일
0

운영체제

목록 보기
3/5

동시성과 병렬성

흔히들 동시성과 병렬성을 같은 개념으로 사용한다. 하지만 두 개념은 차이가 있다.

동시성

서로 독립적인 작업을 작은 단위의 연산으로 나누고 시간 분할 형태로 연산하여 논리적으로 동시에 실행되는 것처럼 보여주는 것을 말한다. 논리적인 개념이기 때문에 단일 쓰레드에서도 사용이 가능한 개념이다. 예를 들어 초기 멀티 태스킹은 동시성 개념을 통해 여러 프로세스가 동시에 수행되는 것과 같은 결과물을 만들 수 있었다.

출처: https://seohs.tistory.com/461 [Digital Recipe]

병렬성

병렬성은 동시성과 다르게 여러 작업을 병렬로 처리하는 것을 의미한다. 일반적으로 사용되는 동시성의 의미가 병렬성의 의미일 것이다. 왜냐하면 일반적으로 멀티 프로세싱, 멀티 스레딩을 이야기 하면서 동시성을 말하기 때문이다.

병렬작업의 문제

병렬 작업의 대표적인 예가 멀티스레딩일 것이다. 멀티스레딩은 멀티프로세싱에 비해서 훨씬 간단하게 공유자원에 접근해서 데이터 작업을 처리할 수 있다. 스레드는 프로세스 내에서 동적으로 처리되는 레지스터 값, 스택, 힙 등의 데이터영역을 공유하면서 작업을 하게 된다.

이런 데이터영역을 공유하면서 병렬작업을 하게 되면 발생하는 문제가 임계 영역 문제이다. 임계 영역이란, 여러 작업 주체가 이 임계영역에 동시에 접근해서 작업을 처리할 시, 예상하지 못한 결과를 유발할 수 있는 구역이다. 즉, 반드시 비병렬 작업으로 처리해야 하는 코드 구간을 의미한다.

이런 문제점이 있지만 멀티스레딩은 프로세스를 여러개 생성하여 작업을 처리하는 것보다 훨씬 효율적이기 때문에, (자원 중복 회피- 코드 영역) 멀티 프로세싱을 사용하는 것보다는 병렬 작업의 문제점을 해결하는 방향으로 프로그램을 만들게 된다.

OS 에서 병렬작업의 문제 해결

OS(운영체제)가 관심있는 병렬작업은 멀티프로세싱이다. 왜냐하면 OS가 처리하는 병렬작업은 멀티프로세싱이고, 멀티스레딩의 경우 프로그램 내에서 처리해야되기 때문이다. 그래서 JAVA 공부를 하면 멀티스레딩에 대해서 반드시 공부하게 된다.

멀티프로세싱도 마찬가지로 공유 자원(변수, 메모리, 파일 등)에 동시 접근하는 문제가 있어서 임계구역에 대한 처리가 필요하다. 아래 세 가지 조건을 만족하면 프로세스에서 병렬 작업의 문제는 발생하지 않는다.

상호배제

한 프로세스가 임계구역에 들어가면 다른 프로세스는 못 들어감

한정대기

상호배제로 인한 무한 대기는 안된다

진행의 융통성

프로세스의 작업 속도와 관계 없이 자원이 비어있으면 사용할 수 있어야 함

실질적인 문제해결 방법

1. 락

boolean 변수를 하나 선언해서 임계구역에 진입할 때 락을 걸어주는 방식을 통해 상호배제를 구현한다.

단점1 : 락 변수를 false로 바꾸기 직전 프로세스에 컨텍스트 스위칭이 일어나, 다른 프로세스가 임계구역에 진입한 후, 다시 컨텍스트 스위칭이 발생할 경우, 상호 배제가 깨질 수 있다.

단점 2:
lock이 잠겨있는 경우 프로세스가 계속해서 lock 이 풀릴 때까지 while 문을 돌면서 확인을 해주어야 한다.

이와 같은 문제를 해결하기 위해 다양한 알고리즘이 도입되었지만 속 시원한 해결책은 되지 못했다.

2. 세마포어

세마포에는 3가지 요소가 있는데,

  • Semaphore(n) - 현재 사용 가능한 자원 수가 저장된다.
  • P() - 잠금을 수행하는 코드로 RS가 0보다 크면 자원을 감소시키고 임계구역에 진입한다.
  • V() - 잠금해제와 동기화 수행 코드 : 세마포 대기열에 wake_up 신호를 보낸다.

3. 모니터

세마포의 잘못된 사용으로 인한 단점을 해결하기 위한 방법. 프로세스가 직접 세마포를 실행하는 것이 아니라, 운영체제에서 제공하는 인터페이스를 통해 잘못된 실행을 막는다.

결론

위처럼 다양한 병렬 처리에 대한 문제점이 존재하고, 이를 위한 많은 해결 방법들이 제시되어있다. 이럼에도 불구하고, 병렬성으로 인한 문제는 지속적으로 발생하고, 특히 이 문제는 디버깅이 쉽지 않기 때문에 더더욱 조심해서 다루어야 할 필요가 있다.

출처

https://seohs.tistory.com/461
쉽게 배우는 운영체제 - 한빛아카데미

profile
성장하는 개발자

0개의 댓글