기록공간

1-4장. 운영체제 개요 - 설계 목표와 역사 본문

OS

1-4장. 운영체제 개요 - 설계 목표와 역사

입코딩 2020. 2. 4. 22:48
반응형

설계 목표

가장 기본적인 설계 목표는 시스템을 편리하고 사용하기 쉽게 만드는 데 필요한 것들을 추상화시키는 것이다. 추상화는 컴퓨터 과학 모든 것의 근간이라고 할 수 있다. 추상화를 통해서 큰 프로그램을 쉬운 작은 부분들로 나누어 구현할 수 있다. 추상화는 어셈블리 코드를 몰라도 C언어와 같은 고수준 언어로 프로그램을 작성하는 것이 가능하게 해 주고, 더 나아가서 논리 게이트를 몰라도 어셈블리 코드를 작성할 수 있게 해 주며, 더더욱 나아가서는 트랜지스터에 대한 지식이 없어도 게이트를 이용하여 프로세서를 만들 수 있게 한다. 이렇게 운영체제는 추상화를 이용하여 사용자가 시스템을 쉽게 사용할 수 있도록 해준다.

 

기본적인 목표는 아니지만 운영체제를 설계하는데 가장 중요한 목표는 성능이다. 다른 말로는 오버헤드 최소화(Minimize the overhead)라고 한다. 운영체제는 추상화된 기능들을 오버헤드 없이 제공해야 한다. 오버헤드는 시간(많은 명령어)과 공간(메모리 또는 디스크)의 형태로 나타난다. 시간이나 공간 혹은 둘 다 최소로 하는 해결책을 찾아야 한다. 항상 완벽한 해답을 얻을 수는 없다. 알맞는 절충선을 찾는 것이 중요하다.

 

또 다른 목표는 응용 프로그램 간의 혹은 운영체제와 응용 프로그램 간의 보호이다. 여러 프로그램들이 동시에 실행되기 때문에, 운영체제는 한 프로그램의 악의적인 또는 의도치 않은 행위가 다른 프로그램에 피해를 주지 않는다는 것을 보장해야 한다. 보호는 운영체제의 원칙 중 하나인 고립(Isolation) 원칙의 핵심이다. 고립은 프로그램의 오동작이 다른 프로그램이나 운영체제에 피해를 입히지 않도록 하는 것이다. 이것은 운영체제가 해야 하는 일 중 많은 부분의 근간이 된다.

 

운영체제는 높은 수준의 신뢰성(Reliability)을 제공해야 한다. 운영체제는 도중에 죽지말고 계속 실행되어야 한다.  왜냐하면 운영체제가 죽으면 그 위에서 실행되는 모든 응용 프로그램들도 죽기 때문이다. 운영체제가 복잡해질수록, 신뢰성 있는 운영체제를 구현하는 일은 매우 어려워진다. 운영체제 분야의 많은 연구들이 바로 이 문제에 초점을 맞추고 있다. 

 

그밖에 에너지-효율성(Energy-efficiency), 보안(Security), 그리고 이동성(Mobility)과 같은 추가적인 목표들이 존재한다. 

 

보통 시스템의 목적에 따라, 운영체제는 다른 목표를 지향하게 되고, 구현이 달라진다.

 

역사 

초창기 운영체제 : 단순 라이브러리

초창기 운영체제는 많은 일을 하지 않았다. 기본적으로 자주 사용하는 함수들을 모아 놓은 라이브러리에 불과했다. 예를 들면 저수준 입출력 처리 코드를 작성하는 것이 아니라 운영체제에서 그런 API를 제공하였다. 이렇게 작업을 묶어서 한꺼번에 처리하는 것을 일괄처리(Batch)라고 한다. 

 

Main frame computer, IBM System/360, 1964

 

라이브러리를 넘어서 : 보호

단순한 라이브러리를 넘어서 운영체제는 컴퓨터 관리 면에서 더 중심적인 역할을 하게 된다. 운영체제가 실행하는 코드는 장치를 제어했기 때문에 응용 프로그램 코드와는 다르게 취급되어야 한다. 만약에 어떤 프로그램이든지 디스크에 원하는 지점을 읽을 수 있다고 상상해 보자. 어떤 프로그램이든지 원하는 모든 파일을 읽을 수 있기 때문에 사생활이라는 개념이 사라지게 될 것이다. 때문에, 라이브러리 형태로 파일 시스템을 구현하는 것은 의미가 없어 다른 대처 방안이 필요하게 되었다. 

 

그래서 나온것이 시스템 콜(System call)이었다. 운영체제를 라이브러리가 아닌 특별한 하드웨어 명령어와 하드웨어 상태를 결합하여 운영체제로 전환하기 위해서는 정해진 규칙에 따라 제어 가능한 과정을 거치도록 만들었다.

 

시스템 콜은 제어를 운영체제에게 넘길 때 하드웨어 특권 수준(Hardware privilege level)을 상향 조정한다. 사용자 응용 프로그램은 사용자 모드(User mode) 상태에서 실행된다. 사용자 모드에서 응용 프로그램은 할 수 있는 일을 하드웨어 적으로 제한한다. 그러한 이유로 사용자 모드에서는 디스크 입출력, 물리 메모리 페이지 접근 또는 네트워크 패킷 송신 같은 작업들을 할 수 없다. 

 

