프로세스

ddalkigum·2020년 12월 31일
1

CS

목록 보기
1/1
post-thumbnail

프로그램이란?

프로그램이란 말그대로 코드들의 모임이다.

프로그램 파일이 저장은 되어 있지만, 메모리에는 올라가지 못한 상태

CPU에게 메모리를 할당 받게 되면 그때 부터는 프로세스라 불린다.

프로세스

  1. 운영체제의 관점에서 보면 가장 작은 작업 단위

  2. 프로그램이 실행중인 상태, 메모리를 할당 받은 상태

  3. 프로세스의 구조는 CODE, DATA, STACK, HEAP 의 구조로 나누어 진다.

  4. 프로세스는 독립적인 메모리공간을 할당 받기 때문에 서로간의 영향을 받지 않는다.

프로세스의 구조


스레드

  1. CPU의 관점에서 보면 가장 작은 작업 단위

  2. 프로세스내를 더 작게 쪼개서 싫행단위를 나누는데 이것 하나 하나를 스레드라고 한다.

  3. 프로세스내의 스레드들 간에는 공유하는 메모리가 있는데 , 프로세스의 STACK을 제외한
    나머지 3가지의 영역을 서로 공유한다.

  4. 스레드들 간에는 공유하는 영역이 있기 때문에 서로간의 영향을 끼친다.

  5. 스레드는 서로 공유를 하고, 영향을 받기 때문에 한 스레드에 문제가 생기게되면,
    같은 프로세스내의 다른 스레드를 강제종료하게 된다.

스레드의 구조

프로세스가 스레드로 나누어지게 된 이유?

프로세스는 CPU에게 일정량의 독립된 메모리를 할당 받고

여기서 프로세스는 할당된 메모리 내에서의 정보만 접근 할 수 있는데,

이를 더 작게 쪼개서 관리하기 위해서 스레드로 나누어 관리를 하게되었다


멀티 프로세스 멀티 스레드

멀티 프로세스

하나의 운영체제에서 여러개의 프로세스를 실행 시키는 것

멀티 프로세스의 최대 장점은 실행 속도 이다
CPU사용을 극대화 하여 속도를 증가시키지만

너무 많은 사용은 오버헤드가 증가하게 된다

프로세스를 많이 실행시키는 만큼 메모리 사용량이 증가한다

프로세스가 다른 정보에 접근하는 방법

  1. IPC ( Inter Process Communication )
  2. LPC ( Local Process Communication )
  3. 별도의 공유 메모리를 만들어 서로 공유하게 한다

멀티 프로세스 환경에서 여러 프로세스가 동시에 실행되면서
필연적으로 프로세스간에 자원 할당이 일어난다

CPU는 기존에 할당된 프로세스의 context를 저장하고,
새로 자원을 할당할 프로세스의 context로 교체하는 과정을 거치면서
context switching 이 일어난다

context switching 중에는 어느 프로세스에도 CPI 자원이 할당된게 아니기 때문에
CPU가 아무것도 하지 못한다

이러한 context switching이 자주 일어나지 해주고,
필요한 순간에 적절히 사용하게 해주는 알고리즘이 필요하다

이러한 알고리즘을 통해 관리를 하는게 운영체제의 스케쥴러 이다

멀티 스레드

하나의 프로세스가 여러개의 스레드를 동시에 처리하는 것

멀티 스레드의 장점

  1. context-swtching을 할때 공유하고 있는 메모리 만큼 자원을 절약할 수 있다
  2. 스레드는 Stack영역이외의 공간은 공유하고 있기때문에, 통신을 할때 응답시간이 빠르다

멀티 스레드의 단점

  1. 메모리를 공유하고 있기때문에, 쓰레드하나에 문제가 생기면 프로세스를 망칠수 있다
  2. 자원을 공유하기 때문에 동기화 문제가 생긴다

동기화 문제

스레드-a
스레드-b
두개가 존개한다고 가정하고,
스레드-a에서 작업하던 내용을 스레드-b가 가지고 가서 작업을 한다면
다시 스레드-a가 가지고 가서 작업을 할때 문제가 생길 수 있다.
여기서 스레드는 함수이고 자원은 전역변수이다
같은 전역변수를 사용함으로써 동기화 문제가 생기는 것

뮤텍스

뮤텍스는 한 프로세스안에서 쓰레드들은 stack을 제외한 나머지 부분을
공유 자원으로 사용하는데, 여기서 모든 쓰레드들이 한번에 접근하게되면
과부하가 생길 수 있습니다

따라서 뮤텍스뿐아니라 세마포어에도 적용되는 lock을 사용합니다

a쓰레드 : "공유 메모리 사용하겠습니다, lock걸어 주세요"

요청을 하고 a쓰레드가 사용을 끝내기 전까지 다른 쓰레드는 대기를 합니다

이렇게 a쓰레드의 사용이 끝나면 다른 쓰레드들이 돌아가면서 사용하는데

Lock이 걸리면 1, 사용하는 쓰레드가 없다면 0 으로 구분지어 사용합니다

이렇게 한 공유메모리에 여러 쓰레드가 접근을 못하게 하는 것을 뮤텍스 라고 합니다

세마포어

쓰레드가 1과 0을 가지고 lock의 상태를 표현한다면
프로세스는 이러한 1, 0 을가지고 공유 메모리를 사용중인
쓰레드의 숫자를 가지고 lock의 상태를 표현합니다

만약

세마포어의 값이 5인데,
공유메모리를 사용해야할 쓰레드가 10이라면

쓰레드 5개가 공유메모리를 사용한다면

값이 0이되어서 lock이 걸리게 됩니다

쓰레드하나가 작업을 마치면 하나가 빠지고 다른하나가 들어오는
방식으로 작동 됩니다.


공부하자 🔥

profile
딸기검 -본캐🐒 , 김준형 - 현실 본캐 🐒

0개의 댓글