reference : [도서] 쉽게 배우는 운영체제

https://velog.io/@mquat/OS-%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0%EC%84%B1%EB%8A%A5

 


 

1.1 하드웨어의 구성

이전 포스팅에서도 언급했듯이, 컴퓨터는 중앙처리장치, 메모리, 입력장치, 출력장치, 저장장치로 구성된다.

메인메모리를 제2저장장치, 하드디스크나 USB를 제2저장장치(보조기억장치) 라고 부른다. 중앙처리장치는 CPU라고 한다.

 

1.1 CPU와 메모리

CPU는 인간의 두뇌와 같은 역할을 하는데, 명령어를 해석하여 실행하는 장치이다. 메모리는 프로그램과 데이터를 저장하는 곳으로, 바이트 단위로 분할되어 있다. 

 

1.2 입출력장치

입력장치는 키보드, 마우스, 터치스크린 등이 있다. 출력장치로는 프린터, 스피커, 모니터 등이 있다. 과거에는 그래픽 계산을 CPU가 담당했으나 최근 들어 3D 게임 등 많은 계산이 필요하게 되면서 그래픽카드에 GPU를 달아 계산하게 되었다. GPU는 그래픽용 CPU이다.

 

1.3 저장장치

메모리가 데이터를 처리할 때 전자가 이동하며 하지만, 하드디스크 등의 저장장치는 구동장치로 이루어지므로 속도가 느리다. 속도가 느린만큼 가격도 저렴하지만 데이터를 영구적으로 저장할 수 있다.

저장장치는 자성, 레이저, 메모리 등 저장방법에 따라 구분되는데 자성은 하드디스크, 레이저는 DVD, CD 등, 메모리는 USB, SD카드, SSD 등이 대표적이다.

 

1.4 메인보드

메인보드는 CPU와 메모리 등 다양한 부품을 연결하는 커다란 판이다. 보드 안에는 데이터를 전송하는 다양한 부품들이 복잡하게 얽혀있으며 전력이 공급되면 부품이 작동한다. 

 

1.2 폰노이만 구조

오늘날의 컴퓨터는 대부분 폰노이만 구조를 따르는데, 위와 같은 그림처럼 버스로 연결되어 있는 구조를 말한다. 존 폰노이만은 하드웨어는 그대로 둔 채 작업을 위한 프로그램만 교체하여 메모리에 올리는 방식을 제안했는데, 덕분에 오늘날 프로그래밍 기술을 통해 다양한 작업을 할 수 있게 되었다.

'모든 프로그램은 메모리에 올라와야 실행할 수 있다.'는 것이 폰노이만 구조에서 가장 중요한 특징이다. 이 특징은 운영체제와 관련된 전반적인 내용의 밑거름이되므로 꼭 기억해두는 것이 좋다.

 

1.3 요리사 모형

요리사가 요리를 하려면 냉장고(저장장치)에 있는 재료를 도마(메모리) 위로 가져와야 한다. 위 그림을 통해 운영체제의 운영방식을 가늠해볼 수 있다. 또 도마(메모리)의 크기가 작으면 재료가 많아도 손질하는 속도가 한정적이다. 

 

1.4 하드웨어 관련 용어

  • 클록
    클록은 CPU의 속도와 관련된 단위로, CPU가 작업할 때 일정한 박자에 따라 작업을 진행한다. 클록이 이 박자를 만드는데, 클록이 만드는 tick(클록틱)에 맞춰 CPU가 작업을 진행한다. 

  • 헤르츠
    헤르츠(Hz)는 틱이 발생하는 속도를 나타내는 단위이다. 만약 CPU명이 3.4GHz라면, CPU가 1초에 34억번의 연산을 할 수 있음을 의미한다. 이 틱에 맞추어 보통 데이터를 전송하기 때문에 메인보드의 성능도 클록으로 표시한다. 메인보드의 클록이 1,333MHz(1.3GHz)라면, 초당 1.3억번의 데이터 이동이 가능하다는 뜻이다. 

  • 시스템 버스와 CPU 내부 버스
    시스템 버스는 시스템과 주변장치를 연결하는 버스로, FSB (Front-Side Bus) 라고 한다. CPU 내부의 버스는 내부에 있는 장치를 연결하는 버스로, BSB (Back Side Bus) 라고 한다. 일반적으로 BSB의 속도는 FSB의 속도보다 훨씬 빠른 편이다. 
    CPU는 BSB 속도로 작동하고 메모리는 FSB 속도로 작동하기 때문에 두 속도의 차이로 인해 작업이 지연되는 경우도 있다.

 

2.1 CPU의 구성과 동작

2.1.1 CPU의 기본 구성

CPU는 앞서 말한 요리사 모형에서의 요리사에 해당한다. 산술논리 연산장치, 제어장치, 레지스터로 구성되어 있는데 각 구성요소들을 살펴보도록 하자.

  • 산술논리 연산장치
    요리사가 재료를 삶거나 찌거나 볶거나 튀기는 등 다양한 방법으로 조리하듯이 산술논리 연산장치는 데이터의 산술 연산과 AND, OR 등의 논리 연산을 수행한다.

  • 제어장치
    요리사의 머릿 속에서 '양파를 다져라.', '고기를 삶아라.' 등의 지시가 이루어지듯 CPU에서 작업을 지시하는 부분을 제어장치라고 한다.

  • 레지스터
    양파, 마늘 등의 재료를 필요한만큼 후라이팬에 넣는데, 이처럼 CPU내에 필요한 데이터를 임시로 보관하는 곳을 레지스터라고 한다.

 

2.1.2 CPU의 명령어 처리 과정

int i = 1, j = 8, sum;
sum = i + j;

위의 코드는 i와 j의 값을 더하여 sum에 넣으라는 의미인데, 여기서 i, j, sum은 데이터를 저장할 수 있는 메모리 주소의 다른 이름이다. 모든 주소를 외울 수 없기 때문에 주소 대신 이름을 붙인 것이다.

 

CPU는 기계어만 인식하기 때문에, 컴파일러를 통해 위의 코드를 기계어로 바꾸어야한다. 어셈블리어는 기계어를 사람이 이해하기 쉽게 기호화한 언어이다.

LOAD mem(100), register 1;
LOAD mem(120), register 8;
ADD register 9, register 1, register 8;
MOVE register 9, mem(160);

어셈블리어로 바꾼 것이 위의 코드이다. CPU가 연산을 하려면 데이터를 CPU로 가져와 레지스터에 임시로 보관해야 한다. 그래서 메모리의 100번지의 값(1)과 120번지의 값(8)을 더한 값을 레지스터 9에 저장하고, 그 값을 최종 메모리 160번지에 옮기는 과정이 필요하다. 위의 코드는 그러한 과정을 그대로 보여주고 있다.

 

2.1.3 레지스터의 종류

CPU는 필요한 데이터를 메모리에서 가져와 레지스터에 저장했다가 연산장치로 연산을 한 후, 다시 결과값을 레지스터에 저장했다가 메모리로 옮긴다. 이 때 사용되는 레지스터는 데이터 레지스터와 주소 레지스터가 있다.

  • 데이터 레지스터(DR) : 메모리에서 가져온 데이터를 임시로 보관한다. CPU의 대부분의 레지스터가 데이터 레지스터이다. 일반적으로는 레지스터라고 하면 데이터 레지스터를 칭한다.

  • 주소 레지스터(AR) : 데이터, 명령어가 저장된 메모리의 주소는 주소 레지스터(Address Register)에 저장된다.