시스템 콜 시작 시, 하드웨어는 미리 지정된 트랩 핸들러(Trap handler) 함수에게 제어권을 넘기고 특권 수준을 커널 모드(Kernel mode)격상시킨다. 트랩 핸들러 함수는 운영체제가 미리 구현해 놓는다. 커널 모드에서 운영체제는 시스템의 하드웨어를 자유롭게 접근할 수 있으며 입출력 또는 메모리 할당 등과 같은 작업을 할 수 있다. 운영체제가 서비스를 완료하면 return-from-trap 특수 명령어를 사용하여 제어권을 다시 사용자에게 넘기며 사용자 모드로 다시 전환한다.

 

멀티프로그래밍 시대

운영체제 다운 운영체제의 실제 등장은 미니 컴퓨터(Minicomputer)의 보급 시대에 이루어졌다. 컴퓨터 가격의 하락으로 개발자들의 활동이 활발해졌고, 많은 인력이 컴퓨터 분야로 모여들어 컴퓨터 시스템이 더 흥미롭고 멋진 일들을 하게 만들었다.

 

컴퓨터 자원의 효율적인 활용을 위해 멀티프로그래밍(Multiprogramming) 기법이 대중으로 사용되었다. 한 번에 하나의 프로그램만 실행시키는 대신 운영체제는 여러 작업을 메모리에 탑재하고 작업들을 빠르게 번갈아 가며 실행하여 CPU 사용률을 향상한다. 

 

입출력 장치가 느리기 때문에 전환(Switching) 능력이 특히 중요하였다. 입출력 요청이 서비스 되고 있는 동안 CPU가 대기하는 것은 CPU 시간 낭비를 초래한다. 대신 그동안 다른 작업으로 전환하여 잠깐이나마 실행하여 CPU의 사용률을 높인 것이다.

 

이렇게 멀티프로그래밍 자원 필요와 인터럽트를 통한 입출력 작업 처리 등이 운영체제의 발전에 여러 가지 혁신을 가져왔다. 메모리 보호(Memory protection)와 같은 주제가 중요하게 되었다. 한 프로그램이 다른 프로그램의 메모리에 접근하는 것을 원치 않았기 때문이다. 또한 프로그램 사이의 공유 자원에서 발생하는 병행성(Concurrency) 문제에 대한 이해도 중요하다. 

 

그 당시에 그 유명한 UNIX가 등장하였다. UNIX는 Bell 연구소의 Ken Tompson과 Dennis Richie가 만들었다. UNIX는 다른 운영체제로부터 좋은 아이디어(시분할 시스템, Shell, Pipe, Signal 등)를 많이 도입하였고 더욱 단순하고 사용하기 쉽도록 변형하였다. UNIX는 모든 현대 운영체제의 조상으로 불릴 만큼 중요한 핵심 운영체제로 자리매김하였다. 

 

PDP-11, 1970

 

현대 

미니컴퓨터 시대를 지나 더 싸고, 더 빠른 대중적인 컴퓨터가 등장하였다. 현재 개인용 컴퓨터(Personel computer) 또는 PC라고 불리는 컴퓨터이다. Apple과 IBM에 의해 주도된 이 새로운 종류의 컴퓨터는 그룹당 하나의 미니컴퓨터 대신 책상마다 하나의 컴퓨터를 놓을 수 있을 만큼 가격이 쌌기 때문에 컴퓨팅의 주도 세력이 되었다.

 

하지만 불행하게도 운영체제의 입장에서는 PC의 등장이 퇴보를 의미하였다. 초기 PC들은 미니컴퓨터 기술로부터 얻었던 소중한 경험들을 무시하거나 아예 이에 대해 무지했기 때문이다. 

 

예를 들어 DOS(Disk Operationg System, from Microsoft) 같은 초기 운영체제는 메모리 보호가 중요하다는 생각조차 하지 않았다. 따라서 악의적인 혹은 잘못 개발된 응용 프로그램이 메모리 전체를 손상시킬 수 있었다.

 

1세대 Mac OS는 작업 스케줄링에 협업 스케줄링을 채용하였다. 스레드가 우연히 무한루프에 빠지면, 전체 시스템을 정지시키게 되고, 결국 재부팅을 할 수밖에 없었다. 이 세대에 사라져 버린 운영체제들이 많았다. 

 

Microsoft의 주도하에 운영체제에 GUI(Graphic User Interface)가 도입된 시기이기도 하다. 시스템의 전반적인 기능들을 눈으로 볼 수 있게하여 사용자가 운영체제를 더욱 사용하기 쉽도록 해주었다.

 

그리고 암흑기가 지난 뒤, 예전 미니컴퓨터 운영체제 기법들이 PC용 운영체제에 등장하기 시작했다. 예를 들어 Mac OS는 UNIX를 근간으로 하며 UNIX의 모든 특성을 가지고 있다. Windows 역시 컴퓨팅 역사의 위대한 아이디어 중 많은 것들을 채택하였다. 이러한 노력들을 2000년부터 시작되었다. 이때부터 운영체제의 기술이 크게 발전하였다. 

 

현대에 거의 대부분의 컴퓨터와 연관있는 것들은 운영체제를 갖고 있다. 오늘날 이동전화도 Linux 같은 운영체제를 실행하고 있는 것만 봐도 충분히 알 수 있다.

 

Personel Computer, 1981

 

다양한 분야의 컴퓨터 안에는 필수적으로 운영체제가 들어가있다

 

반응형

'OS' 카테고리의 다른 글

2-1장. 프로세스 API  (0) 2020.02.14
2장. 가상화  (0) 2020.02.07
1-3장. 운영체제 개요 - 영속성  (2) 2020.02.04
1-2장. 운영체제 개요 - 병행성  (0) 2020.02.04
1-1장. 운영체제 개요 - CPU 가상화  (0) 2020.02.04
Comments