모던 웹 브라우저 1 - CPU, GPU, Memory, 멀티 프로세스 아키텍쳐
Last updated
Last updated
Central Processing Unit
CPU 코어는 하나씩 일을 처리한다.
최근에는 흔히 멀티 코어를 사용한다.
Graphics Processing Unit
간단한 작업을 수많은 코어에서 동시에 처리하는데 특화되어있다.
원래는 그래픽을 처리하기 위해 개발되었다.
GPU 사용, GPU 보조라는 용어는 고속 렌더링과 자연스러운 처리를 의미한다.
프로세스 : 어플리케이션 실행 프로그램
스레드 : 프로세스 내부에 있으며, 프로세스의 프로그램을 실행하는 주체
어플리케이션을 시작하면 프로세스가 생성된다. 프로그램은 작업을 위해 스레드를 생성할 수 있다. OS는 메모리 일부를 프로세스에 할당하여 애플리케이션의 상태를 그 메모리 영역에 저장하게 한다. 어플리케이션이 종료되면, 프로세스가 사라지고, OS는 그에 할당된 메모리를 해제한다.
프로세스가 다른 프로세스를 돌려서 별도의 작업을 수행하도록 할 수도 있다. OS는 새로운 프로세스에 별도의 메모리 공간을 할당시킨다. 두 프로세스가 통신을 하려면 Inter Process Communication(IPC)를 이용한다. 많은 어플리케이션들이 이 방식을 채택하고 있어, 워커 프로세스가 무응답이더라도, 다른 프로세스에 영향을 주는 것 없이 해당 프로세스를 재시작할 수 있다. 이는 프로세스마다 메모리 영역이 다르기 때문이다.
이제 브라우저는 프로세스와 스레드를 사용하여 어떻게 구현되어있는지 알아보자. 하나의 프로세스에 많은 스레드가 있거나, 많은 프로세스에 적은 스레드가 있을 수 있다. 프로세스끼리는 IPC로 통신한다.
웹 브라우저 구조에 대한 표준이 없으므로, 브라우저마다 구현된 것이 다 다르다. 이 블로그에서는 '크롬' 구조에 대해 알아보겠다.
브라우저의 최상위 구조는 애플리케이션의 다른 부분들을 맡고 있는 프로세스들을 조율한다. 렌더러 프로세스는 여러 프로세스가 생성되어 각 탭에 할당된다. 가까운 최근까지, 크롬은 각 탭마다 프로세스를 할당하였다. 이제 크롬은 각 사이트마다 각 프로세스와 iframe을 갖도록 하였다.
브라우저 프로세스
애플리케이션의 크롬 부분을 담당한다. (주소창, 북마크, 뒤로가기, 앞으로가기 버튼)
네트워크 요청이나 파일 접근과 같은 웹 브라우저의 권한이 부여된 보이지 않는 부분을 제어한다.
렌더러 프로세스
웹사이트가 있는 탭 안에서 일어나는 일들을 담당한다.
플러그인 프로세스
flash와 같은 웹 사이트에서 사용하는 플러그인을 담당한다.
GPU 프로세스
다른 프로세스와 분리된 GPU 작업을 처리한다.
GPU는 여러 애플리케이션의 요청을 처리하고, 동일한 표면에 표시하기 때문에 다른 프로세스로 분리되어 있다.
크롬에서 실행중인 프로세스를 보고 싶으면, 메뉴 > 도구 더보기 > 작업관리자를 선택하면 볼 수 있다.
한 탭이 무응답이어도, 다른 탭에는 영향이 없다. 대부분 각 탭이 하나의 프로세스를 갖는다. 만약 여러 탭 중 하나가 무응답 상태에 빠지면, 그 탭만 닫아버리면 된다. 다른 탭에는 영향이 없기 때문이다.
보안 및 샌드박싱 운영체제는 프로세스 권한을 제어하는 방법을 제공한다. 따라서, 브라우저는 특정 프로세스를 특정 기능으로부터 샌드박스할 수 있다. 예를들어, 크롬 브라우저는 렌더러 프로세스 처럼 임의의 사용자 입력을 처리하는 프로세스에게서 임의의 파일 액세스를 제한한다.
프로세스들은 각각 메모리공간이 있으므로, 프로세스들은 공통의 인프라스트럭처(크롬의 자바스크립트 엔진인 V8과 같은...)의 복사본을 갖고 있다. 같은 프로세스 내의 스레드는 메모리를 공유할 수 있지만, 프로세스들은 메모리를 공유할 수 없으므로, 더 많은 메모리를 사용하는 것을 의미한다. 메모리를 절약하기 위해, 크롬은 프로세스의 갯수에 제한을 두었다. 그 제한은 각 컴퓨터의 메모리와 CPU에 따라 달라진다. 그러나, 크롬은 제한에 다다랐을 때, 하나의 프로세스에서 같은 사이트를 열고 있는 여러 탭을 실행한다.
브라우저 프로세스에도 동일한 방식을 적용할 수 있다. 기본적인 아이디어는 다음과 같다. 크롬이 고성능 하드웨어에서 실행될 경우, 안정성을 위해 각 서비스를 여러 프로세스에 나눈다. 만약, 자원이 부족한 장치에서 크롬이 실행될 경우, 하나의 프로세스에 여러 서비스를 합쳐 메모리를 절약한다.
사이트 격리는 교차 사이트 iframe에 대해 별도의 렌더러 프로세스를 실행한다. 동일 출처 정책은 웹의 핵심 보안 모델이다. 한 사이트가 동의없이 다른 사이트의 데이터에 접근할 수 없다. 프로세스 격리가 사이트를 분리하는 가장 효과적인 방법이다. 크롬67부터 데스크톱에서 사이트 격리를 사용하도록 설정하면, 탭의 각 사이트간 iframe에 별도의 렌더러 프로세스가 적용된다.