위 두 레지스터는 사용자 프로그램에 의해 변경되므로 사용자 가시 레지스터 (user-visible register)라고 부른다. 그 외에도 특별한 용도로 사용되는 레지스터가 있는데, 특수 레지스터 혹은 사용자 불가시 레지스터 (user-invisible register) 라고 부른다.

  • 프로그램 카운터(PC) : CPU는 다음에 처리할 명령어를 알아야 하는데, 프로그램 카운터는 다음에 실행할 명령어의 주소를 제어장치에 알려준다. 명령어의 주소를 가리키기 때문에 명령어 포인터라고도 한다.

  • 명령어 레지스터(IR) : 현재 실행중인 명령어를 저장한다.

  • 메모리 주소 레지스터(MAR) : 메모리에서 데이터를 가져오거나 메모리로 데이터를 보낼 때 주소를 지정하기 위해 사용한다. 

  • 메모리 버퍼 레지스터(MBR) : 메모리에서 가져온 데이터나 메모리로 옮길 데이터를 임시로 저장하기 위해 사용한다.  MAR가 항상 함께 동작한다.

이외에도 프로그램 상태 레지스터가 있다. 산술논리 연산장치와 연결되어 있는데, CPU엔 무궁무진한 레지스터가 있기 때문에 각 기능이 필요하거나 궁금하다면 찾아보는 것도 좋다.

 

2.1.4 버스의 종류

버스는 CPU와 메모리, 주변장치 간에 데이터를 주고받을 때 사용한다.

  • 제어 버스
    다음에 어떤 작업을 할지 지시하는 제어 신호가 오고 간다. 메모리에서 데이터를 가져올 땐 읽기, 데이터를 메모리에 옮길 땐 쓰기 신호를 보낸다. 제어 버스의 신호는 양방향으로 오고 간다.

  • 주소 버스
    메모리의 데이터를 읽거나 쓸 때 어느 위치에서 작업할 것인지를 알려주는 위치 정보(주소)가 오고 간다. 메모리 주소 레지스터와 연결되어 있으며 단방향이다.

  • 데이터 버스
    데이터가 데이터 버스에 실려 목적지까지 이동한다. 메모리 버퍼 레지스터와 연결되어 있으며 양방향이다.

 

버스의 대역폭은 한 번에 전달할 수 있는 데이터의 최대 크기를 말한다. 32bit, 64bit 등의 숫자도 마찬가지로 대역폭의 크기이다. 데이터의 최대 크기를 워드(word)라고 하며, 버스의 대역폭이나 메모리에 저장되는 단위도 워드이다.

 

2.2 메모리의 종류와 부팅

모든 프로그램은 메모리에 올라와야 실행될 수 있다. 메모리에는 실행에 필요한 프로그램과 데이터가 존재하며, CPU와 협업하여 작업이 이루어진다.

2.2.1 메모리의 종류

메모리는 읽고 쓸 수 있는 램 (Random Access Memory) 과 읽기만 가능한 롬 (Read Only Memory) 로 구분된다. 램은 데이터 저장 위치와 상관 없이 같은 속도로 읽는다는 의미에서 나온 이름이다. 램은 전력이 끊기면 휘발성 메모리와 전력이 끊겨도 데이터를 보관할 수 있는 비휘발성 메모리로 나뉜다.

  • 휘발성 메모리
    동적 램(Dynamic RAM)과 정적 램(Static RAM)이 있는데, DRAM은 일정 시간이 지나면 데이터가 사라지기 때문에 재생이 필요하다. SRAM은 전력이 공급되는 동안 데이터를 보관할 수 있어 재생할 필요가 없다. 보통 메인메모리에는 DRAM, 고속 메모리에는 SRAM을 사용한다.
    SDRAM은 클록틱이 발생할때마다 데이터를 저장하는 DRAM이다. 

  • 비휘발성 메모리
    플래시 메모리, FRAM, PRAM 등이 이에 속하는데, 플래시 메모리가 이 중 많은 저장장치로 사용된다. 플래시 메모리의 각 소자는 사용 횟수가 제한되어 그 횟수를 초과하면 기능을 잃게 된다. SSD도 하드디스크를 대신하도록 만들어진 비휘발성 메모리이다. 

롬은 데이터를 한 번 저장하면 바꿀  수 없다. 롬의 종류에는 데이터를 지우거나 쓸 수 없는 Mask ROM, 한 번만 데이터 저장이 가능한 PROM, 데이터를 여러 번 쓰거나 지울 수 있는 EPROM 등이 있다.

 

2.2.2 메모리 보호

일괄 작업 시스템에서는 메모리가 운영체제 영역과 사용자 영역으로 구분된다. 이 시스템에서의 메모리 보호란 사용자 영역의 작업이 운영체제 영역을 침범하지 않도록 막는 것이다.

현대의 운영체제는 사용자가 여러 프로그램을 동시에 실행하므로 사용자 영역을 여러 개의 작업 공간으로 나누는데, 여기서 메모리가 보호되지 않으면 사용자의 데이터가 다른 작업의 영역을 침범하거나 데이터를 지울 수 있다. 이처럼 다른 프로그램 영역을 침범하는 소프트웨어를 바이러스라고 한다.

운영체제 또한 소프트웨어이기 때문에 사용자의 작업이 진행되는 동안에는 운영체제의 작업이 잠시 중단된다. 이 때 사용자의 작업 메모리를 보호하려면 하드웨어의 도움이 필요하다.

CPU는 진행중인 작업의 메모리 시작 주소를 경계 레지스터에, 메모리의 크기를 한계 레지스터에 저장한다. 그리고 사용자가 작업하는 동안 이 두 레지스터의 범위를 벗어나는지 점검한다. 만약 레지스터 범위를 벗어난다면 메모리 오류와 관련된 인터럽트 (interrupt) 가 발생하고, 그러면 모든 작업이 중단되고 CPU는 운영체제를 깨워서 이를 처리하도록 시킨다. 이렇게 될 경우 운영체제가 해당 프로그램을 강제 종료시킨다.

 

2.2.3 부팅

컴퓨터를 켰을 때 운영체제를 메모리에 올리는 과정을 부팅(booting) 이라고 한다.

전원을 켰을 때 롬에 저장된 바이오스(bios) 가 실행되고 바이오스는 하드웨어가 잘 작동하는지 확인한다. 만약 이상이 없으면 마스터 부트 레코드(MBR)에 저장된 프로그램을 메모리로 가져와 실행한다.

하드디스크의 첫번째 섹터를 마스터 부트 레코드라고 하며, 부트스트랩이 이곳에 저장되어 있다. 부트 스트랩은 운영체제를 메모리로 가져와 실행하는 역할을 한다. 만약 마스터 부트 레코드가 손상되면 운영체제를 실행할 수 없다. 

reference : [도서] 쉽게 배우는 운영체제


 

4.1 유닉스와 리눅스

4.1.1 유닉스의 개발과 확산

유닉스가 만들어진 1960년대에만 하더라도 컴퓨터의 기능은 계산기에 불과했다. 이에, 효율적으로 운영체제를 사용할 수 있도록 다양하게 시도하였고 다중 사용자, 다중 프로세서, 다중 프로세스 기반의 시스템으로 만들어진 것이 '유닉스'였다. AT&T에서 만든 유닉스의 철학은 '일관성과 단순함을 지향하는 운영체제'이다.

