4 minute read

OS는 computer science에서 가장 복잡한 system으로 알려져 있습니다. 현대의 범용 OS는 코드가 약 5천만 줄 정도 된다고 합니다. 이러한 OS는 일반 PC 뿐만 아니라 , e-book reader, smartphone, tablet 등등 다양한 기기에서 device를 관리합니다. 냉장고, 청소기 등등 다양한 device에도 탑재되어 스마트~~ 라고 불리고 있습니다.

Operating System을 어떻게 설계하는지는 몰라도 된다고 개인적으로 생각하빈다. 하지만, Operating System이 어떻게 작동하는지를 아는 것은 더 나은 computer scientist 혹은 developer가 되기 위해서 필수적이라고 생각합니다. 현대의 복잡한 software에 사용된 technologies 나 design pattern중 os에서 사용되는 것들이 많이 있습니다 . 뿐만 아니라, 점점 진화하는 하드웨어에 맞는 OS를 만들기 위해서라면 당연히 이해해야 할 것입니다 . 이러한 , 진화하는 하드웨어에 탑재되는 OS를 이해하기 위해서, 다른 소프트웨어 시스템을 이해하기 위해서 Operating System의 내부 작동 원리를 이해하면 많은 도움이 될 것입니다.

What is OS?

image

OS의 정의가 무엇일까요?

OS는 resource를 user와 application을 위해서 관리해주는 layer of software 입니다.

OS는 기본적으로 user에게 invisible 합니다.

image

위의 그림을 좀 더 확장해서 보도록 하겠습니다. 가장 아래 layer에는 hardware가 있습니다. OS는 hardware 위에서 실행되는 software입니다. OS에는 여러 device에 대해서 각 device에 특화된 layer와 application 에 제공되는 각 device만의 service가 포함되어 있습니다.

위의 그림에서 보면 OS는 application으로 부터 격리된 environment에서 실행되는 것을 알 수 있습니다. OS의 일부가 system library로써 APP에 link되어 실행되는 것을 볼 수 있습니다 .

Refree

OS는 같은 physical machine 위에서 실행되는 application을 위해서 resource를 관리해주는데 , 각 applicaton이 서로 격리되도록 합니다. 이로 인해서 , application은 서로가 bug가 발생하여도 서로에게 영향을 주지 않습니다. 또한 , malicious software여도 OS에게 영향을 주지 않습니다. 따라서, OS를 Refree로써의 역할을 한다고 표현합니다 .

Resource sharing

Operating System은 여러 application이 다른 applicaton이 실행되지 않을 때 , machine 사용량을 최대한으로 끌어 올리도록 해야합니다. 따라서, operating system은 여러 application이 한 번에 실행될 수 있도록 합니다.

개별 application도 다수의 task를 한 번에 처리할 수 있습니다 . 예를 들어 ,

  1. webserver는 각 task가 끝나기를 기다리지 않고 다수의 task를 concurrently 하게 수행합니다.
  2. web browser도 다른 page로 전환하는 동안 다수의 page를 redering 할 수 있으면 다 나은 응답성을 보일 수 있습니다.
  3. multiprocessor에서는 병렬로 실행되는 application에서의 computation이 각 core unit으로 분리되어 계산이 수행되어집니다. 따라서, 더 빠른 실행을 할 수 있습니다.

하지만 , 이에 따른 여러 해결해야할 과제들이 있습니다.

Resource allocation

Operating System은 동시에 실행되는 application을 분리해야 하고 , resource를 적절하게 할당해야 합니다. 왜냐하면, memory는 유한하기 때문입니다 . OS가 어떻게 resource를 할당하는지에 따라서 user에게 보여지는 performance가 달라질 수 있습니다.

Resource를 할당할 때에는 hardware에 직접하지 않고 , 추상화된 memory라는 것에 할당을 하게 됩니다. 만약에 , 직접 할당을 하게 된다면 어떻게 될까요?

while True :
	1

이러한 프로그램을 위해서 hardware를 직접 할당하게 되면, 이 프로그램은 computer의 resource를 영원히 lock하고 있을 것입니다.

다른 프로그램들이 원할하게 resource를 할당 받을려면 , 어떤 application이 resource를 lock 하고 있더라도, 다른 application 들이 이것에 방해받지 말고 resource를 할당 받을 수 있어야 합니다.

Isolation

