운영체제에 대해 깊이있게 학습하기 위해 '쉽게 배우는 운영체제'라는 도서를 구매하였습니다. 총 챕터는 12개로 1개의 챕터를 학습할 때 마다 하나의 포스트를 작성해보겠습니다.
운영체제의 개요
운영체제 소개
생활 속 운영체제
우리는 일상에서 운영체제를 많이 경험하고 있습니다. 예를 들어 Windows와 Mac OS, Android, iOS가 있습니다. 컴퓨터는 원래 미사일 탄도를 계산하기 위해서 개발되었는데 **이를 계산기라고 부르지 않고 컴퓨터**라고 부르는 이유는 프로그래밍이 가능한 기계이기 때문입니다.
- 범용 컴퓨터 : 웹 서핑, 문서 작성 등 다양한 작업에 사용되는 컴퓨터
- 임베디드 컴퓨터(시스템) : 스마트 시계, 스마트 TV 등에 탑재된 컴퓨터
운영체제의 정의
컴퓨터는 크게 하드웨어, 소프트웨어로 구성되어지며 소프트웨어는 하드웨어를 제어하여 작업을 수행시키는 명령의 모음, 즉 프로그램입니다. 소프트웨어는 정해진 절차에 따라 하드웨어를 사용하여 데이터를 처리하는데, 크게 응용 프로그램과 시스템 소프트웨어로 나눌 수 있습니다.
- 응용 프로그램 : 문서 작성을 위한 한글이나 영상 재생을 위한 곰플레이어처럼 특정 작업을 위해 사용하는 프로그램입니다.
- 시스템 소프트웨어 : 컴퓨터 하드웨어와 응용 프로그램을 관리하기 위한 소프트웨어입니다. 예시로는 운영체제, 유틸리티가 있습니다.
운영체제의 기능이 많아지고 구조가 복잡해짐에 따라 바이러스 검사, 디스크 조각 모음, 압축 프로그램과 같이 운영체제의 작업을 보조하는 소프트웨어가 등장했는데 이런 소프트웨어를 유틸리티라고 합니다.
컴퓨터에는 다양한 프로그램이 설치되어 있으며 이 프로그램들은 컴퓨터 자원을 공유하게 되는데 이를 관리하고 운영하는 소프트웨어가 운영체제입니다. 운영체제는 사용자가 컴퓨터 자원에 직접 접근하는 것을 막고, 악의적인 사용자에게 데이터를 보호하기 위해 모든 컴퓨터 자원을 숨겨 놓습니다. 즉 컴퓨터 자원을 효율적으로 관리하는 소프트웨어입니다. 또한 하드웨어의 도움 없이는 작동하기 어려우므로 소프트웨어와 하드웨어의 특성을 모두 갖춘 형태로 운영되며 이를 펌웨어라 합니다.
이렇게 숨겨놓은 자원을 사용하기 위해서는 인터페이스라는 장치를 사용합니다. 인터페이스는 사용자가 컴퓨터를 사용할 수 있도록 해주고 그 결과를 알려주는 장치로 운영체제가 다양한 인터페이스를 제공합니다.
컴퓨터 구조와 운영체제
운영체제는 크게 커널과 인터페이스로 나누어집니다. 커널은 운영체제의 핵심 기능을 모아놓은 것으로 모든 컴퓨터 자원을 관리하기 때문에 사용자나 응용 프로그램은 커널을 통해서만 컴퓨터 자원에 접근할 수 있습니다. 이를 인터페이스를 통해 커널에 명령이 내려지고 인터페이스 결과를 전달해 주는 방식입니다.
응용 프로그램이 컴퓨터 자원을 사용하는 경우에는 운영체제가 제공하는 함수 형태의 인터페이스를 이용해야 하는데 사용자 인터페이스(UI)와 그래픽 사용자 인터페이스(GUI)가 있습니다.
운영체제의 역할
이어서 운영체제의 역할에 대해서 알아보겠습니다. 운영체제의 역할에는 자원관리, 자원보호, 하드웨어 인터페이스 제공, 사용자 인터페이스 제공이 있습니다.
- 자원 관리 : 운영체제는 자원을 응용 프로그램에 나누어 주어 사용자가 원활하게 작업할 수 있도록 돕습니다. 만약 자원을 요청한 프로그램이 다수 일 경우에는 적당한 순서로 자원을 배분하고 적절한 시점에 자원을 회수하여 다른 프로그램에 분배합니다.
- 자원 보호 : 악의적인 사용자나 미숙한 사용자로 부터 자원을 보호합니다.
- 하드웨어 인터페이스 제공 : 어떤 하드웨어를 사용할 때 마다 별도의 소프트웨어를 설치하지 않고 사용할 수 있도록 하드웨어 인터페이스를 제공합니다. 다만 하드웨어 인터페이스의 지원을 받기 위해 드라이버를 설치해야 합니다. 드라이버는 하드웨어 장치와 상호작용하기 위해 만들어진 프로그램으로 대부분 자동으로 설치가 되지만 일부 하드웨어의 경우 따로 설치를 해야합니다.
- 사용자 인터페이스 제공 : 사용자가 운영체제를 편리하게 사용하도록 지원합니다.
운영체제의 목표
운영체제의 목표로는 효율성, 안정성, 확장성, 편리성이 있는데 이는 운영체제의 역할과 매칭이 됩니다.
- 효율성 <-> 자원관리
- 안정성 <-> 자원보호
- 하드웨어 인터페이스 제공 <-> 확장성
- 사용자 인터페이스 제공 <-> 편리성
운영체제의 발전
초창기 컴퓨터(1940년대)
초창기의 컴퓨터인 에니악은 주변장치 없이 수 많은 진공관을 전선으로 연결한 것(2진법)으로 이렇게 연결한 전선으로 논리회로를 구성하는 것을 하드와이어링 방식이라고 합니다. 다른 계산이나 수식을 사용하려면 전선을 다시 연결해야만 하고, 운영체제 또한 없었습니다.
일괄 작업 시스템(1950년대)
에니악은 기술 발전을 거쳐 IC라는 칩으로 만들어졌습니다. IC칩을 이용하여 현대적인 모습의 컴퓨터가 탄생하였는데 CPU와 메인메모리, 운영체제가 있으며 천공카드 리더라는 입력장치와 라인 프린터라는 출력장치를 사용하였습니다. 하드와이어링 시스템과 달리 천공카드 리더를 사용하여 프로그램을 교체하면 다른 작업이 가능한 방식입니다. 하지만 프로그램과 데이터를 동시에 입력하고 모든 작업을 한꺼번에 처리해야 하므로 중간에 데이터를 입력하거나 수정이 불가능한데 이를 일괄 작업 시스템(일괄 처리 시스템)이라 합니다.
ex) .bat, .sh
대화형 시스템(1960년대 초반)
키보드와 모니터의 등장으로 작업 중간에 사용자가 입력하거나 사용자에게 중간 결과 값을 보여줄 수 있게 되었습니다. 이처럼 컴퓨터와 사용자의 대화를 통해 작업이 이루어지는 시스템을 대화형 시스템이라 합니다. 다만 일괄 처리 시스템은 작업시간을 예측할 수 있지만 대화형 시스템은 예측하기가 어렵습니다.
시분할 시스템(1960년대 후반)
컴퓨터를 효율으로 사용하기 위한 연구로 멀티프로그래밍 기술이 개발되었습니다. 멀티프로그래밍 기술은 하나의 CPU로 여러 작업을 동시에 실행하는 기술로 각 작업에 일정 시간을 할당하여 작업을 하는 것으로 매우 빠른 속도로 반복하기 때문에 동시에 실행되는 것 처럼 보입니다. 이처럼 여러 작업을 조금씩 처리하여 작업이 동시에 이루어지는 것처럼 보이게 하는 것을 시분할 시스템이라 합니다. 이때 잘게 나뉜 시간 한 조각을 타임 슬라이스라고 합니다.
오늘날 대부분 시분할 시스템이 사용되며 시분할 시스템에서 동시에 실행되는 작업의 개수를 멀티프로그래밍 수준 또는 멀티프로그래밍 정도라고 합니다. 시분할 시스템은 여러 프로그램이 메모리에 공존하므로 메모리를 정리하는 추가 작업이 필요하며, 많은 양의 작업이 공존할 경우, 중요한 작업이 일정 시간 안에 끝나는 것을 보장하지 못합니다.
이를 보완하기 위해 일정 시간 안에 작업이 처리되도록 보장하는 실시간 시스템이 등장하였습니다.
- 경성 실시간 시스템 : 지정한 응답 시간을 정확히 지키는 시스템
- 연성 실시간 시스템 : 지정한 응답 시간을 최대한 지키지만 어느 정도 융통성이 허용된 시스템
시분할 시스템에서 여러 작업을 동시에 하는 것은 한 사람이 여러 프로그램을 동시에 실행하거나 여러 사람이 동시에 작업할 수 있다는 의미로 이처럼 하나의 컴퓨터에서 여러 명이 작업할 수 있는 시스템을 다중 사용자 시스템이라 합니다.
분산시스템(1970년대)
초기에는 메인프레임이라는 고가의 대형 컴퓨터를 사용하였지만 개인용 컴퓨터와 인터넷이 보급되면서 새로운 컴퓨팅 환경이 조성되었습니다. 값이 저렴하고 크기가 작은 컴퓨터를 하나로 묶어 대형 컴퓨터에 버금가는 시스템을 만들게 되었는데 이를 분산 시스템이라고 부릅니다. 분산 시스템은 네트워크상에 분산된 여러 컴퓨터로 작업을 처리하고 그 결과를 상호 교환하도록 구성한 시스템입니다.
클라이언트/서버 시스템(1990년대)
분산 시스템에서는 모든 컴퓨터가 지위가 같기 때문에 하나가 고장나거나 추가되면 작업을 분배하고 결과를 모으기가 쉽지 않았습니다. 이를 클라이언트/서버 시스템으로 문제를 해결하였으며 요청하는 클라이언트와 응답하는 서버의 이중 구조로 나뉘어져 있습니다.
클라이언트/서버 시스템의 문제는 서버의 과부화로 모든 요청이 서버로 집중되므로 요청이 많아지면 과부화가 일어날 수 있습니다.
P2P 시스템(2000년대)
클라이언트/서버 시스템의 서버 과부화를 해결하기 위한 시스템으로 서버를 통해 데이터를 가져오는 것이 아닌 클라이언트 끼리 데이터를 주고 받는 시스템으로 서버의 역할은 처음 접속하였을 때 인증과정을 거치며 데이터를 요청할 때 서버에서 요청받을 클라이언트의 위치 정보를 제공해줍니다. 이처럼 서버는 중재만 하고, 파일을 얻고자 하는 말단 사용자가 파일을 가진 말단 사용자로부터 직접 다운로드하는 시스템을 P2P 시스템이라 부릅니다.
서버가 없는 P2P 시스템인 블록체인도 있습니다. 블록체인에 대해 간단하게 설명하면 분산 저장 방식으로 기존에는 서버에 기록된 내용을 모든 유저에게 기록하는 것과 같습니다. 이로인해 기록이 한 두개 조작되거나 유실되어도 영향이 없으며 보안성이 높다는 장점이 있습니다.
클라우딩 컴퓨팅(2000년대)
이 전에 분산 시스템은 특정 영역에서만 사용되다가 그리드 컴퓨팅으로 발전하였습니다. 그리드 컴퓨팅은 여러 곳에 떨어진 컴퓨티 파워나 소프트웨어를 하나로 묶어 하나의 컴퓨터 처럼 사용하는 기술입니다. 하지만 적용할 분야가 제한적이라 대중화 되지 못했습니다.
이후 무선 통신망의 발달로 컴퓨터, 저장장치, 소프트웨어를 들고 다니지 않고 작업이 가능한 세상이 되었습니다. 하드웨어와 소프트웨어를 클라우드라고 불리는 중앙 시스템에 숨기고 사용자는 필요한 서비스만 그때그때 이용하는 방식의 컴퓨팅 환경을 클라우드 컴퓨팅이라고 합니다.
클라우드 컴퓨팅 환경을 예시로 들면 윈도우가 있습니다. 예전에는 윈도우 설치용 CD를 사용하여 인터넷을 이용하였지만 요즘은 윈도우 정품 라이센스 키를 구입하고 다운로드만 하면 인터넷이 바로 설치됩니다. (포인트는 저장 장치 없이 설치 및 사용이 가능하다는 점입니다.)
사물 인터넷(2000년대)
사물이 인터넷에 연결된 시스템을 사물 인터넷이라 하고, 간단히 IoT라 부릅니다. 사물 인터넷은 다양한 사물이 센서와 통신 기능을 내장하여 스스로 통신하며 지능적인 서비스를 제공하는 기술이라 정의할 수 있습니다.
운영체제의 구성
커널과 인터페이스
커널은 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심 기능을 구현한 프로그램입니다. 인터페이스는 사용자와 응용 프로그램에 인접하여 커널에 명령을 전달하고 실행 결과를 사용자와 응용 프로그램에 돌려주는 역할을 합니다.
운영체제는 크게 유닉스 계열 커널과 윈도우 계열 커널로 나뉘어집니다.
- 유닉스 계열 커널 : 셸(문자 기반의 사용자 인터페이스)
- 윈도우 계열 커널 : CMD(문자 기반의 사용자 인터페이스)
시스템 호출과 디바이스 드라이버
시스템 호출은 커널이 자신을 보호하기 위해 만든 인터페이스입니다. 커널은 컴퓨터 자원을 보호하기 위해 사용자나 응용 프로그램이 자원에 직접 접근하는 것을 차단합니다. 따라서 자원을 이용하려면 시스템 호출이라는 인터페이스를 이용하여 접근해야 합니다.
시스템 호출과 유사한 용어로 API와 SDK가 있습니다.
- API(응용 프로그램 인터페이스) : 응용 프로그램이 자신과 연관된 프로그램을 만들 수 있도록 제공하는 인터페이스
- SDK(시스템 개발자용 키트) : 프로그램 개발자를 위해 API, 코드 편집기, 에뮬레이터 같은 각종 개발용 응용 프로그램까지 하나로 묶어서 배포하는 개발 툴
커널과 하드웨어의 인터페이스를 디바이스 드라이버 또는 드라이버라고 부릅니다. 위의 사진처럼 드라이버는 전체를 감싸고 있지 않은데 이는 커널이 제공하는 드라이버도 있고 하드웨어 제작자가 제공하는 드라이버도 있기 때문입니다.
커널의 역할
- 프로세스 관리 : 프로세스에 CPU를 배분하고 작업에 필요한 제반 환경을 제공합니다.
- 메모리 관리 : 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상공간을 제공합니다.
- 파일 시스템 관리 : 데이터를 저장하고 접근할 수 있는 인터페이스를 제공합니다.
- 입출력 관리 : 필요한 입력과 출력 서비스를 제공합니다.
- 프로세스 간 통신 관리 : 공동 작업을 위한 각 프로세스 간 통신 환경을 지원합니다.
커널의 종류
단일형 구조 커널
초창기 운영체제의 구조, 커널의 핵심 기능을 구현 하는 모듈이 하나로 구성되어 있습니다. 장점으로는 모듈이 거의 분리되지 않았기 때문에 모듈 간의 통신 비용이 줄어 효율적인 운영이 가능하지만 단점으로는 버그나 오류를 처리하기 어렵고, 작은 결함이 시스템 전체로 확산할 수 있으며, 다양한 환경의 시스템에 적용하기 어려우며, 현대의 운영체제는 매우 크고 복잡하여 구현하기가 어렵습니다.
계층형 구조 커널
비슷한 기능을 가진 모듈을 묶어서 하나의 계층으로 만들고 계층 간의 통신을 통해 운영체제를 구현하는 방식입니다. 장점으로는 버그나 오류를 쉽게 처리할 수 있으며, 해당 계층만 수정하기 때문에 디버깅 하기도 쉽습니다. 대부분 오늘날의 운영체제는 이 구조로 이루어져 있습니다.
마이크로 구조 커널
계층형 구조 커널도 다양한 하드웨어와 사용자의 요구를 수용하기 위해 점차 커널의 크기가 커져 장점을 살리지 못하였습니다. 이를 해결하기 위해 개발된 것이 마이크로 구조 커널입니다.
마이크로 구조 커널의 운영체제는 프로세스 관리, 메모리 관리, 프로세스 간 통신 관리 등 가장 기본적인 기능만 제공하며 운영체제의 많은 부분이 사용자 영역에 구현되어 있습니다. 커널은 메모리 관리와 프로세스 간의 동기화 서비스를 제공하며, 메모리 관리자와 동기화 모듈은 프로세스 간 통신 모듈로 연결되어 있으며 각 모듈은 세분화되어 존재하고 정보 교환은 프로세스 간 통신으로 이루어 집니다. 이로 인해 하나의 모듈이 실패하여도 전체에 영향이 없으며, 이식하기가 쉽습니다.
가상머신
가상머신이란 운영체제와 응용 프로그램 사이에서 작동하는 프로그램으로 호환성으로 인하여 작동하지 못하는 소스코드를 해결하기 위하여 등장하였으며 하나의 코드로 여러 운영체제에서 똑같이 실행할 수 있도록 지원합니다.
'운영체제' 카테고리의 다른 글
[쉽게 배우는 운영체제] 컴퓨터의 구조와 성능 향상 (9) | 2025.05.08 |
---|