운영체제 기본 배경 (왜 운영체제를 공부해야 할까)

 

운영체제의 초기에는 단지 자주 사용되는 함수들을 모아놓은 라이브러리에 불과했다. 오늘날 운영체제가 담당하는 일들을 옛날엔 컴퓨터 관리자가 프로그램을 모아서 한번에 실행하는 것으로 그 역할을 담당했다. 당시 컴퓨터는 비용이 너무 비싸서 오늘날의 대화방식(interactive)을 사용할 수 없었고, 대신 값싼 일괄처리방식(batch)를 사용했다. (메인 프레임 시대)

 

이렇게 여러 프로그램을 동시에 처리하는 도중 모든 프로그램이 디스크의 원하는 위치를 읽을 수 있다면 개인정보의 보호가 불가능해진다. 이로 인한 해결책으로 시스템 콜이라는 아이디어가 발명됐다. 운영체제와 일반 라이브러리가 구분되는 사건이다. 시스템 콜과 함수 호출의 결정적 차이는 시스템 콜은 제어를 운영체제에게 넘길 때 하드웨어 특권 수준을 상향조정한다는 것이다.

시스템 콜은 보통 trap이라 불리는 특별한 하드웨어 명령어를 이용하여 호출한다. 시스템 콜 시작 시, 하드웨어는 미리 지정된 트랩 핸들러trap handler 함수에게 제어권을 넘기고 특권 수준을 커널 모드 kernel mode로 격상시킨다. 커널 모드에서 운영체제는 시스템의 하드웨어를 자유롭게 접근할 수 있다.

사용자 응용 프로그램은 사용자모드 user mode라고 불리는 상태에서 실행되는데, 이 모드에서는 응용 프로그램이 할 수 있는 일을 하드웨어적으로 제한한다. 이 모드는 디스크 입출력, 물리 메모리 접근 같은 작업이 불가하다.

 

이후부터 운영체제 다운 운영체제가 등장했다. (미니컴퓨터 시대)

기존의 한번에 하나의 프로그램만 실행시키는 방식 대신 여러 작업을 메모리에 탑재하고 작업들을 빠르게 번갈아 가며 실행하여 cpu 사용률을 향상시키는 멀티프로그래밍 기법이 사용됐다. 입출력 장치가 느리기 때문에 전환 switching능력이 특히 중요했다.

 

미니컴퓨터 시대를 지나 더 싸고 빠른 대중적인 컴퓨터 personal computer PC가 등장했다.

운영체제의 입장에서는 pc의 등장이 퇴보를 의미했다. 초기 pc는 미니컴퓨터 기술로부터 얻은 기술을 무시하거나 무지했다. 하지만 암흑기 이후 다시 미니컴퓨터 기술로부터 얻은 운영체제 기법(예를들면 macOS는 Unix를 근간으로 한 특성을 지님)을 적용하면서 발전했다. (그리고 이후 자신만의 Unix버전을 개발하기로 한 해커로 인해 LINUX가 나왔다.)

 

 

뭔가 복잡하게 말한 것 같지만 컴퓨터는 쉽게 말하자면 반입, 해석, 실행의 반복이다.

운영체제는 이러한 시스템을 사용자가 사용하기 쉽게 하기위한 것으로, 앞으로 이와 관련된 여러가지 일들에 대해 공부할 것이다. 교재의 제목이기도 한 운영체제를 사용하기 쉽게 하는 세 가지 일들에 대해 아주아주 간단하게 알아보자.

 

 

 

가상화 virtualizing

하드웨어의 도움을 받아 운영체제가 시스템에 수많은 가상 cpu가 존재하는 듯한 환상을 만들어서 수많은 프로그램을 동시에 실행시키는 것이다.

이렇게 가상화를 통해 여러개의 프로그램을 실행시킬 때, 프로그램을 실행하고, 멈추고, 다시 어떤 프로그램을 실행할 것인지 운영체제에게 알려줘야 한다. 가상화에 대해 공부할 때는 사용자가 운영체제에게 원하는 것을 쉽게 전달할 수 있는 인터페이스api ( Application Programming Interface )에 대해 주로 공부할 것이다.

 

 

병행성 concurrency

프로그램이 한번에 많은 일을 하려 할 때 동시에 발생하고 반드시 해결해야 하는 문제들을 가리킬 때 이 용어를 사용한다.

같은 메모리 공간에 다수의 쓰레드가 동시에 실행되는 경우를 가정해보자. 하지만 명령어는 한번에 하나씩만 실행될 때, 각각의 명령어들이 원자적으로(한 번에 명령어들 모두) 실행되지 않는 상황에 대한 문제를 해결하는 방법을 배운다.

 

 

영속성 persistence

몇몇 장치는 데이터를 휘발성 volatile 방식으로 저장하기 때문에 메모리의 데이터는 쉽게 손실될 수 있다. 이 경우 전원이 꺼지거나 시스템이 갑자기 crash되면 메모리의 모든 데이터는 사라진다. 이와 같은 경우 때문에 데이터를 영속적으로 저장할 수 있는 하드웨어와  소프트웨어에 대해 공부한다.

 

 

 

위의 세 가지를 바탕으로 우리는 운영체제를 쉽게 사용할 수 있도록 설계해야 한다.

이 세 가지를 간단하게 다시 말하자면 운영체제는 cpu, 메모리, 디스크와 같은 물리 자원을 가상화하고, 이로 인하여 병행성과 관련된 복잡한 문제를 처리한다. 이후 파일을 영속적으로 저장하여 오랜 시간 동안 안전한 상태에 있게 한다.

이러한 시스템을 구현하기 위해 목표해야 할 방향은 우선 시스템을 편리하고 사용하기 쉽게 만드는 데 필요한 개념 (추상화 abstraction)들을 정의하는 것이다. 추상화를 통하여 큰 프로그램을 이해하기 쉬운 작은 부분들로 나누어 구현할 수 있다.

다음 목표는 성능이다. 다른말로 표현하면 오버헤드를 최소화하는 것이다. 앞에서 말한 가상화나 사용하기 쉬운 시스템은 의미가 있지만 필수는 아니다. 오버헤드는 시간(더 많은 명령어)과 공간(메모리 또는 디스크)의 형태로 나타난다. 시간과 공간을 최소로 해결하는 절충법을 목표로 한다.

마지막 목표는 응용 프로그램 간의 보호, 그리고 운영체제와 응용 프로그램 간의 보호이다. 다수의 프로그램들이 동시에 실행되기 때문에, 각 프로그램들의 실행이 다른 프로그램에게 피해를 주지 않을것을 보장해야 한다. 이는 운영체제의 원칙 중 하나인 고립 원칙의 핵심이다.