[CS] 여러 작업을 수행하는 애플리케이션

김채운·2022년 10월 4일
0

CS

목록 보기
5/9

애플리케이션

  • 운영체제를 플랫폼으로 삼아 작업을 수행하는 온갖 종류의 프로그램이나 소프트웨어 시스템을 총칭하는 용어.
  • 조그마할 수도 있고 클수도 있다.
  • 하나의 특정 과제에 집중할 수도 있고 폭넓은 기능을 처리할 수도 있다.
  • 판매될 수도 있고 무료로 배포될 수도 있다.
  • 애플리케이션의 코드는 소유권이 강하게 보호되거나, 자유롭게 사용할 수 있는 오픈소스이거나, 사용에 아무런 제한이 없기도 한다.

브라우저

  • 규모가 크고 무료이며 간혹 오픈소스로 개발되는 애플리케이션으로, 어떤 측면에서는 다른 애플리케이션보다 훨씬 복잡함. ex) 파이어폭스, 사파리, 엣지, 크롬

❗어떤점에서 복잡할까?

브라우저는 예측할 수 없는 시점에 일정한 순서를 따르지 않고 발생하는 비동기적 이벤트를 처리해야 한다.
이런 비동기적인 시스템을 프로그래밍하는 것은 항상 어려운데, 브라우저는 많은 비동기성을 다뤄야만 한다.

  • 브라우저는 수행한 작업의 이력과 함께 북마크, 즐겨찾기등의 다른 데이터를 유지한다.
  • 업로드, 다운로드, 이미지 캐싱을 하기 위해 로컬 파일 시스템에 접근하기도 한다.
  • 내부적으로 브라우저는 모바일 기기를 포함해서 다수 운영체제의 여러 버전에서 작동해야 한다.

❗이 모든 기능을 수행하기 위한 복잡한 코드를 포함하고 있어서 브라우저는 자체 구현 코드나 자신이 활성화하는 프로그램에 있는 버그를 이용한 공격에 취약하다.

브라우저는 운영체제와 비슷하다?

자원을 관리하고, 동시에 일어나는 활동을 제어하고 조정하는 부분에서 브라우저는 운영체제와 비슷해보인다. 그래서 브라우저를 운영체제로 사용하는 것이 가능해 보여서 하드웨어를 제어하는 운영체제와 독립적으로 작용할 수 있을것처럼 보였지만 10-20년 전에는 현실적인 장애물이 너무 많았다. 그치만 오늘날 이 아이디어는 실행 가능한 대안이 되었다. 이미 수많은 서비스가 오로지 브라우저 인터페이스로만 접근할 수 있게 되었다.
ex) 이메일, 달력, 음악, 비디오, SNS

소프트웨어의 계층 구조

소프트웨어는 계층으로 구성된다. 계층은 서로의 관심사를 구분 짓는다. 그래서 계층화는 프로그래머가 복잡성을 처리하는데 도움이 되는 중요한 아이디어 중 하나다. 각 계층은 맡은 기능을 구현하고, 그 상위 계층이 서비스에 접근하는 데 사용할 수 있도록 추상화를 제공한다.

계층순서 (밑바닥 순)

하드웨어

  • 시스템이 실행 중이더라도 버스를 이용하여 장치를 추가하고 제거할 수 있다는 점을 제외하면 하드웨어는 거의 변경할 수 없다.

커널(Kernel)

  • 엄밀한 의미의 운영체제로, 그 핵심적인 기능을 암시하기 위해 '커널'이라고 한다.
  • 하드웨어와 애플리케이션 사이에 있는 계층이다.
  • 하드웨어의 종류와는 무관하게 운영체제는 하드웨어의 특수한 속성을 숨기고, 애플리케이션에는 특정 하드웨어의 여러가지 세부 사항과 독립된 인터페이스 또는 외관을 제공한다.

라이브러리

  • 프로그래머 개개인이 기능을 새로 만들어 낼 필요가 없도록 일반적으로 유용한 서비스를 제공한다.
  • 라이브러리는 API를 통해 사용할 수 있다.

커널, 라이브러리, 애플리케이션 간의 구분이 앞서 이야기했던 것처럼 명확하지는 않다. 소프트웨어 구성 요소를 만들고 연결하는 방법에는 경우의 수가 많기 때문에
그래서 운영체제와 애플리케이션 사이의 경계는 뚜렷하게 정의되어 있지 않다.

❗경계가 뚜렷하지는 않아도 유용한 지침은 있다.

어떤 애플리케이션이 다른 애플리케이션의 동작에 간섭하지 않도록 하는데 필요한 것은 무엇이든 운영체제의 역할에 속한다는 것이다. 메모리 관리, 즉 프로그램이 실행되는 동안 RAM의 어느 위치에 프로그램을 둘지 결정하는 일은 운영체제의 일이다.

두 개의 애플리케이션이 프린터를 동시에 작동 시키는 일은 있어서는 안 되고, 중간 조정 없이 디스플레이 값을 출력해서도 안 된다. 그 중심에서 프로세서를 제어하는 일은 운영체제의 기능인데, 나머지 모두 잘 작동하도로고 보장하는데 필요한 일이기 때문이다.

그러나 브라우저는 운영체제의 일부가 아니다. 어떤 브라우저든 공유된 자원이나 제어 기능에 간섭하지 않으면서 하나 또는 여러 개가 동싱에 실행 될 수 있기 때문에!

0개의 댓글