한 application에서 발생한 error가 다른 application에 영향을 끼치면 안되고, OS 그 자체에도 영향을 끼치면 안됩니다. 이를 fault isolation이라고 합니다 . 만약에 , fault isolation이 없다면 , 한 application이 가지고 있는 data structure 나 다른 resource에도 영향을 끼칠 것이고 debugging이 힘들어 질 것입니다. 또한, 한 application이 실행되는 hardware의 모든 power를 사용하지 않도록 제한을 할 수도 있습니다. 또한, malicious software가 OS에 영향을 끼치는 것을 막을 수 있습니다.

Communication

다른 user 뿐만 아니라 application끼리 소통을 해야 하는 상황이 생길 수 있습니다. 하지만, OS는 위에서 언급한 fault isolation이 한 application에서 발생한 bug가 다른 application에 영향을 끼치는 것과 malicious 한 software가 OS나 다른 application에 영향을 끼치는 것을 방지하고 있습니다. 그렇다면 application 끼리 communication을 할려면 어떻게 해야 할까요? 이러한 application끼리의 boundaries를 설정할 때 , communication이 필요해지면 , 신중하게 boundaries를 넘을 필요가 있습니다.

위에서 언급한 이러한 challange들의 균형을 맞추는 것이 operating system의 역할입니다 .

Illusionist

OS는 Physical hardware는 제한이 있고 유한합니다. 이 hardware resource를 어떻게 나누어서 할당할 것인지를 결정해야 합니다. Operating System은 hardware의 abstraction을 제공해서 applicatoin을 설계하는 것을 간단하게 만들어 줍니다.

Virtualization이라는 것을 통해서 OS는 application에게 실제 hardware가 아닌 hardware의 illusion을 제공합니다. 적절한 hardware와 OS가 주어진다면, 대부분의 resource들은 virtualized 될 수 있습니다 . 하지만, OS는 user 와 application에게 무한한 virtual memory가 있는듯 한 illusion을 제공합니다. 예시를 들어 보겠습니다.

  1. WireLess Network가 packet을 손상시키거나 누락시켜도 , OS는 이 failure들을 감추어서 reliable한 system인 듯한 illusion을 제공합니다.
  2. 대부분의 programmer hireachical 한 directory 안에서 이름을 가진 byte addresse 파일들로 작업을 합니다.
  3. processor의 type도 virtualize해서 한 application이 다른 smartphone에서 실행될 수 있도록 해줍니다.

image

전체 computer를 virtualize해서 그 위에서 os를 실행시키기도 합니다. 마치 , os위에서 실행시키는 application 처럼 실행시킵니다. 이러한 것을 virtual machine이라 부릅니다 . virtual machine에서 실행되는 os를 Guest Operating System이라 부릅니다 . 이러한 virtual machine의 장점중 하나는 바로 portability입니다. old version의 os에서만 돌아가는 applicatoin이 있을때 , new version의 OS에서 virtual machine을 만들고 guest operating system을 이용해서 실행될 수 있도록 해줍니다. 또한 , debugging을 도와줍니다. OS는 debugging을 하기가 어려운데, virtual machine은 application처럼 실행되기에 , breakpoint를 설정하고 ,kerenl을 멈추고, code의 single line을 실행할 수 있게 됩니다.

Common Service

OS의 3번째 핵심 역할은 application에게 표준화되고 , 공통적인 sevice를 제공해줍니다. 이 service를 이용해서 application을 더욱더 간단하게 설계할 수 있게 해줍니다 . OS는 network device와 disk device가 어떻게 작동하는지 user와 application에게 숨김니다 .

이렇게 공용화되고 공통된 service를 제공하는 중요한 이유중 하나는 application간에 data sharing을 용이하게 하기 위해서 입니다. data를 서로 공유하기 위해서는 data는 표준화된 format으로 저장되어야 하고 , 표준화된 system으로 file directories를 관리해야 합니다 .

OS가 제공하는 표준화된 service의 예시는 아래와 같습니다.

  • general interface for difference graphic co processor , pixel format , network device.. etc.
  • graphical user interface library
    • pull down menu
    • cut and paste

Reference

Operating Systems: Principles and Practice: Anderson, Thomas, Dahlin, Michael: 9780985673529: Amazon.com: Books

CS 162 — Spring 2021 (berkeley.edu)

Leave a comment