1970년대에 고안된 C언어는 어셈블리어로 번역하기 쉽고, 유닉스는 C언어로 다시 소스코드를 만들어 큰 인기를 끌었다. 이후 대부분의 컴퓨터 전공자들은 유닉스와 C언어를 배우게 되었다.

 

4.1.2 BSD 유닉스의 개발

캘리포니아대학교에서 유닉스 소스코드를 구입하여 수정했는데, 이 버전이 바로 BSD 유닉스이다. 기존 유닉스와 다른 점은 다중 작업 지원과 네트워킹 소프트웨어이다. 이를 통해 근거리 통신망(LAN) 구축이 수월해졌다. 

BSD 유닉스의 영향력이 생기면서, 기존 유닉스와 구분되었는데 기존 유닉스는 System V 계열, 리뉴얼된 유닉스는 BSD 계열이다.

 

4.1.3 다양한 유닉스 버전의 개발

유닉스의 인기가 날이 갈수록 높아지자, 다양한 회사들이 유닉스 시장에 뛰어들었다. 선마이크로시스템에서 개발한 SunOS는 훗날 솔라리스라는 운영체제가 되었고, 이 회사에서 만든 프로그래밍 언어가 자바이다.

카네기대학에서 개발된 마하 유닉스는 매우 작은 커널 유닉스로 매킨도시에 사용되었다.

 

4.1.4 GNU

GNU 프로젝트는 소프트웨어를 돈 주고 사지 말고 누구나 자유롭게 실행, 복사, 수정, 배포할 수 있게 하자는 주장에서 나온 철학이다. 이러한 정신에 입각하여 만든 소프트웨어의 라이센스를 GPL이라고 부르는데, 저작권인 'copyright'의 반대 개념으로 'copyleft'를 내세웠다.

 

4.1.5 리눅스의 개발

리누스 토르발스가 유닉스 호환 커널을 작성하여 GPL로 배포하고 소스코드를 공개했는데, 이것이 바로 리눅스이다.

 

4.2 매킨토시와 스티브 잡스

4.2.1 애플 Ⅱ의 등장

1976년 스티브 잡스가 애플 Ⅱ라는 개인용 컴퓨터를 대중화했다. 키보드, 메인보드, 전원장치가 하나로 합쳐진 일체형 모델로, 내부의 8개의 확장 슬롯을 통해 주변장치를 연결할 수 있었다. 당시에는 카세트테이프가 저장장치로 쓰였기 때문에, 카세트테이프만 복사하면 여러가지 게임을 할 수 있었다. 이후 저장장치가 플로피디스크로 바뀌면서 더욱 복사가 쉽게 되었으며 애플Ⅱ의 인기 이후 다양한 소프트웨어들이 출시되었다.

 

4.2.2 스티브 잡스의 업적

스티브 잡스는 IT 역사에 큰 업적을 남겼는데, 기술적인 부분이 아닌 사용자 인터페이스 부분이다. 잡스는 기술보다는 사용자에게 편리함을 제공하는 사용자 인터페이스에 집중했다. 이처럼 보다 더 사용자 친화적이고 경험에 중심을 두는 기술을 UX(User Experience) 라고 부른다. 

Mac OS는 마우스를 이용할 수 있는 사용자 인터페이스(GUI)를 처음 도입했다는 것이다. 잡스는 애플 Ⅱ 출시 이후 2001년 아이팟(iPod)을 통해 또 한번 세상을 뒤집었다. 이후 아이폰(iPhone)으로 세상을 놀라게 했는데, 이처럼 Mac OS가 적용된 제품들이 인기를 끌었던 이유는 바로 사용자 인터페이스 때문이다.

아이팟과 아이폰의 성공은 시사하는 바가 매우 큰데, 커널의 성능은 비슷하지만 기술이 발전할수록 하드웨어 차이가 줄어든다. 애플이 후발주자임에도 불구하고 산업을 주도하는 이유는 사용자 인터페이스에 있다.

 

4.3 윈도우 운영체제

4.3.1 MS-DOS의 개발

애플Ⅱ 가 인기를 끌자 IBM은 개인용 컴퓨터 시장에 눈독을 들였다. IBM은 플로피디스크에 운영체제를 담아 보급했는데, 이 운영체제가 바로 MS-DOS로, 마이크로소프트가 만든 디스크 기반의 OS라는 뜻을 담고 있다.

IBM이 사업을 시작했을 당시 애플이 시장을 점유하고 있어서 잘 팔리지 않았다. IBM이 설계를 공개하고 오픈하는 정책을 내놓자 누구든 생산에 뛰어들어 가격이 내려가며 애플의 점유율이 하락했다. 하지만 IBM보다는 정작 다른 회사가 이득을 보았는데, 바로 인텔이다.

IBM에 CPU를 납품하던 회사가 인텔이었고, 당시 CPU의 이름을 따서 286, 386, 486 컴퓨터라고 일컬었다. 586부터는 펜티엄 CPU라고 불렸으며, 현재는 32bit 와 64bit기반 CPU인 x86, x64 으로 불린다.

 

4.3.2 윈도우의 출시

애플의 기세가 꺾이며 윈도우 운영체제는 전세계 pc 시장의 90%를 장악할 정도로 성장했다. 유닉스 운영체제는 소스코드가 공개되며 많은 수정, 보완, 배포를 거쳐 안정적으로 운영될 수 있었지만, 윈도우는 역사가 짧고 오픈소스가 아니었기 때문에 안정화에 오랜 시간이 걸렸다.

무엇보다도 가장 큰 단점은 운영체제가 무겁다는 것인데, 업그레이드 시 빠른 cpu와 메모리가 필수적이었기 때문에, 과거엔 운영체제 업그레이드마다 pc를 업그레이드해야하는 일도 다반사였다.

 

4.4 모바일 운영체제

4.4.1 스마트폰의 등장

윈도우 운영체제의 단점은 업그레이드 시 추가로 돈을 지불해야한다는 점이었다. 마이크로소프트는 큰 수익을 올렸지만 스마트폰의 등장 이후 마이크로소프트는 한풀 꺾였다. 애플의 경우 iOS를 활용하여 아이폰을 개발했고 구글은 안드로이드 운영체제를 개발하였다.

 

4.4.2 안드로이드의 특징

안드로이드는 리눅스 커널을 기반으로 만들어진 모바일 운영체제이며, 자바를 사용했기 때문에 호환성이 굉장히 뛰어난다. 스마트폰뿐만 아니라 다른 플랫폼으로도 포팅이 가능하여 태블릿, TV, PC에서도 사용이 가능하다.

GNU의 리눅스 커널을 사용하여 제작되었기 때문에 GPL을 따르고, 누구나 공짜로 사용이 가능하다. 그래서 누구나 수정 및 배포가 가능하며 많은 회사들은 안드로이드의 소스코드를 자사 제품에 맞게 수정하여 배포하고 있다.

 

4.4.3 특허 전쟁

구글은 안드로이드를 개발하는 데 많은 시간과 비용을 들였음에도 불구하고 무료로 배포하기 때문에 큰 이득을 보지 못하지만, 마이크로소프트는 큰 수익을 거두고 있다. 그 이유는 안드로이드의 기능 중 일부가 마이크로소프트의 특허를 활용하여 안드로이드를 사용하는 회사들은 마이크로소프트에 지불을 해야하기 때문이다.

이러한 특허권 또는 지식재산권의 로열티로 수익을 창출하는 기업들은 마이크로소프트와 인텔 등이 있다.

 

4.4.4 무료 배포의 철학

