운영체제란?
운영체제를 간단히 말하면 "컴퓨터"를 운영하는 소프트웨어라고 할 수 있다.
그렇다면 컴퓨터의 정의를 명확히 하는 것이 중요할텐데, 많은 정의가 있을 수 있겠지만 가장 쉽게 생각할 수 있는 정의는 범용성과 계산가능성을 모두 충족한 기계라고 할 수 있다.
각각 쉽게 설명한다면 S/W가 하고자 하는 모든 것들을 H/W가 지원할 수 있고(범용성), 튜링 머신으로 계산가능한(계산가능성) 기계라고 할 수 있겠다. 여기서 튜링 머신으로 계산가능하다는 것은 너무 어려우니 그냥 튜링이 정의한 컴퓨터의 지표 정도로 생각하면 될 것 같다. 이 정의 때문에 소프트웨어(앱)를 깔아서 카메라, 영화, 게임 등의 다양한 기계로 사용할 수 있는 스마트폰은 컴퓨터이지만, 기존의 소프트웨어를 그대로 사용할 수 밖에 없는 계산기는 컴퓨터가 될 수 없는 것이다.
이 모든 것을 가능하게 해주는 시스템이 바로 운영체제인 것이다. 그래서 운영체제가 있는 기계를 컴퓨터라고 정의할 수 있다.
운영체제가 하는 역할
앞서 말했던 것처럼 운영체제란 컴퓨터의 하드웨어를 관리하는 소프트웨어이다. 컴퓨터 시스템은 크게 하드웨어, 운영체제, 어플리케이션 시스템, 그리고 사용자로 나눌 수 있는데 아래와 같은 그림처럼 작동한다.
따라서 운영체제가 갖는 핵심역할은 사용자와 하드웨어 간에 중간 매개라고 할 수 있다.
컴퓨터 시스템 구성
운영체제의 역할을 자세히 알아보기 위해 전체적인 컴퓨터 시스템 구성을 간단하게 살펴보도록 하자.
부팅
컴퓨터 전원을 켰을 때 가장 처음해야 하는 일은 메모리에 운영체제를 로딩하는 것이다. 하드 디스크에 있는 운영체제 프로그램을 메모리에 상주시키고 컴퓨터가 작동할 수 있게 하는 것, 즉 밖에 나가기 위해 신발을 신는 과정을 돕는 것을 부팅이라고 한다.
인터럽트
우리가 키보드로 A를 첬을때 그것이 화면에 출력되는 과정은 어떻게 이루어지는 것일까? 이는 인터럽트를 통해 가능해진다. 인터럽트란 CPU와 I/O 디바이스 간의 소통 방법이다. 우리가 A를 치면 인터럽트를 통해 CPU에 시그널을 보내고 시스템 버스를 통해 이 시그널이 전송되면서 우리는 화면에 A를 볼 수 있게 되는 것이다.
폰 노이만 아키텍처
여러 개의 명령어로 된 프로그램을 메모리에 로딩하고 이것을 CPU가 fetch하여 execute 하는 하나의 사이클을 폰 노이만 아키텍처라고 한다. fetch-execute cycle.
메모리 계층구조
메모리는 여러 계층구조를 가지고 있다. 계층구조를 가진 가장 큰 이유는 메모리의 종류마다 데이터를 불러오는 속도가 다르기 때문이다. 하드 디스크는 RAM보다 느리고, RAM은 Cache보다 느리다. 하지만 모든 저장공간을 Cache로 구성하기엔 비용이 어마무시하기 때문에 이러한 계층구조를 통해 데이터의 엑세스 속도를 높이게 된다.
I/O 관리
운영체제의 대부분의 코드는 I/O를 관리하는데 짜여졌다. 그만큼 컴퓨터의 입출력 관리는 운영체제에서 가장 중요한 작업이기도 하다.
컴퓨터 시스템 아키텍처
멀티프로세싱 vs 멀티코어
멀티프로세서는 하나의 메모리에 여러 개의 CPU 프로세서 칩이 달린 구조를 말한다. 슈퍼컴퓨터의 경우 수백 수천개의 CPU를 사용하여 데이터를 처리한다. 하지만 CPU 자체를 여러 개 다는 것은 비용이 너무 많이 든다. 그래서 하나의 CPU 프로세서 칩 안에 코어(register+cache)를 여러 개로 구성하여 메모리와 연결하는 멀티코어 구조를 많이 사용한다.
운영체제 작업
멀티프로그래밍
예전에는 메모리에 하나의 프로그램만 올려놓고 작업을 했다. 하지만 이것은 비싼 CPU를 가지고 너무 비효율적으로 사용하는 것이므로 메모리에 여러 개의 프로그램을 올려놓고 작업하는 멀티프로그래밍을 하게 되었다. 프로세서의 처리 속도와 입출력 속도 간의 차이로 인해 입출력 처리가 완료될 때까지 기다리는 비효율적인 상황을 막기 위해 입출력을 기다리는 시간동안 다른 프로세스를 처리할 수 있게 해주는 것이다.
멀티태스킹
이러한 멀티프로그래밍의 개념을 연장시키면 멀티태스킹을 할 수 있게된다. 예를 들어 우리가 워드와 유튜브를 사용한다고 가정해보자. 키보드를 쳐서 문자를 입력하는데 아무리 빠르게 쳐도 CPU에게는 굉장히 느린 작업일 것이다. 이때 CPU에게 워드 하나만 작업하게 하는 것은 비효율적이므로 시분할로 쪼개서 CPU에게 여러 개의 작업을 시키는 것이다.
이렇게 되면 CPU에게 어떤 프로세스를 실행할 것인지 스케줄링 해주는 것이 중요하게 되는데, CPU 스케줄링은 효율적인 자원관리를 위한 중요한 과정 중 하나라고 할 수 있다.
※ 멀티프로그래밍과 멀티태스킹의 차이
간단하게 말하면 멀티프로그래밍은 CPU가 쉬지 않게 하여 자원낭비를 막는 것이고, 멀티태스킹은 프로그램이 동시에 실행되는 것처럼 짧은 시간에 번갈아가며 수행하는 것이다. 더 간단히 말하면 멀티프로그래밍은 프로세스가 동시에 메모리에 올라가 있는 상태이고, 멀티태스킹은 이렇게 동시에 올라가 있는 프로세스를 시분할로 번갈아가며 수행하는 것이다.
작업 분리
운영체제는 또한 사용자와 커널을 분리하여 보안을 유지하는 역할을 한다. 사용자가 직접적으로 커널에 접근하지 못하고 운영체제의 시스템 콜을 이용해서만 커널을 다룸으로써 악성 프로그램의 접근을 막는 역할을 하기도 한다.
가상화
가상화는 여러 프로그램을 작업하는 멀티프로그래밍의 개념을 운영체제로 가져온 것인데, VMM(Virtual Machine Manager)을 통해 여러 운영체제를 한 번에 돌리는 개념이다.
운영체제 시스템 서비스
운영체제는 프로그램 실행을 위해 다양한 환경을 제공한다.
우선 사용자의 인터페이스를 위해 CLI, GUI 등의 유저 인터페이스를 제공하기도 하고, 응용 프로그램이 커널과 인터페이스하기 위한 system call도 있다. 애플리케이션은 오직 system call을 통해 커널과 상호작용할 수 있다.
'CS 지식 > 운영체제' 카테고리의 다른 글
운영체제 Ch6 - 프로세서 동기화(1) (0) | 2021.12.12 |
---|---|
운영체제 Ch5 - CPU 스케줄링 (0) | 2021.12.08 |
운영체제 Ch4 - 스레드 (0) | 2021.12.08 |
운영체제 Ch3 - 프로세스(2) (0) | 2021.12.08 |
운영체제 Ch3 - 프로세스(1) (0) | 2021.12.02 |