🖥 운영체제(Operating System)

우리가 문서 작업을 하고 저장하면 컴퓨터를 껐다 켜도 그 내용을 그대로 사용할 수 있습니다. 이는 컴퓨터의 저장 장치에 문서의 기록이 남아있기 때문인데요. 이러한 작업은 애플리케이션 혼자 할 수 있는 일이 아닙니다.

마찬가지로 게임에서 기술을 사용할 때 여러 효과음이 나오는데요. 이러한 효과음이 스피커에 출력되는 과정도 애플리케이션 혼자 한 일이 아닙니다. 어떤 프로그램의 도움을 받은 것이죠.

이처럼 애플리케이션 뒤에서 눈에 보이지는 않지만 많은 도움을 주는 프로그램이 있는데요. 이 프로그램이 바로 운영체제 줄여서, OS라고 합니다.

운영체제는 자동으로 실행되기 때문에 직접 사용한다는 느낌을 받기 어렵지만 모든 컴퓨터와 휴대폰에 설치되어 있어 사실상 우리가 매일 같이 사용하는 프로그램입니다. 이러한 운영체제의 도움으로 하드웨어와 함께 애플리케이션이 잘 동작하는 것입니다.

우리에게 익숙한 컴퓨터의 윈도우, macOS, Linux, 그리고 스마트폰의 안드로이드, iOS가 바로 운영체제입니다.

그렇다면 운영체제가 어떤 역할을 하기에 모든 기기에 설치되어 있고 기기를 켜자마자 운영체제부터 실행되는 것일까요?

💻 운영체제의 역할1 - 입력과 출력

운영체제의 첫번째 역할은 입력과 출력 관리입니다.

사용자의 입장에서 컴퓨터는 키보드와 마우스처럼 입력을 도와주는 입력 장치모니터처럼 입력한 결과를 출력해주는 출력 장치만 눈에 보입니다. 그만큼 입력과 출력은 컴퓨터에 있어 중요한 역할을 합니다.

장치선만 연결한다고 입력과 출력이 되는 것은 아닌데요. 중간에 운영체제가 동작해야 이 과정이 매끄럽게 이어지기 때문입니다.

시중에는 다양한 키보드와 마우스, 모니터가 출시되고 있습니다. 이외에도 마이크나 카메라, 스피커 등 다양한 장치가 존재하죠. 모니터가 두 개인 경우나 블루투스 헤드폰을 사용하는 등 컴퓨터의 환경은 사용자마다 참 다양합니다.

이처럼 여러 경우의 수를 따지고 보면 사실상 세상에는 똑같은 컴퓨터가 없다고 봐도 무방합니다. 신기한 것은 이 많은 경우의 수에도 불구하고 컴퓨터는 문제없이 동작합니다. 장비 뿐만 아니라 게임, 메신저, 인터넷 등 다양한 종류의 소프트웨어를 실행하더라도 모든 컴퓨터에서 동일하게 실행됩니다.

그렇다면 애플리케이션 개발자들은 이 모든 경우의 수를 계산해서 코드를 작성했을까요? 당연히 아니겠죠. 이러한 일이 가능한 이유는 운영체제가 입출력 장치와 애플리케이션을 연결해주기 때문입니다. 다시 말해, 운영체제가 여러 가지 제조자, 연결 방식 등을 모두 고려하여 정리한 다음에 애플리케이션에 신호를 전달함으로써 애플리케이션이 안정적으로 하드웨어를 사용할 수 있도록 도와줍니다.

이 때문에 애플리케이션 개발자가 애플리케이션 개발에만 집중할 수 있는 것이죠. 이처럼 프로그래밍 세계에서는 분업과 효율을 매우 중시하기 때문에 운영체제의 역할은 프로그래밍에서 특히 중요한 부분입니다.

요컨대, 사용자가 애플리케이션을 사용하기까지 운영체제가 하드웨어와 소프트웨어, 그 중간에서 중요한 역할을 수행하고 있습니다.

💻 운영체제의 역할2 - 저장과 불러오기

운영체제의 두번째 역할은 저장과 불러오기입니다.

컴퓨터가 하는 일 중 저장은 많은 부분을 차지합니다. 브라우저는 인터넷의 사용 기록을 저장하고 음악을 다운로드 하면 하드디스크에 저장됩니다. 인터넷의 게시글을 복사하면 클립보드에 저장해두고 붙여넣기를 하면 그 내용을 다시 불러올 수 있습니다.

