모던 웹 브라우저 1 - CPU, GPU, Memory, 멀티 프로세스 아키텍쳐

CPU

  • Central Processing Unit

  • CPU 코어는 하나씩 일을 처리한다.

  • 최근에는 흔히 멀티 코어를 사용한다.

GPU

  • Graphics Processing Unit

  • 간단한 작업을 수많은 코어에서 동시에 처리하는데 특화되어있다.

  • 원래는 그래픽을 처리하기 위해 개발되었다.

  • GPU 사용, GPU 보조라는 용어는 고속 렌더링과 자연스러운 처리를 의미한다.

프로세스와 스레드에서의 프로그램 실행

  • 프로세스 : 어플리케이션 실행 프로그램

  • 스레드 : 프로세스 내부에 있으며, 프로세스의 프로그램을 실행하는 주체

어플리케이션을 시작하면 프로세스가 생성된다. 프로그램은 작업을 위해 스레드를 생성할 수 있다. OS는 메모리 일부를 프로세스에 할당하여 애플리케이션의 상태를 그 메모리 영역에 저장하게 한다. 어플리케이션이 종료되면, 프로세스가 사라지고, OS는 그에 할당된 메모리를 해제한다.

프로세스가 다른 프로세스를 돌려서 별도의 작업을 수행하도록 할 수도 있다. OS는 새로운 프로세스에 별도의 메모리 공간을 할당시킨다. 두 프로세스가 통신을 하려면 Inter Process Communication(IPC)를 이용한다. 많은 어플리케이션들이 이 방식을 채택하고 있어, 워커 프로세스가 무응답이더라도, 다른 프로세스에 영향을 주는 것 없이 해당 프로세스를 재시작할 수 있다. 이는 프로세스마다 메모리 영역이 다르기 때문이다.

브라우저 아키텍쳐

이제 브라우저는 프로세스와 스레드를 사용하여 어떻게 구현되어있는지 알아보자. 하나의 프로세스에 많은 스레드가 있거나, 많은 프로세스에 적은 스레드가 있을 수 있다. 프로세스끼리는 IPC로 통신한다.

웹 브라우저 구조에 대한 표준이 없으므로, 브라우저마다 구현된 것이 다 다르다. 이 블로그에서는 '크롬' 구조에 대해 알아보겠다.

브라우저의 최상위 구조는 애플리케이션의 다른 부분들을 맡고 있는 프로세스들을 조율한다. 렌더러 프로세스는 여러 프로세스가 생성되어 각 탭에 할당된다. 가까운 최근까지, 크롬은 각 탭마다 프로세스를 할당하였다. 이제 크롬은 각 사이트마다 각 프로세스와 iframe을 갖도록 하였다.

프로세스의 역할

  • 브라우저 프로세스

    • 애플리케이션의 크롬 부분을 담당한다. (주소창, 북마크, 뒤로가기, 앞으로가기 버튼)

    • 네트워크 요청이나 파일 접근과 같은 웹 브라우저의 권한이 부여된 보이지 않는 부분을 제어한다.

  • 렌더러 프로세스

    • 웹사이트가 있는 탭 안에서 일어나는 일들을 담당한다.

  • 플러그인 프로세스

    • flash와 같은 웹 사이트에서 사용하는 플러그인을 담당한다.

  • GPU 프로세스

    • 다른 프로세스와 분리된 GPU 작업을 처리한다.

    • GPU는 여러 애플리케이션의 요청을 처리하고, 동일한 표면에 표시하기 때문에 다른 프로세스로 분리되어 있다.

크롬에서 실행중인 프로세스를 보고 싶으면, 메뉴 > 도구 더보기 > 작업관리자를 선택하면 볼 수 있다.

크롬의 멀티 프로세스 아키텍쳐의 장점

  1. 한 탭이 무응답이어도, 다른 탭에는 영향이 없다. 대부분 각 탭이 하나의 프로세스를 갖는다. 만약 여러 탭 중 하나가 무응답 상태에 빠지면, 그 탭만 닫아버리면 된다. 다른 탭에는 영향이 없기 때문이다.

  2. 보안 및 샌드박싱 운영체제는 프로세스 권한을 제어하는 방법을 제공한다. 따라서, 브라우저는 특정 프로세스를 특정 기능으로부터 샌드박스할 수 있다. 예를들어, 크롬 브라우저는 렌더러 프로세스 처럼 임의의 사용자 입력을 처리하는 프로세스에게서 임의의 파일 액세스를 제한한다.

메모리 더 절약하기

프로세스들은 각각 메모리공간이 있으므로, 프로세스들은 공통의 인프라스트럭처(크롬의 자바스크립트 엔진인 V8과 같은...)의 복사본을 갖고 있다. 같은 프로세스 내의 스레드는 메모리를 공유할 수 있지만, 프로세스들은 메모리를 공유할 수 없으므로, 더 많은 메모리를 사용하는 것을 의미한다. 메모리를 절약하기 위해, 크롬은 프로세스의 갯수에 제한을 두었다. 그 제한은 각 컴퓨터의 메모리와 CPU에 따라 달라진다. 그러나, 크롬은 제한에 다다랐을 때, 하나의 프로세스에서 같은 사이트를 열고 있는 여러 탭을 실행한다.

브라우저 프로세스에도 동일한 방식을 적용할 수 있다. 기본적인 아이디어는 다음과 같다. 크롬이 고성능 하드웨어에서 실행될 경우, 안정성을 위해 각 서비스를 여러 프로세스에 나눈다. 만약, 자원이 부족한 장치에서 크롬이 실행될 경우, 하나의 프로세스에 여러 서비스를 합쳐 메모리를 절약한다.

프레임별 렌더러 프로세스 - 사이트 격리

사이트 격리는 교차 사이트 iframe에 대해 별도의 렌더러 프로세스를 실행한다. 동일 출처 정책은 웹의 핵심 보안 모델이다. 한 사이트가 동의없이 다른 사이트의 데이터에 접근할 수 없다. 프로세스 격리가 사이트를 분리하는 가장 효과적인 방법이다. 크롬67부터 데스크톱에서 사이트 격리를 사용하도록 설정하면, 탭의 각 사이트간 iframe에 별도의 렌더러 프로세스가 적용된다.

참고

Last updated