[운영체제] 병행성 (concurrency)
병행성
무어의 법칙 : 반도체 집적회로의 성능이 18개월마다 2배로 증가한다는 법칙이다.
근데 본인은 18개월이라고 말한 적 없고 24개월이라고 말했다고 한다.
2010 년 즈음부터 CPU 의 계산 속도는 둔화되기 시작했다. 이유는 열역학의 물리적인 한계 때문이다. 5nm 공정까지 가면 원자의 전자가 다른 곳으로 워프하는 문제가 발생한다. 하지만 삼성에서 5nm 공정에 성공했다. 삼성은 외계인을 가두고 있는 것이 이로써 확실해졌다. 하지만 생산 비용은 매우 높아졌다.
CPU 속도의 한계 때문에 멀티 프로세서가 도입되었다. 여러 코어를 돌려 성능을 높인다. 그래서 병렬성을 증가시키는 게 중요하다.
병행성(concurrentcy) : 동시에 동작하는 것처럼 동작. 코어가 하나여도 된다.
병렬성(parallelism) : 실제로 동시에 동작
싱글 스레드를 멀티 스레드로 바꿨을 때 어느 정도의 성능 개선을 기대할 수 있을까?
두 가지 기준으로 측정할 수 있다.
s : sequential part 의 percentage
n : cpu 개수
속도의 상한은 병렬화시킬 수 없는 부분에 의존적이다. 병렬화시킬 수 없는 부분이 50% 라면 50% 는 하나의 코어로 수행하고, 나머지 50% 에서 두 배의 성능을 기대할 수 있다. (실제로는 두 배보다 조금 더 걸릴 것이다.) 따라서 이 경우 속도는 최대 1.33 (1 / 0.75) 배 정도의 성능 향상을 기대할 수 있다.
하드웨어의 CPU 코어 개수보다 소프트웨어의 병렬화가 더 중요하다. 소프트웨어에서 병렬화할 수 없는 부분을 최소화해야 한다. 보통의 암달의 법칙에 도달하는 것조차 굉장히 어렵다.
병렬화할 수 없는 것은 무엇일까?
race condition
자원에 대해 경쟁하는 경우. 병렬 컴퓨팅의 thread unsafe 한 경우와 같은 개념의 예제를 보여주셨다. 경쟁 상태가 발생하면 결과를 예측할 수 없다. 이런 부분은 순차적으로 처리해야 한다. 연결 리스트에서 pop 과 push 를 동시에 할 경우도 문제가 생긴다.
critical section : 순차적으로 액세스해야하는 영역
atomicity : 원자성
mutex : mutual exclusion - 상호 배제
mutex 는 하나의 프로세스만 수행할 수 있도록 한다. lock 은 자신이 수행하기 위해 mutex 를 lock 하는 것이고 unlock 은 자신의 수행을 끝내고 권한을 다른 프로세스에 넘겨준다.