컴퓨터에는 여러 종류의 저장 장치가 있는데요. 저장 장치마다 특징이 다릅니다.

우선, 컴퓨터가 켜져 있는 동안만 저장되는 정보가 있습니다. 이러한 정보를 휘발성 정보라고 합니다. 휘발성 문서는 컴퓨터가 꺼지면 사라지게 됩니다.

반면, 컴퓨터가 꺼지더라도 항상 남아있는 정보도 있습니다. 이러한 정보를 비휘발성 정보라고 하는데요. 문서를 파일로 저장하면 컴퓨터를 끄고 켜더라도 그 문서가 남아있죠. 다운로드 받은 음악도 마찬가지입니다.

이렇게 두 가지 타입의 저장이 있습니다. 운영체제가 저장의 타입을 결정하고 알맞은 저장장치에 정보를 저장합니다.

그런데 컴퓨터를 끄면 사라지는 휘발성 정보는 왜 필요한 것일까요? 저장 용량은 제한적이기 때문에 모든 정보를 다 저장할 수는 없습니다. 따라서 두 가지 타입으로 저장 정보를 나누는 것이죠.

우리가 흔히 알고 있는 하드디스크가 바로 비휘발성 저장장치이고 그 반대인 RAM은 휘발성 저장장치입니다.

이외에도 저장장치 간의 차이가 있는데요. 바로 읽고 쓰는 속도입니다. 프로그램을 실행하다보면 빠르게 읽어와야 하는 정보가 있고 그렇지 않은 정보도 있습니다. 영화를 재생할 때는 실시간으로 실행되어야 하기 때문에 전자에 속하고 이를 저장하는 경우에는 용량이 크기 때문에 느려도 상관없으므로 후자에 속합니다.

물론 무조건 빠르기만 하면 좋겠지만 앞서 저장장치의 용량과 유사하게 빠른 속도의 저장장치는 그만큼 가격이 비쌉니다. 따라서, 컴퓨터를 보면 빠른 저장장치는 용량이 작은 경우가 많고 느린 저장장치는 용량이 큰 경우가 대부분입니다.

컴퓨터는 어떤 저장장치를 사용해야 하는지 판단을 내려야 합니다. 이 판단을 대신해주는 것이 운영체제입니다.

삭제와 수정의 자유도에 있어서도 차이가 있습니다. 삭제, 수정이 가능한 프로그램도 있고 그렇지 않은 프로그램도 있는 것이죠. 컴퓨터를 쓰기 위해 존재하는 기본 세팅은 **ROM(Read-Only Memory)**라는 장치에 저장되어 있고 절대로 수정이 불가능합니다.

정리해보면 저장장치의 종류는 세 가지로 분류 가능합니다. 휘발성인지, 비활성인지, 빠르고 작은 용량인지, 느리고 많은 용량인지, 데이터가 수정 가능한지, 데이터가 수정 불가능인지.

ROM, RAM, HDD, SDD, CPU의 cache와 register까지 정말 다양한 저장장치가 컴퓨터에 내장되어 있습니다. 상황과 목적에 맞게 저장 공간들을 활용해서 여러 방식으로 저장과 불러오기를 해야합니다. 그리고 이러한 복합적인 판단과 운영을 운영체제가 하고 있습니다.

💻 운영체제의 역할3 - 멀티태스킹

우리는 컴퓨터로 문서를 작성하며 동시에 음악을 듣기도 하고 브라우저로 자료 검색을 하기도 합니다. 그와중에 보안 프로그램은 계속 돌아갈 것이고 눈에 보이지 않는 여러 프로그램들도 계속 실행되고 있을 겁니다. 그런데 이와 같이 여러 애플리케이션이 동시에 실행되면 오류가 발생할 수 있습니다.

음악을 듣기 위해서는 저장장치에서 음악 파일을 불러와야 하고 문서를 작성하려면 문서 파일을 불러와야 하며, 게임을 하기 위해서도 게임 파일을 저장장치로부터 불러와야 합니다.

이처럼 여러 프로그램들이 저장장치에 다양한 요청을 합니다. 저장 장치 입장에서는 매우 혼란스러운 상황인데요. 서로 다른 두 개의 파일을 다운 받다 보면 저장 공간이 겹치기도 하고 한 파일이 다른 파일에 침범할 수도 있습니다. 서로 어떤 일을 하고 있는지 알 수 없으니까요.

