멀티 프로세스와 멀티 스레드

이주영·2023년 1월 9일
1

스터디 내용 정리

프로세스

: OS에 의해서 메모리 상에 적재돼 실행중인 프로그램을 말한다.

스레드

: 프로세스 안에서 실행되는 여러 흐름 단위

프로세스는 각각 별도의 주소 공간에 할당

여기서 포인트 스레드는 프로세스의 stack만 할당 받고 다른 부분은 공유한다?

핵심 프레세스는 자신만의 고유 공간과 자원을 할당받아 사용 하는데 반해, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용하는 차이가 존재함.

멀티 프로세스

대표적인 멀티 프로세싱 구조를 띈 것 : 위에서 살펴본 웹브라우저

하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것.

장점 : 안전성
단점 : 각각 독립된 메모리 영역을 갖고 있어서 작업량이 많으면(context switching)으로 인해 overhead가 발생돼 성능 저하가 일어난다.

Q 작업량이 많으면 성능이 저하되는거지? context switching으로 인해서 성능이 왜 저하되는거지?

토론 과정

  1. 브라우저에서 tab은 하나만 활성화함.
  2. cpu가 그 tab의 정보를 가지고 있고 각각의 프로세스 PCB를 가지고
  3. context switching이 일어나면 해당 PCB로 이동하고 갈아 끼운다.
  4. 이 과정에서 오버해드(쉽게 지연시간)가/이 발생
  5. ram의 사용 증가
  6. OS가 잡아준 최적의 자리를 찾는데 오래걸리니까...
  7. 성능 저하!!!

아하 현재의 지식으론 이정도 정리할 수 밖에 없는 것 같습니다..

멀티 스레드

프로세스 내 작업을 여러 개의 스레드, 멀티 스레드로 처리하는 기법을 말한다.

장점
1. 스레드끼리 서로 자원을 공유하기 때문에 메모리 효율성이 높다.
2. 동시성 확보

Q 동시성 확보를 이해하기 쉬운 예시가 뭐가 있을까?
👉 한손 O 한손 X 동시에 그리려고 하면 햇갈리고 속도와 성능이 줄어들지 않을까? 동일하게 하면 속도와 성능이 좋아지지 않을까?? 음..

단점
1. 안전성 문제 : 한 스레드에 문제가 생기면 다른 스레드에도 영향 (공유 자원이 있기에)

critical section기법을 통해 대비한다?

Critical section이 뭐지?

동시성 문제를 해결하기 위해서 등장했다.

해결 방법

  1. 뮤텍스
  2. 세마포어
세마포어가 뭐지?

운영체제에서 쓰이는 동기화 기법이며 상호 배제의 원리를 보장하는 알고리즘이다

프로세스의 순차적인 처리를 위해 하나의 프로세스 혹은 스레드 경쟁을 막아 원활한 공유자원을 가능하게 하는 것.

쉽게 설명해보면, 세마포어는 우선 깃발이라는 의미이며 변수의 int가 negative인지 아닌지에 따라 해당 공유자원에 접근을 가능케하고 기다리게 하는 방식으로 동작한다고 한다.

세마포어 접근 함수
  1. wait () 세마포어 값이 음수일때 기다려라!!
  2. post () 진행중인 프로세스가 끝나면 value를 더해라!!!

간단하게 Interrupt이 무엇인지만!

크게 보면

Interruptsystem call은 유저모드와 커널모드를 전환할 수 있게 한다.

#Q 커널모드와 유저모드를 왔다갔다 하는 건 어떻게 하는거지??
👉 OS가 관리

정의1

프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것

정의2

시스템에서 발생한 다양한 종류의 이벤트를 알리는 메커니즘

인터럽트 종류

외부/내부 인터럽트는

CPU의 하드웨어 신호에 의해 발생
  • 외부 인터럽트
    i / O, 타이밍 장치, 전원 등 외부적인 요인으로 발생, 전원 이상, 기계 착오, 외부 신호, 입출력

  • 내부 인터럽트
    trap(찾아보니 시스템 콜과 연관있는 것 같은데)이라고 부르며, 잘못된 명령이나 데이터를 사용할 때 발생
    0으로 나누기가 발생, 오버플로우, 명령어를 잘못 사용한 경우 (Exception)

소프트웨어 인터럽트는

명령어의 수행에 의해 발생
  • 소프트웨어 인터럽트

프로그램 처리 중 명령의 요청에 의해 발생한 것.
사용자가 프로그램을 실행시킬 때 발생
소프트웨어 이용 중에 다른 프로세스를 실행시키면 [[시분할 처리]]를 위해 자원 할당 동작이 수행된다.

관련있는 메모

[[System call]]

스터디를 진행하면서 튀어나온 궁금증

Q1. 브라우저를 프로세스와 스레드적 관점에서 보면 어떻게 설명할 수 있지?

나의 생각

프로세스 -> 하나의 큰 페이지? 하나의 탭?
스레드 -> 클릭 이벤트, 색이 바뀌는 기능? 같은 목적을 가지고 동작하는애들?

예시를 살펴보자

브라우저 크롬의 아키텍처를 살펴보면


출처 : https://d2.naver.com/helloworld/2922312

4개의 영역에 프로세스가 할당되고 있는 것을 알 수 있다.

오른쪽 위 상단에 있는 도구 더보기> 작업 관리자 를 보니 현재 탭들도 프로세스 ID를 할당받았고 확장 프로그램들도 프로세스를 할당 받았다는 것을 알게 됐다.

신기하네...!!

프레임별로 실행되는 렌더러 프로세스

현재 탭마다 렌더러 프로세스를 할당하는 모델에서는 iframe의 사이트가 같은 렌더러 프로세스에서 작동하기에 메모리가 공유될 수 있다는 문제가 있있고 CORS 정책을 우회하여 보안 공격을 했으나 Chrome 67(May 29, 2018) 부터 데스크톱에서 사이트 격리를 기본적으로 사용하도록 설정이 되면서 탭에서 iframe의 사이트에 별도의 런더러 프로세스가 적용된다.

나의 언어로 결론 맺기
👉 탭마다 프로세스가 정해지는 것은 맞으나 tab뿐만 아니라 브라우저, 확장플로그인, GPU 까지 합쳐서 4영역에 걸쳐 프로세스를 할당하고 있었다. 오호라? 그리고 하나의 탭안에서 이벤트들이 쓰레드가 아닐까?

Q2. 자바스크립트가 멀티스레딩처럼 보이게 하는 이유

비동기!!!

자바스크립트 내에서 비동기를 이해하기 위해서 알아야할 것은

이벤트 루프

한마디 정리!! 비동기 함수인 타이머, Ajax는 호출될 경우 콜스텍에서 실행되고 있는 함수와 별개로 브라우저에 내장된 Web API에게 쑝 넘겨진다.

언뜻보기에 동시에 실행되는 것 같아보이는 착시현상을 일으키는 것이 멀티 스레딩 처럼 보이는 이유라고 할 수 있다.

프로세스와 스레드를 공부하면서 되려 비동기라는 개념이 이해가 되는 것 같다. 천천히 계속 공부해야겠다.

결론

쉽지 않다. 우선 익숙해질 수 있도록 꾸준히 공부해서 블로그로 남기고 공유해보려고 한다. 가능한 정확한 정보를 전달하려고 하나 혹여나 잘못된 부분이 있다면 가감없이 댓글을 통해 알려주시면 너무 감사할 것 같습니다!!

profile
https://danny-blog.vercel.app/ 문제 해결 과정을 정리하는 블로그입니다.

0개의 댓글