안녕하세요? 허니입니다. 예전 리눅스가 나오면서 더이상 운영체제는 발전될 수 없다는 말들이 나왔습니다. 그렇다면 운영체제가 미래에 쓰일것인지?에 대해 궁금하실 수도 있을 것이라 생각합니다. 오늘은 운영체제가 왜 미래에 쓰일지에 대한 의문점이 나왔는지와 설계 목표가 무엇인지에 대해 설명 드리겠습니다. 학생이나 연구원분들에게 많은 도움이 될 것이라고 생각하며 언제든지 질문은 환영입니다.

 


오늘의 주제

 

 오늘날의 운영체제의 역할의 증대, 미래는?

 운영체제의 설계 목표

 


오늘날의 운영체제의 역할의 증대, 미래는?

 

분명 오늘날까지는 OS의 역할은 계속 증대되어 왔다. 그렇다면 미래에도 그 역할이 계속 증대될까? 초기 컴퓨터는 업무에 따라 사무계산용, 과학 계산용 등으로 구분되어 일정한 작업만을 수행했기에 OS란 개념이 크게 자리잡지 못했다. 그러나 오늘날에는 컴퓨터 한 대로 모든 분야에 적용이 가능하게 되었다. 따라서 컴퓨터 시스템과 적용업무 사이에 다리 역할을 하는 OS도 이러한 변화와 다양성에 적응할 수 있도록 설계되고 있다. 오늘날에는 컴퓨터와 통신의 만남으로 새로운 장이 열리고 가전제품과 컴퓨터의 결합으로 각 전자업체마다 가전 PC의 이름을 걸고 새로운 제품을 앞 다퉈 내놓고 있는 실정이다. (전자제품 광고를 유심히 본다면 이러한 제품들을 알게 될 것이다.) 바로 가전과 컴퓨터의 결합이 OS의 역할을 더욱 증대시켜 놓았다. 예전 TV와 PC의 결합인 Web TV 등이 있었고, 최근에는 어디에나 PC가 있다는 ‘유비쿼터스’ 컴퓨팅 환경이 미래 산업으로 각광을 받고 있다. 또한 머지않은 미래에는 운전자의 손으로 통제되던 자동차 운전 시스템도 컴퓨터에 의해 조정되는 날이 올 것이다. 자동차에 내장된 컴퓨터는 전국 곳곳의 도로와 신호처리체계, 평균 차량 운행 량, 속도에서 사람의 접근 여부 등까지 안전 운전에 필요한 모든 요소들을 파악해 자동차 스스로가 운전할 수 있게 할 것이다. 운전자는 자동차 안에서 편히 앉아 신문을 봐도 친구들과 맘껏 얘기를 나눠도 아무런 문제가 없는 그 시대엔 음주운전을 단속했던 경찰들은 할 일이 없어 심심해할지도 모를 일이다. 바로 OS는 컴퓨터가 우리 생활 속에 편리함으로 파고들 때마다 그 영역을 넓혀 나가고 있는 것이다. 별도의 사용방법을 가지고 있던 두 가지의 제품이 하나로 탄생했다면 그 시스템 내부를 OS가 얼마나 바쁘게 뛰어다녀야 할지 더 이상 설명하지 않아도 될 것이다. 

 


운영체제의 설계 목표

우리가 지금 배우고 있는 이 과목의 목표는 바로 OS의 기능을 이해하는 것이다. OS의 기능을 이해하기 위해선 무엇보다도 OS가 어떻게 설계되는가를 살펴볼 필요가 있다. OS 의 설계 목표는 간단히 말해 ‘처리능력의 극대화’이다. 이 목표를 달성하기 위한 전제조건은 바로 시스템에 생기는 유휴시간(ideal time)의 최소화이다. 앞에서 설명한 OS의 역사를 상기해 보면 바로 유휴시간의 최소화를 위한 변화의 몸부림이었다 해도 과언은 아닐 것이다. OS는 새로운 하드웨어나 새로운 기술을 간단히 받아들여 성장해 갈 수 있도록 설계되어야 한다. CD롬이 이렇게 대중화된 것이 불과 10년도 되지 않았는데 그보다 몇 배 많은 저장공간을 제공하는 DVD롬이 개발되었고, 개인이 DVD롬을 작성할 수 있는 DVD-Writer도 서서히 대중화되고 있다. 또 인터넷이 개발된 것 역시 최근 몇 년 전의 일인데, 이제 모든 정보가 인터넷을 통해 전달되는 것처럼 보인다. 정보화 사회는 모든 것을 빠르게 변화 시키고 있다. 이러한 정보화 사회로의 이행은 그 토대가 되는 컴퓨터 시스템의 발전 없이는 불가능하다. 일시에 수많은 사람들이 통신에 접속할 수 있게 되었고 이젠 앉은 자리에서 세계 여러 국가와 동영상회의를 할 수도 있고 무역업무도 처리할 수 있게 되었다. 이러한 급격한 변화 속에 OS는 그런 변화를 받아들이기 위해 그보다 한발 앞서 변화되고 있는 것이다. 컴퓨터 시스템을 통한 업무들이 끊임없이 발전할 동안 OS 역시 끊임없이 발전할 것이다.

 

