안녕하세요? 허니입니다. 오늘부터 저는 지난 몇년동안 동고동락하였던 전공분야 운영체제에 대해 포스팅 하려고 합니다. 많은 부분 미흡할 수 있으나 처음 운영체제를 접해보는 학생이나 연구원분들에게 많은 도움이 될 것이라고 생각합니다. 언제든지 질문은 환영입니다.
오늘의 주제
운영체제를 시작하며
컴퓨터 시스템은 어떤 구조로 이뤄졌을까
소프트웨어를 분류하자면
운영체제는 왜 필요한가
OS를 시작하며
우리가 일반 서점에서 컴퓨터 잡지나 서적들을 뒤적여 보면 사용자가 어떻게 하면 컴퓨터를 보다 쉽게 사용할 것인가, 어떻게 하면 인터넷이나 통신을 통해 유익한 정보들을 보다 쉽게 찾을 것인가 하는 등의 사용자 중심적인 내용을 전하고 있다. 그러나 OS는 컴퓨터 사용자들에게 보다 편리함을 제공하기 위해 시스템 설계자의 입장에서 컴퓨터 시스템을 바라본 것이다. OS는 한 국가를 운영하는 정부 같다고 비유할 수 있다.. 정부는 국민들이 보다 수준 높은 생활을 하기를 바라며 제한된 자원들을 효율적으로 운용하기 위해 항상 애쓰고 있다. 컴퓨터 시스템의 사용자는 구체적으로 말하자면, 컴퓨터 시스템에서 실행되고 있는 사용자의 프로그램은 정부로서의 운영체제가 관리하는 국가의 국민인 것이다. 서론에서는 OS의 기본적인 개념과 컴퓨터 시스템을 이용하는데 왜 OS가 필요한지 생각해 보고, 이러한 개념들을 모아서 체계적인 OS 의 개념을 완성하고자 한다. 이 강의의 목표는 수강생들이 보다 쉽게 OS를 이해할 수 있도록 하는 것으로, OS의 핵심부분인 프로세스 관리(process management), 메모리 관리(memory management), 파일 관리(file management)를 중점적으로 강의할 것이다. 이 강좌의 마지막 강의를 대할 때쯤 여러분들은 분명 OS에 자신감을 갖게 될 것이다.
컴퓨터 시스템은 어떤 구조로 이뤄졌을까
우리가 눈으로 보게 되는 컴퓨터 시스템은 기본적으로 모니터, 본체, 키보드, 프린터 등 일 것이다. 그러나 이러한 구분은 단순한 물리적인 구분일 뿐이다. 컴퓨터 시스템은 실질적인 기능에 따라 메모리, 중앙처리장치 그리고 주변장치로 구성된다. 이들 중 컴퓨터 시스템의 핵심은 산술논리연산장치와 제어장치로 구성된 중앙처리장치, 즉, CPU(Central Processing Unit) 이다. 산술논리연산장치는 계산기에 있어서 계산을 수행하는 부분이라 할 수 있고 제어장치는 메모리에 저장되어 있는 프로그램의 명령문을 해석하고 실행하는 기능을 한다. CPU는 컴퓨터 시스템에서 가장 중요한 부분으로 모든 컴퓨터는 적어도 1개 이상의 CPU를 가지고 있다. 주변 장치란 입력장치와 출력장치를 포괄하는 의미로 쓰인다. 입력장치란 키보드를 비롯해 마우스, 터치 스크린, 그리고 바코드 등과 같이 외부로부터 어떤 자료들을 입력 시킬 수 있는 장치를 말한다. 또한 출력장치는 프린터와 모니터(모니터 또한 컴퓨터로 처리된 결과물을 우리 눈에 보여주기에 출력장치라고 한다)등을 말한다. 입/출력장치와 디스크 드라이브, CD롬 드라이브 등의 요소를 포함한 것이 바로 주변장치인 것이다. 그리고 최근 컴퓨터 시스템에 빠지지 않고 거론되는 것이 바로 네트워크 장치이다. 또한 이러한 컴퓨터 시스템 내에 정보들이 전달될 수 있도록 사용되는 선로를 버스(bus)라고 일컫는다. 버스는 일반적으로 데이터신호를 전달하는 데이터버스, 메모리에 주소가 전달되는 주소버스, 그리고 주변장치를 연결하는 로컬 버스 등이 있다.
그림 1 컴퓨터 시스템 구조
CPU와 메모리가 어떤 기능을 하는지 잠깐 살펴보자.
예를 들어 컴퓨터 전원을 켜고 문서작업을 하기 위해 한글프로그램을 클릭하게 되면 디스크에 저장되어 있던 한글 프로그램은 작업을 수행하기 위해 메모리에 올라오게 된다. 이때 디스크에 저장되어 있는 한글 프로그램은 운영체제에서 인식할 수 있는 형태의 실행 파일이다. 운영체제는 이러한 프로그램 실행에 대한 요청이 들어오면 프로그램이 위치한 저장 장치에서 프로그램을 읽어와 자신의 메인 메모리에 프로그램 이미지를 만든 후에 하나하나의 명령어를 실행하게 된다. 한글작업을 하던 중 「저장」이란 명령어를 클릭하게 되면 한글프로그램에 명시되어 있듯 기존에 문서에 지금까지 했던 작업들을 덧붙여 놓을 것이다. 바로 사용자의 「저장」이라는 명령문이 실행된 것이다. 이렇듯 사용자가 의뢰한 작업을 컴퓨터 프로그램의 명령문 대로 수행하는 그 무엇인가를 우리는 프로세스(Process)라 부른다. 다시 말해 프로세스라는 개념은 작업처리를 진행하게 되는 하나의 단위이다. 바로 CPU는 프로그램이 아닌 프로세스를 수행하는 것이다.
그림 2 프로그램과 프로세스 메모리의 관계
그림 2는 프로그램이 어떻게 프로세스로 바뀌는지 ELF(Executable and Linking Format)형식의 실행 파일을 예로 든 것이다. 그림의 왼쪽이 저장 장치에 있는 프로그램이다. ELF뿐만 아니라 exe와 같은 다른 실행 파일 형식에는 자신만의 독특한 구조로 프로그램을 프로세스로 표현 할 수 있는 정보를 가지고 있다. 그러나 각기 다른 종류의 실행 파일 형식이라 하더라도 기본적으로 프로그램을 프로세스로 변환하기 위해서는 일련의 작업을 실행 할 수 있는 명령어들(text)과 프로그램의 실행 시 필요한 데이터(data)들이 필요하다. 운영체제는 이러한 실행 파일의 헤더(header) 부분을 분석하여 프로그램의 text와 data 영역을 메모리에 복사하고 추가로 heap과 stack 영역을 할당하여 프로그램으로부터 프로세스를 만들어 낸다.
CPU의 종류는 명령어의 많고 적음을 기준으로 RISC(Reduced Instruction Set Computing) 와 CISC(Complex Instruction Set Computing)로 나뉜다. CISC 칩의 대표적인 예로는 많이 사용되고 있는 Intel사의 chip을 예로 들 수 있다. 그리고 RISC의 경우에는 대형 서버나 워크 스테이션에 사용되는 Sun 사의 SPARC 칩이 있다. 또한 휴대폰이나 PDA에 많이 쓰이는 Arm 칩 역시 RISC에 해당된다. 그렇다면 왜 RISC 칩이 등장 했을까? 그 이유는 다음과 같은 발상에서 시작 되었다. 국어사전을 한번 생각해보자. 일일이 셀 수 없을 정도의 수많은 어휘들이 쓰여져 있다. 그러나 그 중 우리가 일상생활에서 주로 사용하는 어휘들은 몇 퍼센트나 될까? 아마 10%도 되지 않을 것이다. 이렇듯 CPU내에 내장된 명령어들 중에 20% 가 전체처리의 80%를 책임지고 있다는 것에 주목한 이들은 많이 사용되는 명령어만을 내장하여 처리속도를 증진시킨 RISC를 개발해 낸 것이다. 이렇듯 자주 쓰이는 20%의 명령어만을 하드웨어가 책임지고 나머지 80%의 명령어는 소프트웨어적으로 처리하게 되는 것이다.
우리가 컴퓨터를 사러 갔을 때 매장에서는 어떤 얘기가 가장 많이 오고 갈까? 아마도 ‘처리속도가 빠른 컴퓨터를 사고 싶어요’라는 얘기가 아닐까 싶다. 처리속도라는 것은 바로 사용자가 가장 가깝게 느끼는 컴퓨터 성능을 판단하는 지표일 것이다. 하지만 컴퓨터의 처리속도라는 것은 단순히 CPU하나만의 속도를 의미하는 것은 아니다. 하나의 프로그램이 처리되기 위해선 메모리 속도, 디스크의 속도까지 영향을 받기 때문에 이 세 가지의 속도는 함께 고려되어야 한다. 문제를 간단히 하기 위해서 예전에 사용되었던 CPU의 예를 들어 보겠다. 펜티엄MMX 200MHz(메가 헤르츠)의 CPU를 생각해 보자. 메가 헤르츠는 1초당 10에 6승에 해당되는 진동수 나타내는 수치이다. 또한 메모리는 70MHz의 처리속도를 가지고 있는데 메모리 처리속도라는 것은 CPU가 메모리에게 프로세스 처리를 위한 명령을 내렸을 때 메모리에 올려진 프로세스가 CUP로 이동되는 속도를 말하는 것이다. 또한 디스크에서 자료를 읽어오는 속도는 보통 20ms가 되는데 ms는 0.001초를 나타내는 단위이다.
여러분들이 지금까지 설명한 수치를 갖고 CPU와 디스크의 처리속도를 실제 한번 비교해 보길 바란다. 그것은 400만 배의 차이가 나게 된다. 다시 말해 디스크에서 자료를 하나 읽어오는 시간에 CPU에서는 400만 개의 명령어가 수행될 수 있는 것이다. 최근 CPU 속도는 MHz에서 GHz단위로 뛰어 오른 반면에 메모리와 디스크의 경우에는 속도가 상당히 뒤떨어져 있기 때문에 앞에서 든 예보다 많은 속도 차이가 벌어지고 있다. 이렇듯 컴퓨터 시스템에 있어 각 구성요소의 처리속도가 다르기 때문에 시스템 설계자는 가장 빠른 처리속도를 가진 CPU를 기준으로 처리속도를 맞출 수 없을까 하는 고민을 하게 된 것이다. 이후 강의를 진행하다 보면 빠른 CPU 처리속도에 비해 느린 입/출력 처리속도를 보완하는 방법이 설명될 것이다. 이 강의를 듣는 여러분도 이러한 문제의 해결방안을 한번 생각해보기 바란다. 새로운 그 무엇인가를 구상해 내거나 혹은 기존의 시스템에서 제기되는 문제점들을 해결해 나가는 두 가지의 소양을 함께 갖춘 사람만이 진정 훌륭한 시스템 설계자가 될 수 있기 때문이다.
소프트웨어를 분류하자면
소프트웨어는 시스템 소프트웨어와 응용 소프트웨어로 분류 되는데, 시스템 소프트웨어는 컴퓨터를 움직이는데 사용되는 소프트웨어이고 응용 소프트웨어는 특정 목적을 수행하기 위해 만들어진 소프트웨어라고 할 수 있다. 우리가 가장 쉽게 접할 수 있는 글, MS 워드, 인터넷을 위한 프로그램인 익스플로러에서 게임까지 특정 목적을 가지고 우리를 접하는 모든 소프트웨어가 응용 소프트웨어인 것이다. 시스템 소프트웨어에서 가장 큰 비중을 차지하고 있는 부분이 바로 OS이며, UNIX, DOS, Windows와 같은 OS들이 실제로 상품화된 좋은 예이다.. 또한 유틸리티 프로그램, 프로그래밍 소프트웨어, DBMS, 보안 소프트웨어들도 시스템 소프트웨어에 속한다..
OS는 왜 필요한가?
모든 컴퓨터는 응용 프로그램을 수행하기 위해서 그것에 맞는 OS가 필요하다. 이론적으로는 OS 없이도 수행될 수 있지만 매번 새로운 프로그램을 개발할 때마다 OS에 해당되는 부분을 매번 다시 프로그래밍 해야 하기 때문에 막대한 시간과 인력이 낭비된다. 지금과 같은 OS가 개발되기 이전, 사람이 그 역할을 대신 수행했던 시절을 이젠 호랑이 담배 피던 옛 이야기로 치부해도 괜찮을 것이다. 운영체제의 필요성을 정리하자면 다음과 같다.
첫째로 하드웨어를 손쉽고 효율적으로 운영할 수 있도록 추상개념(abstraction)를 제공한다.
추상개념이란 말에 대해 보다 상세한 설명이 필요할 듯 하다. 한 시스템 사용자가 있다. 그 시스템 안에서 운영되는 하드웨어의 기계어 코드 하나하나를 알아야 한다면 어떨까? 아마도 그는 쉽게 지쳐버릴 것이다. 그러나 이미 OS 내부적으로 A 라는 명령어 상황이 발생했을 경우 a로의 처리. B라는 상황이 발생했을 경우 b로의 처리라는 식으로 OS만의 추상적인(우리 눈에는 결코 보이지 않으므로) 개념들이 이미 정리되어 시스템 사용자들이 보다 쉽게 하드웨어를 사용할 수 있도록 조치를 취해 놓았다. 여러 작업이 동시에 출력을 요구해 왔을 때 OS는 이미 어느 작업에 우선권을 주어야 할지 알고 있다는 말이다. 우리가 흔히 사용하는 「파일」이라는 명칭도 하나의 추상개념이다. 글 프로그램을 사용할 때 우리는 문서마다 파일명을 정해 저장해 놓는다. 그 후 파일을 불러오게 되면 시스템 내부적으론 디스크에 저장되어 있는 파일을 읽어와 화면에 보여지게 하기까지 복잡한 과정을 거치게 된다. 그러나 우리는 그 파일명 하나만을 기억하고 있으면 작업을 하는데 아무 문제가 없다.
둘째, OS는 자원의 공유 및 분배를 위한 mechanism과 정책(policy)을 결정한다.
하나의 시스템이 가지고 있는 자원이란 무한하지가 않다. CPU 내부에 메모리도 일정한 한계가 있고 컴퓨터 주변장치 역시 일정한 개수로 한정되어 있으므로 시스템을 보다 효율적으로 사용하기 위해선 한정된 자원들의 공유와 분배가 제대로 이뤄져야 하는 것이다. 하나의 시스템이 한 명의 사용자와 한 개의 프로그램만을 수행한다면 자원의 효과적인 분배나 공유 등이 별 필요 없겠지만 이미 우리는 너무도 복잡한 시스템의 사용자가 되어 있는 것이다. 정책이란 말의 의미는 정부가 국민들에게 세금을 걷는 것에 비유될 수 있을 것이다. 국가가 운영되기 위해선 세금이란 정책은 없어선 안될 것이다. 이런 세금을 걷는데 있어 어떻게 하면 국민들에게 공평 성을 유지할 것인가에 대한 고민을 정부관계자는 지금까지도 끊임없이 할 것이다. 소득에 비례해 세금을 걷는다는 기본 정책은 있지만 불로소득은 몇 퍼센트의 세율을 매길 것인지, 또한 새로운 직종이 생겼을 때는 얼마만큼의 세율을 적용할 것인지 현실적인 물가상승을 고려해 세금을 내지 않는 기본소득을 얼마로 할 것인지 등에 대한 결정들이 정책이라 할 수 있다. 좋은 정부가 국민들이 불만을 갖지 않을 공평한 세율을 과세하듯 좋은 OS는 사용자가 시스템 사용에 있어 항상 만족감을 갖게 할 것이다. (그것을 위해 오늘도 OS설계자는 밤을 지새울 것이다!)
그림 3 자원 공유와 분배
위 그림 3은 컴퓨터 시스템 내에서 프로세스와 자원의 관계를 추상적으로 표현한 것이다. R로 표기 되어 있는 것은 자원을 의미하고, P는 프로세스를 나타낸다. 그리고 자원을 표현하는 사각형 안에 있는 작은 원은 그 자원에 대한 인스턴스를 의미 한다. 자원 R2에는 2개의 인스턴스가 있으며, 프로세스 P1과 P2는 자원 R2의 인스턴스를 사용하고 있으며, P2는 R1의 인스턴스를 사용하고, P1은 R1의 인스턴스를 기다리고 있는 상황이다. OS가 정교해 질수록 컴퓨터 시스템을 더 잘 관리 할 수 있게 되고 사람의 간섭은 더욱 적게 필요로 하며 더 많은 자료를 처리할 수 있게 된다. 바로 이러한 이유 때문에 오늘날 OS는 수많은 지시 문을 포함하는 크고 복잡한 프로그램이 된 것이다.
요점정리
OS의 필요성
OS는 한 국가를 운영하는 정부와 같은 목적을 갖고 있다고 비유할 수 있다. 정부는 국민들이 보다 수준 높은 생활을 하기를 바라며 제한된 자원들을 효율적으로 운용하기 위해 항상 애쓰고 있다. 바로 컴퓨터 시스템의 사용자는 한 국가의 국민인 것이다. 이렇듯 OS는 컴퓨터 시스템과 사용자, 컴퓨터 장치들 사이의 효율적인 운영을 가능하게 해 주는 프로그램이다.
컴퓨터 시스템의 구성
컴퓨터 시스템은 실질적인 기능에 따라 주기억장치, 중앙처리장치 그리고 주변장치로 구성된다. 이들 중 컴퓨터 시스템의 핵심은 산술논리연산장치와 제어장치로 구성된 중앙처리장치, 즉 CPU(Central Processing Unit) 이다. 산술논리연산장치는 계산기에 있어서 계산을 수행하는 부문이라 할 수 있고 제어장치는 메모리에 저장되어 있는 프로그램의 명령문을 해석하고 실행하는 기능을 한다.
소프트웨어의 분류
소프트웨어는 시스템 소프트웨어와 응용 소프트웨어로 분류되는데, 시스템 소프트웨어는 컴퓨터를 움직이는데 사용되는 소프트웨어이고 응용 소프트웨어는 특정 목적을 수행하기 위해 만들어진 소프트웨어이다.
운영체제의 필요성
1. 하드웨어를 손쉽고 효율적으로 운영할 수 있도록 추상개념(abstraction)를 제공한다.
2. 자원의 공유 및 분배를 위한 mechanism과 정책(policy)를 결정한다.
'Past Material' 카테고리의 다른 글
운영체제의 목표와 역할이 미래에도 계속 증대될까요? (0) | 2019.02.09 |
---|---|
운영체제의 역사와 구체적으로 어떤 일들을 수행하나요? (1) | 2019.02.09 |
[Zircon Kernel] 지르콘 커널에서 시스템콜의 종류 - Fuchsia OS (0) | 2018.08.24 |
구글은 어떻게 안드로이드 생태계에서 퓨시아(Fuchsia) 생태계로 전환시킬 수 있을까? (0) | 2018.08.21 |
[Zircon Kernel] 지르콘 커널에서 사용되는 핸들(Handles)이란? - Fuchsia OS (0) | 2018.08.20 |