GNU는 어떻게 돈을 벌까? 그들의 철학은 간단명료하다. 무료로 사용해보고 좋다고 판단되면 제작자에게 지불하라는 것이다. 그래서 구글은 안드로이드를 무료로 배포함에도 불구하고 이득을 얻는 것이다. 안드로이드는 사용 시 구글의 구글 플레이를 통해서만 사용이 가능하며, 애플도 앱스토어와 아이튠즈 등으로 사용을 해야한다. 이처럼 그들만의 컨텐츠 세상으로 연결되는 통로를 만들어 두어 수익을 계속 창출이 가능하다.

reference : [도서] 쉽게 배우는 운영체제


 

3.1 커널과 인터페이스

커널(kernel)은 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심 기능을 모아놓은 것으로 자동차에 비유하자면 엔진에 해당한다. 자동차의 성능을 엔진이 좌우하듯, 운영체제의 성능은 커널이 좌우한다.

스마트폰의 운영체제에도 커널이 있는데, 구글의 안드로이드는 커널이 공개되어 있지만 애플의 iOS는 안드로이드와 달리 커널을 공개하지 않고 자사 제품에만 탑재한다. 둘 다 유닉스 커널을 기반으로 한다.

자동차 계기판이 엔진의 상태를 알려주듯, 운영체제에도 상태를 알려주는 인터페이스가 있다. 

위의 그림처럼, 사용자와 응용프로그램에 인접하여 커널에 명령을 전달하고, 실행 결과를 사용자와 응용프로그램에 돌려주는 인터페이스와 운영체제의 핵심 기능을 모아둔 커널의 두 부분으로 크게 나뉜다. 운영체제는 커널과 인터페이스를 분리하여, 같은 커널이지만 다른 인터페이스를 가진 형태로 제작할 수 있고 그럴 때 사용자에게는 다른 운영체제처럼 보인다.

유닉스의 사용자 인터페이스는 셸(shell)이라고 하며, C셸(csh), T셸(tsh), 배시셸(bash) 등 여러 종류의 셀이 있다. 

 

3.2 시스템 호출과 디바이스 드라이버

3.2.1 시스템 호출

시스템 호출(system call)은 커널이 자신을 보호하기 위해 만든 인터페이스인데, 사용자나 응용 프로그램으로부터 컴퓨터 자원을 보호하기 위해 자원에 직접 접근하는 것을 차단한다. 따라서 시스템 호출이라는 인터페이스를 통해 사용자는 자원에 접근할 수 있다.

자원에 직접 접근하는 것과 시스템 호출을 통해 접근하는 것은 어떤 차이가 있을까?

  • 직접 접근 : 사용자가 직접 컴퓨터 자원에 접근하는 것으로, 좌측의 그림처럼 모든 것을 처리해야 하기 때문에 사용자의 취향대로 하기엔 좋지만, 커피머신(컴퓨터 자원)을 보호하기 어렵다.
  • 시스템 호출을 통한 접근 : 누군가에게 요청하여 작업결과만 받기 때문에, 커피머신(컴퓨터 자원)이 망가지는 일을 막을 수 있다. 일반적으로 이처럼 시스템 자원을 사용할 수 있도록 시스템 호출을 사용한다.

A 프로그램은 10, B 프로그램은 200을 저장하려고 하는 상황일때, 응용 프로그램 입장에서 두 접근방식의 차이점을 살펴보자. 

  • 직접 접근 : 각 응용프로그램이 마음에 드는 위치에 데이터를 저장하려 하기 때문에, 다른 사람의 데이터를 지우거나 내 데이터가 지워지는 일이 발생할 수 있다.
  • 시스템 호출을 통한 접근 : 커널이 제공하는 write() 함수를 통해 데이터를 저장해달라고 요청하기 때문에, 데이터의 저장 위치를 알 수 없지만 언제든 read() 함수로 시스템 호출을 이용하여 데이터를 가져올 수 있다. 

 

시스템 호출은 커널이 제공하는 서비스를 모아놓은 것이며 함수 형태로 제공된다. C언어의 printf() 함수도 시스템 호출 중 하나이다. 