OS 설계 원리가 필요한 이유를 상세히 살펴보면 다음과 같다.

1. 컴퓨터 시스템의 구조는 매우 복잡하다. 하나의 프로그램에는 수십만 라인 정도의 코드가 연결되어 있을 정도이다. 복잡한 컴퓨터 시스템 구조를 운영하기 위해선 보다 정밀한 설계원리가 필요하지 않을까?

2. 하나의 시스템을 여러 사람이 사용할 경우가 있다. 여러 시스템 사용자들이 보다 공정한 자원의 분배와 편리성을 위해 OS는 설계되어야 한다.

3. 기술의 발전에 따라 새로운 컴퓨터 장치의 등장 가능성이 있다. 새로운 장치가 등장했을 경우 그것의 업무 영역을 보다 쉽게 받아들일 수 있게 설계되어야 한다. 미래에는 어떤 새로운 장치들이 컴퓨터와의 결합을 시도할는지 현재로서는 아무도 모른다. 그렇기에 OS는 항상 이러한 가능성을 염두에 두고 설계되어야 한다.

4. 디버깅의 편리성을 고려해야 한다. 모든 일에는 크고 작은 실수가 따르기 마련이다. 중요한 것은 하나의 실수에 대해 보다 발 빠른 대처가 있어야 한다는 것이다. 이것은 OS를 설계할 때 빠뜨려선 안될 개념 중에 하나이다.

 

설계원리 (1) Layering

OS의 설계자들은 보다 편리한 OS를 위해 수 많은 설계방법들을 고려했다. 그 중 Layering 설계방법은 OS를 여러 계층으로 나누어 설계한 것이다. 우리가 옷을 정리할 때 가장 간편한 정리 방법은 뭘까. 서랍장에 속옷은 속옷끼리 티셔츠는 티셔츠끼리 옷의 종류별로 정리를 해 넣는다면 옷을 찾기도 다시 정리하기도 휠씬 간편할 것이다. 이와 같이 Layering 설계방법은 OS의 기능을 나누어 여러 개의 계층으로 구성한 것을 말한다.

 

그림 8 여러 개의 층으로 구성된 OS/2의 layer 구조

 

Layering의 특징은 다음과 같다.

 - 각 계층은 저마다의 기능을 수행한다. 층마다 수행할 기능들이 나누어져 있으므로 보다 확실하게 업무를 수행할 수 있는 것이다. 예를 들어 통신상에서 메시지를 주고 받을 때 A층에서는 메시지를 받는 기능을 수행하고 B층에서는 메시지를 잘라서 C층에서는 메시지를 보내는 역할을 수행하게 설계할 수 있다.

 - A 층에서 수행되는 기능들은 B층에서는 수행이 불가능하다. 각층의 수행기능들이 합쳐져 버린다면 애써 층을 나눈 의미가 무색해질 것이다.

 - 한 층에서 업무를 마치면 한 단계 위 또는 아래로는 이동이 가능하지만 두 단계이상은 이동하지 않는다.

 - Layering의 단점은 계층간에 자유로운 이동이 불가능하여 overhead가 크다는 점이다.

 

 질문) 컴퓨터기술이 발달함에 따라 항상 새로운 OS가 필요한가?

 답) 물론 그렇진 않다. 기존의 OS에 새로운 기능을 확장하면 된다. 따라서 OS는 다양한 기능들의 확장에 적절히 적응하기 위해 설계 시 모듈화가 중요한 개념으로 등장한다.


설계원리 (2) 모듈화(Modularization)