따라서, 애플리케이션 사이를 조율하는 역할이 필요합니다. 공간과 순서를 지정해주는 담당자가 필요한 것이죠. 그리고 이 일을 최대한 효과적으로 해야 컴퓨터가 빨리 동작할 수 있습니다. 음악 재생이 끝날 때까지 문서가 저장되지 않는다고 상상해보세요. 끔찍하죠?

여러 프로그램들이 동시에 실행되는 것멀티태스킹이라고 합니다. 운영체제는 여러 작업을 잘개 쪼개어 각 장치들이 효율적으로 일할 수 있도록 역할 분담과 순서, 분량 분배를 도와줍니다. 따라서, 음악을 들으며 게임을 하더라도 각각 따로 동작하는 것이 아니라 동시에 잘 실행이 되는 멀티태스킹이 가능해지는 것이죠.

🖥 운영체제의 종류

앞서 윈도우, macOS, Linux, 안드로이드, iOS 등 다양한 운영체제를 소개해 드렸었는데요. 이외에도 운영체제의 종류는 참 다양합니다.

윈도우와 안드로이드처럼 사용자가 설정을 쉽게 바꿀 수 있는 운영체제가 있습니다. 이러한 운영체제는 편리하긴 하지만 바이러스에 취약합니다. 반면, mac이나 iOS는 보안이 철저해서 환경설정의 선택지가 제한되어 있습니다.

운영체제는 용도에 따라 크게 네 종류로 나눌 수 있습니다. 데스크톱/랩톱, 모바일, 서버, 그리고 임베디드입니다.

데스트톱과 랩톱, 모바일 등은 앞서 설명드렸기 때문에 생략하겠습니다.

모바일의 경우 스마트폰에 국한되지 않고 태블릿과 워치 등에서도 공통적으로 사용하고 있다는 것만 알아두시면 좋겠네요. 기기에 따라 모양과 크기가 다르기 때문에 다른 사용환경에서 동일하게 구현될 수 있도록 하는 것이 모바일 운영체제의 가장 큰 역할일 것입니다.

서버회사에서 큰 데이터를 관리하거나 웹사이트를 운영하는 등의 목적으로 사용하는 컴퓨터입니다. 우리가 구글 드라이브에 자료를 저장하면 사실상 구글의 서버에 그 자료가 저장되고 있습니다. 따라서, 서버는 안정성, 속도, 효율이 가장 중요하고 서버 운영체제는 이러한 부분에 중점을 두고 있습니다. 현재는 우분투(Ubuntu), 유닉스(Unix) 등이 점유율에서 상위권을 차지하고 있습니다.

임베디드 운영체제는 컴퓨터, 모바일, 서버를 제외한 나머지 기기들에 들어간다고 보면 됩니다. 대표적으로 스마트 가전이 있죠. 이외에도 ATM, 키오스크, 자동차, 엘리베이터, 심지어 항공기에도 들어갑니다. 임베디드는 종류나 환경이 다양해서 여러 종류의 운영체제가 사용됩니다.

그 중에서도 **실시간 운영체제(Real-time operating system, RTOS)**들이 많이 사용되는데요. 실시간 운영체제는 무조건 빠르게 동작하기 보다 정해진 시간 이내에 안정적으로 동작하는게 더 중요합니다.

예를 들어, 리듬게임을 하는데 버튼을 눌러도 반응이 늦으면 참 답답하겠죠? 로켓을 발사할 때도 빠르게 동작하기보다는 정확히 동작하는 것이 더 중요할 것입니다.

따라서, A,B,C라는 과정이 있다면 이 세 과정의 총합이 짧지만 특정 단계가 더 오래 걸리게 하는 것보다는 세 단계 모두 걸리는 시간을 동일하게 설정하고 정확한 동작을 할 수 있도록 하는 것이 임베디드 세계에서는 더 중요합니다.

실시간 운영체제에는 VxWorks나 RT Linux 같은 것이 있지만 종사자가 아니라면 프로그래머들도 모르는 경우가 많습니다. 다른 종류의 운영체제라는 것 정도만 알아두어도 좋을 것 같습니다.

🖥 운영체제의 역사

운영체제의 종류는 다양하지만 그 뿌리는 하나로 이어져 있습니다. 바로 **유닉스(UNIX)**인데요. 유닉스로부터 다양한 운영체제가 탄생한 것이죠. 이러한 과정은 컴퓨터 역사에서 의미 있는 흐름이 되기도 했습니다.