참고 : 시스템 호출과 유사한 용어로 API (Applircation Programming Interface) 와 SDK (System Developer's Kit) 가 있다. API는 응용 프로그램이 자신과 연관된 프로그램을 만들 수 있도록 제공하는 인터페이스이다. 포토샵이라는 그래픽 프로그램에서는 수백가지의 모든 필터를 제공하지 않는다. 하지만, 필터를 개발하려는 사람들을 위해 다양한 프로그래밍 인터페이스를 제공하는데, 그것이 바로 API다. API는 시스템 호출보다 광범위한 개념이며, 운영체제의 API를 시스템 호출이라 정의할 수 있다.

SDK는 프로그램 개발자를 위해 API 및 API 사용 매뉴얼, 코드 편집기, 에뮬레이터 등의 응용 프로그램들을 하나로 묶어 배포하는 개발 툴을 말한다. 대표적인 예로 Android Studio가 있다.

요약 : 시스템 호출은 커널이 제공하는 시스템 자원의 사용과 연관된 함수이다. 응용 프로그램이 하드웨어 자원에 접근하거나 운영체제가 제공하는 서비스를 이용할 때는 시스템 호출을 사용해야 한다. 운영체제는 시스템 호출을 통해 컴퓨터 자원을 보호하며, 이는 사용자에게 커널 영역에 진입할 수 있도록 서비스를 제공하는 수단이다.

 

3.2.2 드라이버

응용프로그램, 커널의 인터페이스가 시스템 호출이었다면, 하드웨어의 인터페이스는 드라이버가 담당한다. 종류가 다양한 하드웨어를 모두 사용할 수 있는 환경을 제공하기 위해 커널이 모든 인터페이스를 개발하기는 어렵다. 그래서 커널은 입출력의 기본적인 부분만 제작하고 하드웨어의 특성을 반영한 소프트웨어를 하드웨어 제작자에게 받아 커널이 실행될 때 함께 실행되도록 하는데, 이 소프트웨어를 디바이스 드라이버라고 한다.

마우스, 키보드 등의 단순한 드라이버는 일반적으로 커널에 포함되어 있어 컴퓨터에 꽂기만 해도 작동하지만, 그래픽카드, 프린터 등의 크고 복잡한 드라이버는 사용자가 직접 설치해야 하는 경우가 있다.

시스템 호출 부분은 커널 앞부분을 모두 감싸고 있기 때문에 시스템 호출을 통해서만 커널에 접근할 수 있지만, 드라이버는 커널 전체를 감싸고 있지 않기 때문에 커널이 제공하는 드라이버도 있고 하드웨어 제작자가 제공하는 드라이버도 있다는 뜻이다. 즉, 하드웨어와 커널은 직접 연결되거나 간접적으로 (드라이버를 통해) 연결되기도 한다.

 

3.3 커널의 구성

핵심 기능  
프로세스 관리 프로세스에 CPU를 배분하고, 작업에 필요한 환경을 제공한다.
메모리 관리 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상공간을 제공한다.
파일 시스템 관리 뎅터를 저장하고 접근할 수 있는 인터페이스를 제공한다.
입출력 관리 필요한 입력과 출력 서비스를 제공한다.
프로세스 간 통신 관리 공동 작업을 위한 각 프로세스 간 통신 환경을 지원한다.

커널의 기능은 유기적으로 얽혀있고, 기능을 구현하는 방법에 따라 단일형, 계층형, 마이크로 구조로 구분된다.

 

3.3.1 단일형 구조 커널

 

단일형 구조 커널은 초창기의 운영체제 구조로, 커널의 핵심 기능을 구현하는 모듈들이 구분 없이 하나로 구성되어 있다. MS-DOS, VMS, 초기의 유닉스 운영체제가 여기에 속한다. 거의 다 초창기의 운영체제인데, 당시엔 기능을 구현하느라 모듈을 분리할만한 여력이 없었다. 이를 프로그래밍에 비유한다면 함수를 거의 사용하지 않고 main() 에 모든 기능을 구현한 것이다.

  • 장점 : 모듈간 분리가 거의 없어서, 모듈 간의 통신 비용이 줄어들어 효율적 운영이 가능하다. main() 에 모든 기능을 넣으면 함수 호출하는 오버헤드가 없어서 프로그램이 빨라지는 것과 같은 이치이다.
  • 단점 : 모듈이 하나로 묶어였기 때문에 버그나 오류를 처리하기 어렵고, 여러 기능이 서로 연결되어 있어 상호 의존성이 높아 작은 결함이 시스템 전체로 확산될 수 있다. 수정이 어렵기 때문에 다양한 환경의 시스템에 적용하기 어렵다. 현대의 운영체제는 매우 크고 복잡하기 때문에 단일형 구조를 구현하기가 어렵다.

 

3.3.2 계층형 구조 커널

단일형 구조에서 발전된 형태로, 비슷한 기능의 모듈을 묶어 하나의 계층을 만들고 계층간의 통신을 통해 운영체제를 구현하는 방식이다. 비슷한 기능을 모았기 때문에 단일형보다 쉽게 버그를 처리할 수 있으며 오류 발생 시 커널 전체가 아닌 해당 계층만 수정하면 되므로 디버깅하기도 쉽다. MS사의 윈도우를 비롯한 오늘날의 대부분의 운영체제는 이 구조로 이루어져 있다. 

 

3.3.3 마이크로 구조 커널

계층형 커널이 다양한 하드웨어와 사용자의 요구를 충족하기 위해 계속 커널과 기능을 추가하면서 크기가 커지고 하드웨어의 용량이 늘어남에 따라 오류도 잡기 어려워졌다. 이러한 접근 방식과 반대로 개발된 커널이 마이크로 구조(micro architecture) 커널이다. 

마이크로 구조 커널의 운영체제는 기본적인 기능만 제공한다. 다른 커널에 비해 많은 부분이 사용자 영역에 구현되어 있다. 커널은 메모리와 프로세스의 동기화 서비스를 제공하며 각 프로세스는 통신 모듈로 연결되어 있다. 따라서 각 모듈은 독립적으로 작동하기 때문에 하나의 모듈이 실패하더라도 전체 운영체제가 멈추지 않는다. 또한 커널이 가벼워서 CPU 용량이 작은 시스템에도 적용이 가능하다. 대표적으로 마하(Mach)가 있다.

 

3.4 가상머신

C언어는 어셈블리어의 기능을 가지고 있는데, 이 언어로 만든 운영체제가 유닉스이다. 하지만 C 언어는 유닉스와 다른 커널을 가진 운영체제와의 호환성이 떨어진다. 예를 들면 윈도우에서 C언어 코드가 작동하지 않기 때문에, 코드를 윈도우에 맞게 수정해야 한다. 또한 유닉스 버전이 다양해지면서 유닉스끼리 호환이 되지 않는 경우도 있다.

이러한 호환성 문제를 해결한 언어가 바로 자바이다. 자바는 대부분의 운영체제에서 작동한다. 그 이유는 자바가 작동할 때, 운영체제 위에 가상머신을 만들고 그 위에서 응용프로그램이 작동되기 때문이다. 자바는 유닉스와 윈도우에서 작동하는 가상머신을 만들어 배포하는데, 이를 자바 가상머신(Java Virtual Machine, JVM) 이라 부른다.

만약 두 개의 운영체제를 같이 설치하고 싶다고 하면, 하나의 운영체제에 가상머신을 설치하여 사용할 수 있다. 그렇게 되면 응용 프로그램이 가상머신 내에서 작동할 수 있다.

reference : [도서] 쉽게 배우는 운영체제


2.1 개요

구분 시기 주요 기술 특징
0기 1940년대 없음 진공관(0,1) 사용
1기 1950년대 카드 리더, 라인 프린터 일괄 작업 시스템
운영체제의 등장
2기 1960년대 초반 키보드, 모니터 대화형 시스템
3기 1970년대 후반 C 언어 다중 프로그래밍 기술 개발
시분할 시스템
4기 1980년대 PC 개인용 컴퓨터의 등장
분산 시스템
5기 1990년대 클라이언트/서버 시스템
6기 2000년대 스마트폰 P2P 시스템 (메신저, 파일 공유)
그리드 컴퓨팅
클라우드 컴퓨팅
사물 인터넷

 

2.2 초창기 컴퓨터 (0기, 1940년대)

최초의 컴퓨터인 에니악은 펜실베니아대학의 두 학생이 만들었다. 전선을 회로에 연결하여 제작되었고, 사람이 7시간동안 계산하던 것을 3초만에 끝냈다. 진공관이 켜지면 1, 꺼지면 0으로 판단하여 향후 컴퓨터가 2진법을 사용하는 데 영향을 끼쳤다. 

키보드, 마우스, 모니터와 같은 입출력장치 없이 진공관을 전선으로만 연결했는데, 이렇게 논리회로를 구성하는 것을 '하드와이어링' 방식이라고 한다. 하드와이어링은 원하는 결과만 얻는 방식이므로 다른 계산이나 수식을 사용하려면 전선을 다시 연결해야 한다는 단점이 있다. 이 당시의 컴퓨터에는 운영체제가 없었다.

 

2.3 일괄 작업 시스템 (1기, 1950년대)

전공관을 전선으로 연결하는 컴퓨터에서 기술 발전을 거쳐 IC (Integrated Circuit) 라는 칩으로 만들었는데, 진공관과 전선으로 만들어진 논리회로를 아주 작은 크기로 구현한 것이다. 당시엔 CPU와 메모리가 있었지만 여전히 키보드, 모니터 등의 입출력장치가 없었고 천공카드 리더를 입력장치로, 라인 프린터를 출력장치로 사용하였다.

  • 천공카드 리더 : OMR 카드에 특수한 펜으로 표시하면 기계가 이 마크를 읽어 데이터를 수집하는 OMR의 원조가 되는 방법론이다. 특수한 펜으로 표시하는 대신 구멍을 뚫어 문자나 숫자를 표현하였다.
  • 라인 프린터 : 문자만 출력하는 프린터로, 이름처럼 한 번에 한 줄씩 출력한다.

해당 입출력장치를 사용함으로써 지금의 프로그래밍과 유사한 방식으로 다양한 소프트웨어를 개발할 수 있었다. 요즘은 멀티태스킹이 가능하지만 당시에는 한 번에 한가지 작업만 할 수 있었다. 작업에 필요한 프로그램과 데이터를 동시에 입력해야했고, 실행 중간에 데이터를 입력하거나 수정하는 것이 불가능했는데 이러한 시스템을 일괄 작업 시스템(batch job system), 일괄 처리 시스템(batch processing system) 이라고 부른다. 

윈도우가 사용하는 파일 중 부팅 시 읽는 config.sys, autoexec.bat 파일이 있는데, 여기서 .bat 확장자는 batch job을 의미한다. 이는 운영체제가 시작할 떄 한꺼번에 처리해야할 작업을 모아둔 파일이다.

 

2.4 대화형 시스템 (2기, 1960년대)

키보드와 모니터가 등장했다. 타자기의 쿼티QWERTY 자판에 키를 추가하여 만든 것이 키보드고, 초기의 모니터는 컬러가 아닌 단색이었다. 이 둘은 컴퓨터의 시스템 방식을 획기적으로 바꾸어 놓았는데, 기존의 일괄시스템은 데이터와 프로그램을 같이 입력하여 최종 결과만 얻었다. 새로운 값을 입력하거나 데이터를 변경하는 과정도 불가능했으며, 오류가 있거나 결과가 틀려도 무조건 최종 결과물로만 확인할 수 있었다. 요즘말로 다시 말하자면, 디버깅이 불가능했다. 

하지만 키보드와 모니터덕분에 위의 불가능했던 과정이 모두 가능해졌다. 이러한 시스템은 대화형 시스템(interactive system)이라고 한다. 그러나 대화형 시스템에도 문제는 있었다. 일괄 작업 시스템은 작업 시간을 예측할 수 있지만, 대화형 시스템의 경우 작업 시간을 예측하기 어려웠다. 

 

2.5 시분할 시스템 (1960년대 후반)

2.5.1 시분할 시스템의 개념

1960년대 후반에 컴퓨터의 크기가 작아지고 계산 능력이 향상되었지만, 여전히 값비싼 데다가 일부 사용자만 사용이 가능했다. 컴퓨터를 효율적으로 사용하기 위한 다중 프로그래밍(multiprogramming) 기술이 개발되었다. 한 번에 하나의 작업만 가능했던 부분을 멀티 프로세싱이 가능하도록 한 것이다.

다중 프로그래밍 시스템에서는 CPU 사용 시간을 아주 잘게 쪼개어 여러 작업에 나누어준다. 마치 영화 필름을 여러장 이어붙여 빠른 속도로 재생하여 영화가 재생되듯말이다. 분명 작업은 끊어져서 실행되겠지만, 바로 0.1초 뒤에 다른 작업을 분배하는 식의 방법을 통해 사용자가 느끼기에는 동시에 실행되는 것처럼 보이는 것이다. 이처럼 오늘날의 컴퓨터에는 대부분 시분할 시스템이 사용된다. 

이러한 시분할 시스템의 단점은 멀티프로세싱을 하기 위해 또다른 추가 작업이 필요하며, 만약 동시에 진행되는 작업이 많을 경우 실행 시간이 오래 걸릴 수 있다는 점이다. 그래서 중요한 관제 시스템의 경우 시분할 시스템이 아닌 실시간 시스템(real-time system)을 사용하기도 한다.

 

2.5.2 다중 사용자 시스템

시분할 시스템은 한 컴퓨터에서 여러 명이 작업할 수 있는 다중 사용자 시스템을 가능하게 했다. 이 시기에 AT&T 에서 C언어로 유닉스를 개발했고, 유닉스는 다중 사용자를 지원하는 운영체제이다. 

 

2.6 분산 시스템 (1970년대 후반)

1977년 스티브잡스가 최초의 개인용 컴퓨터를 발표하였고, 이 시기에는 개인용 컴퓨터의 운영체제로 애플의 매킨토시와 마이크로소프트의 MS DOS가 많이 사용되었다. 이 시기에는 인터넷도 함께 등장했는데, 서로 호환되지 않는 LAN을 하나로 묶기 위한 연구의 결과로 아르파넷이 만들어졌다. 아르파넷이 대중에게 개방되며 컴퓨터간의 네트워킹을 위한 TCP/IP라는 프로토콜을 정의하였고 오늘날의 인터넷은 이때 정의된 TCP/IP를 아직까지 사용하는 것이다.

개인용 컴퓨터와 인터넷이 보급되면서 값싸고 작은 컴퓨터들을 하나로 묶어 대형 컴퓨터에 버금가는 시스템을 만들게 되었는데 이를 분산 시스템(distributed system)이라 부른다. 분산 시스템은 네트워크 상에 분산되어있는 여러 컴퓨터로 작업을 처리하고 그 결과를 상호 교환하도록 구성된 시스템이다.

 

2.7 클라이언트/서버 시스템 (1990년대~현재)

분산시스템에 속한 모든 컴퓨터는 동일한 지위이기 때문에 컴퓨터가 고장나면 작업을 분해하거나 결과를 모으기 쉽지 않다. 이 단점을 해결하는 기술인 클라이언트/서버 시스템이 있다. 작업을 요청하는 클라이언트와 요청받은 작업을 처리하는 서버의 이중 구조로 나뉜다.

웹시스템이 보급되며 대중들에게 알려졌는데, 링크를 통해 접속하는 것 또한 전형적인 클라이언트/서버 구조이다. 이 시스템의 문제점으로는 서버 과부하인데, 사용자가 집중될 경우에 클라이언트의 요청을 처리하기 위해 많은 서버와 대용량의 네트워크가 필요하기 때문이다. 유명 공연/전시회의 티켓팅에 사람이 몰리면 서버가 다운되는 경우도 마찬가지의 경우다.

 

2.8 P2P 시스템 (2000년대 초반~현재)

2.8.1 P2P 시스템의 개념

1990년대 말 MP3 가 유행하면서 음악파일을 공유하려는 시도가 많았고, 클라이언트/서버 시스템이 과부하되는 경우가 있었다. 웹 페이지보다 MP3 파일의 크기가 크기 때문에 기존 구조로 구현할 수 없었기 때문이다. 이 때 등장한 것이 P2P 시스템(Peer-to-Peer System)이다. peer는 사용자의 컴퓨터를 가리키며, p2p는 서버를 거치지 않고 사용자와 사용자를 직접 연결한다는 의미이다. 

 

2.8.2 P2P 시스템의 예: 메신저

P2P 시스템을 이용하여 만든 최초의 MP3 파일 공유 프로그램은 미국의 냅스터이다. 비슷한 컨셉으로 한국에서는 소리바다가 만들어졌지만, 둘 다 불법 소프트웨어로 제재를 받았다. 이 기술은 불법 규제 때문에 발전하지 못하다가 메신저 프로그램에 도입되어 큰 발전을 이뤘다. 수만 명이 채팅을 하거나 파일을 주고받는 메신저는 클라이언트/서버 구조가 아닌 P2P 기술을 이용해야 효율적으로 서버의 부하 없이 구현이 가능하다. 

사용자 인증과 출석 등의 정보만 받고, 절차가 완료되면 서버를 거치지 않고 사용자 간에 직접 채팅을 하거나 데이터를 주고 받을 수 있다.

 

2.8.3 P2P 시스템의 예: 파일 공유

기존의 MP3 파일 공유 시스템은 파일 전송 도중 파일 보유자가 프로그램을 끄면 전송이 중단된다. 이러한 단점을 보완하며 P2P 시스템이 발전하고 있다. 대용량 P2P 파일 시스템은 서버에서 같은 파일을 가진 여러 사람으로부터 데이터를 나눠받는다. 1명에게 데이터를 받는것보다 10명에게 데이터를 받는 것이 10배 빠르다. 만약 누군가가 전송을 중단해도 다른 사람에게 나머지 데이터를 받을 수 있다.

대용량 P2P 시스템은 서버가 있는 시스템과 없는 시스템으로 나뉘는데, 서버가 없는 P2P 시스템의 대표적인 예로 비트코인의 블록체인이 있다. 비트코인은 블록체인 기법을 사용하여 서버가 없는 완전한 P2P 방식으로 거래 장부처럼 매매 기록을 남기도록 하였다. 이 기법은 시스템 전체에 거래 장부를 분산시킴으로써 하나의 장부가 조작되거나 유실되더라고 거래에 영향을 미치지 않는다. 전체 시스템의 50% 이상이 동의했을 때만 거래 장부의 변경이 가능하도록 함으로써 악의적인 공격을 방어할 수 있다. 

 

2.9 기타 컴퓨팅 환경(2000년대 초반~현재)

2.9.1 그리드 컴퓨팅

토이스토리 같은 3D 애니메이션을 제작한다고 할 때, 제작 과정에서는 고성능 PC가 필요하지만 제작 이후에는 활용도가 떨어진다. 이러한 경우에 필요한 기간동안만 PC를 사용하며 비용을 지불한다면 훨씬 효율적일 것이다. 이처럼 컴퓨팅 자원을 필요한만큼 구매하여 사용하는 환경그리드 컴퓨팅(grid computing) 이라 한다.

그리드 컴퓨팅은 분산 시스템의 한 분야로, 서로 다른 컴퓨터를 묶어 대용량의 컴퓨터 풀을 구성하고 이를 원격지와 연결하여 대용량 연산을 수행하는 컴퓨팅 환경이다. 대용량의 연산을 소규모로 나누어 분산시킨다는 점에서 분산 시스템이라고 볼 수 있다. 일반적으로 연구용이나 상업용으로 이용된다. 

일반인은 웹하드 서비스에서 그리드 시스템을 경험할 수 있다. 누군가가 웹하드에서 a 파일을 내려받으려고 시도하면 서버에서 주는 것이 아니라 전에 a 파일을 내려받은 컴퓨터로부터 몰래 데이터를 빼와서 전달하는데, 이 기술을 그리드 딜리버리(grid delivery) 라고 부른다. 그리드 딜리버리는 사용자의 컴퓨터를 느리게 하는 주범으로, 일부 웹하드 서비스 업체가 무료로 웹하드 이용권을 나눠주는 것은 몰래 사용자의 컴퓨터에 그리드 딜리버리 프로그램을 설치하여 서버의 부하를 줄이기 위한 것이다.

그리드 컴퓨팅이 하드웨어적인 컴퓨팅 환경의 통합이라면 SaaS(Software as a Service)는 사용자가 필요할 때 소프트웨어 기능을 이용하고 비용을 지불하는 개념이다. SaaS는 필요한 기능을 모아 서버에서 실행하고, 사용자는 필요한 서비스만 인터넷으로 제공받으며 월별 혹은 서비스 이용량에 비례하여 비용을 지불하는 서비스이다. 프로그램을 깔거나 업데이트를 할 필요없이 인터넷 접속만을 통해 이용할 수 있다는 장점이 있다.

2.9.2 클라우드 컴퓨팅

클라우드 컴퓨팅(cloud computing)은 그리드 컴퓨팅과 SaaS를 합쳐놓은 것으로, 언제 어디서나 응용 프로그램과 데이터를 자유롭게 사용할 수 있는 컴퓨팅 환경이다. 시스템이 구름에 가려진 것처럼 사용자에게 보이지 않는 컴퓨팅 환경이라는 의미에서 클라우드라는 명칭이 붙게 되었다고 한다.

2006년 구글의 직원이 처음 제안한 것으로, 기기 간의 데이터 이동이 자유롭다는 장점이 있다. 클라우드 컴퓨팅은 IT 산업 전반에 많이 활용되고 있다. 과거에는 회사에서 홈페이지 서비스를 제공하기 위해 서버를 설치하거나 관리 인력을 따로 뒀지만, 오늘날에는 클라우드 서버에 회사 홈페이지를 올려두고 사용한만큼만 비용을 지불하면, 서버와 네트워크 관리를 클라우드 서버 제공자가 알아서 해준다.

클라우드는 백업을 통해 휴대폰을 바꾼다해도 이전 휴대폰과 같은 상태로 사용하는 등의 장점이 있다. 클라우드 컴퓨팅 환경을 통해 구현하기 어려웠던 기술을 가능케 할 수 있으며, 또한 4차 산업혁명에 보탬이 되고 있다.

 

2.9.3 사물 인터넷

사물 인터넷(Internet of Things, IoT)은 사물에 센서와 통신 기능을 내장하여 인터넷에 연결하는 기술이다. 인터넷으로 연결된 사물들이 데이터를 주고받아 스스로 분석하고 학습한 정보를 사용자에게 제공하거나 새로운 서비스를 창출하는 기술이다. 이는 재난 방지 시스템, 에너지 제어 시스템, 스마트 시티 등 다양한 분야에서 활용되고 있다.

 

 

reference : [도서] 쉽게 배우는 운영체제


 

1.1 일상생활 속의 운영체제

운영체제(Operating System, OS)는 PC를 켜면 가장 먼저 만나게 되는 소프트웨어로, 소프트웨어에 익숙하지 않은 사람도 한 번쯤 들어봤을 단어이다. PC에는 Windows, Mac, Linux 등의 운영체제가 있고, 스마트폰에도 운영체제가 쓰이는데 대표적으로 구글의 안드로이드와 애플의 iOS가 대표적이다.

 

 

조금 더 기술적으로 이야기하자면, 하드웨어와 소프트웨어를 모두 관리하며 사용자가 장비를 편리하게 사용하고 장비의 자원을 효율적으로 관리할 수 있도록 환경을 제공하는 소프트웨어이다. 엄밀하게 말하면 PC 뿐만 아니라 게임기에서 전원을 켜고 게임을 골라서 동작하도록 관리하는 시스템도 운영체제이다.  

컴퓨터와 스마트폰 외에도 내비게이션, 스마트워치, 스마트 TV 등 다양한 제품에도 운영체제가 기본적으로 탑재되어 있다. 이처럼 CPU의 성능이 낮고 메모리가 작은 시스템에 내장하도록 만든 운영체제를 임베디드(embedded) 운영체제, 임베디드 시스템이라고 한다. 이런 식으로 전자기기에 공장 출고시 설치되며 응용 프로그램 설치를 통한 기능 추가를 할 수 없는 것은 보통 펌웨어(firmware)라고 부른다. 이런 기기들은 펌웨어 자체가 일종의 응용 프로그램 역할을 한다.

임베디드 운영체제를 사용하는 기계와 아닌 기계는 큰 차이가 있는데, 임베디드 운영체제가 없으면 제작 당시 구현한 기능 외에 다른 기능을 추가할 수 없다. 만약 임베디드 운영체제가 있으면, 부가적인 기능을 추가하거나 무선 통신을 이용할 수 있다. 그래서 유선 전화기는 통화 기능만 사용 가능하고, 무선 전화기는 통화 외에도 게임을 하거나 내비게이션 등으로 사용할 수 있다.

 

1.2 운영체제의 필요성

초기의 컴퓨터는 연산 기능만 수행했지만 점점 하드웨어가 업그레이드되며 메모리, CPU 등의 성능이 향상되며 연산 기능 외에도 다양한 작업을 동시에 수행할 수 있게 되었다. 컴퓨팅 환경이 바뀌며 사용 규칙이 필요해졌고, 이 때 등장한 것이 운영체제이다.

운영체제가 없는 기계는 작동이 불가능할까? 운영체제는 단순히 멀티플레이를 위해 필요한걸까? 에 대한 궁금증을 풀어보자.

  • 컴퓨터는 운영체제가 없어도 작동할까? 작동한다. 세계 최초의 컴퓨터인 에니악(ENIAC)은 운영체제도 없고 키보드와 모니터도 없었다. 에니악은 진공관을 전선으로 연결하여 회로를 구성했고 이를 컴퓨터라 부르는 이유는 기능을 바꿀 수 있는 기계이기 때문이다. 하지만 에니악이 새로운 기능을 구현하려면 매번 회로를 변경해야 하고 복잡한 기능은 구현이 어렵다.

  • 운영체제가 있는 기계와 없는 기계는 어떤 차이가 있을까? 운영체제의 존재 여부는 앞서 언급했듯이 부가 기능 추가 여부와 같다. 그러므로 운영체제가 있다면 컴퓨팅 성능 및 효율성의 향상도 가능하다.

  • 운영체제는 성능 향상에만 필요할까? 운영체제는 성능 향상뿐 아니라 자원 관리의 역할도 한다. 우리가 PC에서 사용하는 다양한 프로그램을 응용 프로그램이라고 한다. 하지만 대부분이 하나의 입출력장치(키보드,마우스,cpu,모니터) 로 이루어져있기 때문에 각 응용 프로그램은 이 장치를 독차지하려고 한다. 예를 들어 워드 프로세서와 메신저를 동시에 사용한다면 두 프로그램 모두 입출력장치를 독차지하려 하거나 다른 응용 프로그램을 파괴하려 할 것이다. 이를 해결하기 위한 강력한 중재자 역할을 하는 것이 운영체제이다. 누구에게 키보드를 먼저 줄 지, 누구에게 모니터를 먼저 줄 지 등을 결정한다.

  • 운영체제는 자원을 어떻게 관리하는가? 컴퓨터에 부착된 모든 장치를 컴퓨터 자원(computer resource)이라 하는데, 운영체제는 사용자가 장치에 직접 접근하는 것을 막음으로써 자원을 보호한다. 예를 들어 자료를 저장할 때, 하드 디스크의 특정 위치에 저장하는 것이 아니라 운영 체제에게 부탁을 함으로써 운영체제가 알아서 적당한 위치에 저장한다. 외부에서의 악의적인 침입을 막기 위해 모든 응용 프로그램을 직접적으로 노출하지 않거나 자원을 숨기기도 한다.

  • 사용자는 숨어 있는 자원을 어떻게 이용할 수 있을까? 운영체제는 사용자가 직접 자원을 접근하지 못하게 하지만 간접적으로 접근할 수 있도록 여러 방법을 제공한다. 사용자는 하드 디스크에 자료가 저장된 위치는 알 수 없지만, 우리가 사물함에 번호를 부여하고 그 번호표로 사물함에 접근하듯이 사용자가 데이터를 사용할 수 있도록 번호표를 나눠준다. 번호표를 통해 데이터를 꺼내거나 수정, 삭제하도록 하는 시스템을 인터페이스(interface)라고 한다. 운영체제는 다양한 인터페이스를 제공함으로써 사용자의 편의를 도모한다.

1.3 운영체제의 정의

운영체제를 레스토랑에 빗대어 비유하자면, 손님이 음식을 주문하고 직원이 메뉴를 주방에 알려주어 주문한 음식을 제공받는 과정과 같다. 하지만 손님이 주방에 들어가서 조리기구를 만지거나 직접 조리를 할 수는 없다. 그렇게 한다면 주방이 어지럽혀지기 때문이다. 운영체제도 마찬가지로 사용자가 직접 하드디스크에 접근할 수 없고 운영체제를 통해 전달받을 수 있다. 

쉽게 말하자면 인터페이스는 마치 자동차의 핸들, 계기판과 같다. 자동차는 엔진과 바퀴로 움직이지만 운전자가 핸들로 조종하고 계기판으로 주행 상태를 인지하듯이 컴퓨터는 CPU와 메모리로 움직이지만 사용자가 키보드, 마우스로 여러가지 입출력 기능을 할 수 있다. 즉, 운영체제 인터페이스를 통해서만 컴퓨터 자원을 사용할 수 있다.

 

1.4 운영체제의 역할

  • 자원관리
    컴퓨터로 문서를 작성하고 서핑을 하는 등의 과정에서 사용하는 컴퓨팅 자원을 응용 프로그램에 나누어 사용자가 원활하게 작업할 수 있도록 돕는다. 만약 프로그램이 여러개라면 우선 순위에 따라 적당한 순서로 배분하고, 사용자가 사용하지 않는다면 다시 회수하는 등의 작업을 한다.

  • 자원보호
    자원을 관리할뿐만 아니라 악의적인 사용자나 미숙한 사용자로부터 자원을 보호한다. 그렇기에 비정상적인 작업에 있어서 자원을 지키려고 한다.

  • 하드웨어 인터페이스 제공
    운영체제는 다양한 하드웨어를 일관된 방법으로 사용할 수 있도록 지원하기 때문에, 우리는 어떤 회사에서 만든 하드웨어인지 신경쓸 필요 없다. 하드웨어가 운영체제가 상호작용하려면 드라이버를 설치해야 하지만, 대부분의 경우 자동으로 설치된다. 일부 수동 설치가 필요한 드라이버를 하드웨어 인터페이스라고 한다.

  • 사용자 인터페이스 (User Interface) 제공
    사용자가 운영체제를 편리하게 사용하도록 지원하는 것이다. 과거 MS-DOS 등의 운영체제에서는 키보드만 사용했지만 요즘은 마우스나 터치스크린 등을 지원하여 편리한 인터페이스를 사용할 수 있다. 이처럼 사용자의 편의를 위해 제공되는 기능이 사용자 인터페이스이다.

 

1.5 운영체제의 목표

 

 

  • 효율성
    '자원 관리'란 같은 자원을 관리하더라도 효율적으로 해야한다는 것이다. 적은 자원을 활용하여 같은 작업량을 처리하거나, 같읕 자원을 활용하여 더 빠른 작업 속도를 보여주는 등의 결과를 통해 확인할 수 있다. 일반적으로 운영체제의 크기를 최소화하고 운영체제가 사용하는 코드를 최적화함으로써 이루어진다.

  • 안정성
    하드웨어 전체를 관리하기 때문에 사용자와 응용프로그램은 운영체제 위에서 작업을 한다고 볼 수 있다. 만약 운영체제가 불안정하면 모든 작업이 불안하고 사용자가 고스란히 불편함을 겪기 때문에, 운영체제에서는 안정성이 굉장히 중요하다. 갑자기 PC가 꺼지거나 멈추는 일이 일어나면 안 된다.

  • 확장성
    자원을 추가/제거하는 것이 편리해야 한다. 이를 확장성이 좋다고 하는데, 운영체제는 하드웨어 종류에 상관없기 꽂으면 바로 실행할 수 있는 plug & play 기능을 제공해야 한다. 또한 하드웨어 제작자의 편리성도 고려해야 한다.



  • 편리성
    무엇보다도 중요한 것이 사용자의 편리성이다. 사실 운영체제 입장에서는 효율성만 높이는 것은 어렵지 않다. 사용자에게 GUI를 제공하지 않고 텍스트만 사용하게 하면 훨씬 효율적일 것이다. 하지만 사용자가 불편해 하기 때문에 그렇게 하지 않는다. 운영체제는 무엇보다도 응용 프로그램과 사용자에게 다양한 편리성을 제공해야 하기 때문이다.

 

+ Recent posts