우리는 하나의 건물을 지을 때 그 장소에 모여 각자가 맡은 일을 하게 될 것이다. 어떤 인부는 벽을 쌓고, 어떤 인부는 바닥을 깔고, 수도관이나 전기배선 등을 설치하는 인부도 있을 것이다. 좁은 한곳에 모여 작업을 하기 때문에 서로간의 의사소통이나 작업들간에 진척되는 상황들에 대한 점검이 매우 복잡할 것 같지 않은가? 보일러 파이프 관이 아직 묻히지 않았다는 것을 모른 채 바닥을 깔았다면? 전기공사가 완성되지도 않았는데 이미 벽지를 발랐다면? 실제작업보다 보수를 위한 시간과 비용이 더 들어갈지도 모르는 일이다. 이러한 문제를 겪어본 누군가에 의해 조립식 건축이라는 새로운 건축방식이 개발되었을 것이다. 벽, 바닥재, 천장 등을 각기 따로 제작한 후 현장에서 마무리를 하게 되는 이 방식은 대규모 건축일수록 그 효과가 높을 것이다. 바로 이러한 개념으로 출발한 OS의 설계 방법이 바로 모듈화(Modularization)인 것이다. 대규모 프로그램을 개발하기 위해 작은 프로그램으로 분할, 작성한 다음 이들을 결합 시키는 것으로 모듈화는 시스템의 확장 성을 높이며 개발, 보수를 쉽게 할 수 있는 방법으로 널리 알려져 있다. 모듈화의 기본은 모듈과 모듈은 가능한 한 독립적이어야 한다는 것이다. (모듈간의 연관성이 높아지면 개발, 보수가 쉽다는 장점이 다시 원점으로 돌아갈 것은 뻔한 일이다.) 또한 모듈간의 의사소통은 단순하고 명확해야 하며 상세한 내부사항은 가능한 한 숨기는 것이 좋다. 이것을 정보의 은폐(information hiding)라 한다. 정보의 은폐가 보다 효과적인 이유는 A모듈이 갖고 있는 모든 정보들이 B모듈에게 전달된다면 분명 모듈간에 communication 시간이 길어져 시스템이 비능률적이기 때문이다. 바로 조립식 건축물의 바닥재를 시공하는 인부가 벽면 시공자에게서 알고 싶은 정보는 벽면의 사이즈와 언제 조립이 가능한지에 관한 몇 가지 정보만일 것이다. 벽면이 어떻게 제작되는지에 관한 세부적 사항은 벽면시공인부만이 알고 있으면 되는 것이다.

 

 


요점정리

 운영체제의 미래

초기 컴퓨터는 업무에 따라 사무계산용, 과학 계산용 등으로 구분되어 일정한 작업만을 수행했기에 OS란 개념이 크게 자리잡지 못했다. 그러나 오늘날에는 컴퓨터 한 대로 모든 분야에 적용이 가능하게 되었다. 따라서 컴퓨터 시스템과 적용업무 사이에 다리 역할을 하는 OS도 이러한 변화와 다양성에 적응할 수 있도록 설계되고 있다.

 

 운영체제 설계 원리의 필요성

1. 컴퓨터 시스템의 구조는 매우 복잡하다.

2. 하나의 시스템을 여러 사람이 사용할 경우가 있다.

3. 기술의 발전에 따라 새로운 컴퓨터 장치의 등장 가능성이 있다.

4. 디버깅의 편리성을 고려해야 한다.

 

 운영체제의 설계방법

- Layering

OS의 설계자들은 보다 편리한 OS를 위해 수많은 설계방법들을 고려했다. 그 중 Layering 설계방법은 OS를 여러 층으로 설계한 것이다.

- 모듈화(Modularization)

대규모 프로그램을 개발하기 위해서 작은 프로그램으로 분할, 작성한 다음 이들을 결합하는 것으로 모듈화는 시스템의 확장성을 높이며 개발, 보수를 쉽게 할 수 있는 방법으로 널리 알려져 있다. 

 


목 차

 운영체제를 시작하는 분들을 위해

 운영체제의 역사와 구체적으로 어떤 일들을 수행하나요?

 운영체제의 목표와 역할이 미래에도 계속 증대될까요?

 운영체제를 이해하기 위해 필요한 기본 개념들은 무엇인가요?

 운영체제 프로세스 생애주기(Process Lifecycle)는 무엇인가요?

 운영체제 프로세스 관리(Process Management)는 어떻게 하나요?

 운영체제 프로세스(Process)의 처리 속도는 어떻게 높일까?

 운영체제 스레드(Thread)는 무엇인가요?

 운영체제 스케줄링 (Scheduling)은 어떻게 하나요?

 운영체제 스케줄링 알고리즘의 비교 기준이 있나요?

 운영체제 프로세스 동기화가 무엇인가요?

 운영체제에서 세마포어(Semaphore)란?

 운영체제 메모리 관리(Memory Management)는 어떻게 하나요?

 운영체제 메모리 분할 방법은 어떻게 하나요?

 운영체제 가상메모리(Virtual Memory)는 무엇인가요?

 운영체제 Page in/out, Swapping 등이 Page Table Entry와 어떤 관계인가요?

 운영체제 메모리 관련해서 알아야 할 개념은 어떤것이 있나요? (TLB, Locality, Working Set, Overlay)

 운영체제 Page replacement (페이지 대체) 알고리즘이란?

 운영체제 파일시스템(File System)은 어떻게 운영되나요?

 운영체제 파일시스템 내부구조는 어떻게 되나요?

 운영체제 디스크 공간 할당(Disk Space Allocation) 알고리즘과 효과적 알고리즘의 판단 기준은?

 운영체제 파일시스템에서 접근 시간, 디스크 스케줄링을 위한 알고리즘, I/O 시스템이란?

 리눅스 인터럽트 (Interrupt)에 대해 자세히 설명해 주세요.

 인텔 구조에서 운영체제 가상 메모리 (Virtual Memory)는?

 운영체제 아키텍처의 종류는 얼마나 있나요?



+ Recent posts