애플리케이션
브라우저
❗어떤점에서 복잡할까?
브라우저는 예측할 수 없는 시점에 일정한 순서를 따르지 않고 발생하는 비동기적 이벤트를 처리해야 한다.
이런 비동기적인 시스템을 프로그래밍하는 것은 항상 어려운데, 브라우저는 많은 비동기성을 다뤄야만 한다.
❗이 모든 기능을 수행하기 위한 복잡한 코드를 포함하고 있어서 브라우저는 자체 구현 코드나 자신이 활성화하는 프로그램에 있는 버그를 이용한 공격에 취약하다.
브라우저는 운영체제와 비슷하다?
자원을 관리하고, 동시에 일어나는 활동을 제어하고 조정하는 부분에서 브라우저는 운영체제와 비슷해보인다. 그래서 브라우저를 운영체제로 사용하는 것이 가능해 보여서 하드웨어를 제어하는 운영체제와 독립적으로 작용할 수 있을것처럼 보였지만 10-20년 전에는 현실적인 장애물이 너무 많았다. 그치만 오늘날 이 아이디어는 실행 가능한 대안이 되었다. 이미 수많은 서비스가 오로지 브라우저 인터페이스로만 접근할 수 있게 되었다.
ex) 이메일, 달력, 음악, 비디오, SNS
소프트웨어는 계층으로 구성된다. 계층은 서로의 관심사를 구분 짓는다. 그래서 계층화는 프로그래머가 복잡성을 처리하는데 도움이 되는 중요한 아이디어 중 하나다. 각 계층은 맡은 기능을 구현하고, 그 상위 계층이 서비스에 접근하는 데 사용할 수 있도록 추상화를 제공한다.
커널, 라이브러리, 애플리케이션 간의 구분이 앞서 이야기했던 것처럼 명확하지는 않다. 소프트웨어 구성 요소를 만들고 연결하는 방법에는 경우의 수가 많기 때문에
그래서 운영체제와 애플리케이션 사이의 경계는 뚜렷하게 정의되어 있지 않다.
❗경계가 뚜렷하지는 않아도 유용한 지침은 있다.
어떤 애플리케이션이 다른 애플리케이션의 동작에 간섭하지 않도록 하는데 필요한 것은 무엇이든 운영체제의 역할에 속한다는 것이다. 메모리 관리, 즉 프로그램이 실행되는 동안 RAM의 어느 위치에 프로그램을 둘지 결정하는 일은 운영체제의 일이다.
두 개의 애플리케이션이 프린터를 동시에 작동 시키는 일은 있어서는 안 되고, 중간 조정 없이 디스플레이 값을 출력해서도 안 된다. 그 중심에서 프로세서를 제어하는 일은 운영체제의 기능인데, 나머지 모두 잘 작동하도로고 보장하는데 필요한 일이기 때문이다.
그러나 브라우저는 운영체제의 일부가 아니다. 어떤 브라우저든 공유된 자원이나 제어 기능에 간섭하지 않으면서 하나 또는 여러 개가 동싱에 실행 될 수 있기 때문에!