유닉스는 1970년대 초반 벨 연구소 직원인 켐 톰슨과 데니스 리치 등이 처음 개발했습니다. 유닉스는 대부분 C언어로 작성되었고 다른 컴퓨터에 수정해서 적용하기 쉬운 특징이 있었기 때문에 인기가 많았습니다. 유닉스를 변형할 수 있는 C언어도 덩달아 인기를 얻었죠.

유닉스가 인기를 얻은만큼 이를 모방한 버젼의 운영체제들이 많이 등장했습니다. 이를 표준화하기 위해 POSIX라는 표준이 생겼습니다. POSIX에는 유닉스라면 갖춰야 할 규격과 기능을 정했고 이를 모두 만족해야만 유닉스의 공식 버젼으로 인증될 수 있도록 했습니다. 애플의 맥북이나 아이맥의 macOS도 유닉스의 표준을 모두 만족하는 공식 유닉스 운영체제입니다.

유닉스의 뿌리에도 유닉스와 직접적으로 연결되지 않는 UNIX-like라는 부류가 있는데요. Linux가 그 대표적인 예입니다.

유닉스는 AT&T라는 기업이 개발하여 소유하고 있었습니다. 따라서, 유닉스를 사용하고 인증받기 위해서는 여러 제약과 비용이 발생했는데요.

프로그래밍의 세계는 공유의 문화가 있다고 말씀드렸죠? '자유 소프트웨어 재단'이라는 곳에서 모두가 자유롭게 사용하고 변형하고 공개할 수 있는 유닉스를 닮은 운영체제를 만드는 프로젝트 GNU를 진행했습니다.

GNU란, 'GNU is Not Unix' 즉, 'GNU는 Unix가 아니다'라는 의미를 가지고 있는데요. 유닉스의 코드를 한 줄도 사용하지 않고 만든 유닉스와 유사한 OS를 말합니다. 따라서, POSIX는 만족하지만 공식 인증은 받지는 않았습니다. 그렇기에 유사 유닉스, UNIX-like라고 불리는 것이죠.

이 GNU에 리누스 토발즈가 개발한 리눅스 커널을 합쳐 GNU/Linux 운영체제를 완성하게 됩니다. 참고로 커널은 온전한 운영체제는 아니고 운영체제의 핵심 부분에 해당합니다. 이 때문에 표기에 논란은 있었지만 현재는 모두들 Linux라고 부르곤 합니다.

리눅스는 컴퓨터 역사상 가장 많은 사람들이 들어간 공개 프로젝트로 2015년 이후로 git을 활용하여 1400개 회사, 15000명 이상이 참여했습니다. 이후로도 인텔, IBM, 삼성, 구글 등 수많은 대기업이 참여하여 리눅스를 발전시키고 있습니다. 그 결과, 리눅스는 어마어마한 파급력을 가진 운영체제가 되었습니다.

자유 소프트웨어 재단에서는 누구나 사용하고 변형할 수 있다는 것을 모토로 프로젝트를 시작했기 때문에 GNU/Linux를 기반으로 만든 체제는 아무런 제약 없이 변형이 가능합니다. 다만, 반드시 코드를 공개해야 하는 의무가 있기 때문에 이를 기반으로 수많은 변형 운영체제가 등장하는 계기가 되었습니다.

현재는 안드로이드, 우분투, 크롬OS 등 많은 리눅스 계열 운영체제들이 있습니다. 리눅스 재단에 따르면 현재 스마트폰의 82%, 임베디드 기기의 62%, 슈퍼컴퓨터 시장의 99%가 리눅스로 작동한다고 하네요.

리눅스가 이렇게 발전할 수 있었던 데에는 공유의 가치를 믿고 실현했던 수많은 프로그래머들의 노력이 있었기 때문이 아니었을까요?


이번 시간에는 소프트웨어와 하드웨어를 연결하는 운영체제의 역할과 종류, 역사에 대해 알아보았습니다. 다음 시간에는 지금까지 배운 내용을 바탕으로 애플리케이션에 대해 좀 더 자세히 알아보도록 합시다.

* 이 자료는 CODEIT의 컴퓨터 개론 강의를 기반으로 작성되었습니다.
profile
There's Only One Thing To Do: Learn All We Can

0개의 댓글