[운영체제] 운영체제란?

byeol·2023년 3월 20일
0

오늘은 운영체제에 대해서 배웠다.
운영체제는 컴퓨터 구조에서 배운 핵심 부품 4가지 CPU, 보조기억장치, 메모리, 입출력장치 등의 하드웨어 자원을 관리하는 프로그램이다.

그렇다면 운영체제란 무엇일까?

오늘은 이 물음을 해결해보고자 한다.

오늘도 🏃‍♂️🏃🏃‍♀️🏃🏃‍♂️🏃🏃🏃

운영체제

앞서 핵심부품 4가지를 "자원"이라고 했는데
이 "자원"(혹은 "시스템 자원")이란 프로그램 실행에 마땅히 필요한 요소를 말한다.

이미지를 저장하는 프로그램을 실행하기 위해서 하드디스크가 필요하듯 모든 프로그램은 실행되기 위해서 무조건 자원이 필요하다.

운영체제는
실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램이다.

프로그램이라는 것은 결국 메모리에 적재되어야 하는 것이다.
또한 코드로 이루어져 있어야 한다.

따라서 운영체제는
메모리에 적재되고
현존하는 프로그램 중 규모가 가장 큰 코드로 이루어진 프로그램이다.

운영체제의 적재

운영체제의 적재는 두가지 의미로 해석된다.
운영체제가 메모리 어디에 적재되는가?
운영체제는 어떻게 여러개의 응용 프로그램들을 적재하는가?

운영체제가 메모리 어디에 적재될까?

운영체제는 메모리의 커널 영역이라고 불리는 곳에 적재되어 실행된다.
메모리는 운영체제가 적재되는 "커널 영역"과 사용자가 이용하는 응용 프로그램이 적재되는 "사용자 영역"으로 나누어져 있다.

운영체제는 커널 영역에 적재되어 사용자 영역에 적재된 프로그램들에 자원을 할당하고 이들이 올바르게 실행되도록 돕는다.

운영체제는 어떻게 여러 개의 응용 프로그램을 적재할까?

메모리에 적재된 프로그램들은 서로 다른 주소를 가지고 있으며 서로 겹치지 않도록 적재되어 있어야 한다. 또한 실행되지 않는 프로그램은 메모리에서 삭제되어 메모리의 자원이 효율적으로 관리되어져야 한다. 이를 가능하게 하는 것은 운영체제이다.

운영체제의 자원 할당

메모리에 적재된 응용 프로그램이 3개라고 가정하자.
CPU는 한번에 하나의 프로세스(실행중이 프로그램을 프로세스라고 한다.)만 실행할 수 있다. 그러면 어떻게 이 3개의 프로그램을 실행해야 할까?

이를 해결해 주는 것이 운영체제이다.

운영체제는 공정하게 여러개의 프로그램에 CPU를 할당한다.

CPU 뿐만 아니라 예를 들어 입출력장치인 프린터를
필요로 하는 응용 프로그램이 여러개인 경우
하나의 자원을 동시에 사용하지 못하도록
하나의 프로그램이 사용할 때 다른 프로그램의 접근을 막는 등의 기능을 제공한다.

운영체제는
응용프로그램과 하드웨어 사이에서 응용 프로그램에 필요한 자원을 할당하고 응용 프로그램이 올바르게 실행되도록 관리한다.

운영체제 ≒ 정부 (?)

운영체제는 응용 프로그램에 자원을 효율적으로 배분하고, 실행할 프로그램들이 지켜야할 규칙을 만들어 컴퓨터 시스템 전체를 관리한다.

또한 운영체제는 관리하는 자원별로 기능이 나누어져 있다.
CPU 관리, 프로세스 관리, 메모리 관리, 파일 시스템 관리

그래서 정부에 비유되곤 한다.

운영체제를 알아야 하는 이유

운영체제가 없다면 개발자가 어떤 프로그램을 실행하기 위해서 하드웨어를 동작하도록 하는 코드를 직접 작성해야 한다.

너무 어렵고 번거롭다. 이를 해결해준 것이 운영체제이다.

따라서 개발자는 운영체제가 개발자에게 건네는 말들(오류)을 이해할 수 있어야 하며 운영체제에게 명령을 할 수 있어야 한다.

운영체제와 커널

운영체제가 제공하는 핵심 서비스를 담당하는 부분을 커널이라고 한다.

스마트폰이 제공하는 핵심서비스가 통화, 인터넷 접속, 문자라면
운영체제의 핵심 서비스는
자원에 접근하고 조작하는 기능,
프로그램이 올바르고 안전하게 실행되게 하는 기능이다.
이 기능을 담당하는 것이 커널이다.

커널에 포함되지 않는 서비스

운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스가 있는데 대표적으로 "사용자 인터페이스"가 있다.

사용자 인터페이스는
윈도우 바탕화면처럼 그래픽을 기반으로 컴퓨터와 상호작용할 수 있는 "그래픽 유저 인터페이스"와 명령어를 기반으로 컴퓨터와 상호작용할 수 있는 "커맨드 라인 인터페이스"가 있다.

이중모드와 시스템 호출

사용자가 실행하는 응용 프로그램이 직접 자원에 접근한다면 자원에 대한 관리가 어렵고 자원이 오염될 수도 있다.

따라서 대부분의 응용 프로그램은 운영체제를 통해서만 자원에 접근할 수 있다.

이는 2가지의 방식(이중모드 dual mode)으로 CPU가 명령어를 실행하게함으로써 가능하다.

  • 사용자 모드
    운영체제 서비스를 제공받아 실행할 수 없는 실행모드
    = 커널 영역의 코드를 실행할 수 없는 모드
    = 자원에 접근할 수 없다.
    = 일반적인 응용 프로그램은 사용자 모드로 실행된다.

  • 커널 모드
    운영체제 서비스를 제공받을 수 있는 모드
    = 커널 영역의 코드를 실행할 수 있는 모드
    = 운영체제는 커널 모드로 실행된다.
    +) 가상머신에서 제공하는 하이퍼바이저 모드
    가상머신이란 컴퓨터 내부에 소프트웨어적으로 만들어낸 가상 컴퓨터이다. 따라서 이 가상 컴퓨터 말 그래도 컴퓨터이기 때문에 운영체제와 응용 프로그램을 실행할 수 있다.

    한가지 의문이 생긴다. 이 가상머신이 소프트웨어이기 때문에 하나의 응용프로그램이며 따라서 사용자 모드를 갖는다. 가상머신의 운영체제 또한 사용자 모드라면 가상머신에 존재하는 응용 프로그램은 영원히 실행되지 못하는걸까?

    그렇지 않다. 위 문제를 해결하기 위해 가상머신에 존재하는 운영체제는 "하이퍼바이저 모드"를 갖는다.

따라서 아래와 같은 흐름으로 진행된다.

<그림 출처: https://haloworld.tistory.com/62>

실행중인 프로그램은 사용자 모드
➡️ "시스템 호출"을 통해 운영체제에 "커널 모드"로 바꿔달라는 요청을 보낸다.
➡️ "커널 모드"로 전환된 실행중인 프로그램은 운영체제의 코드를 실행시켜 자원 접근 가능
➡️ 다시 "사용자 모드"로 복귀하여 실행

여기서 <다시 "사용자 모드"로 복귀하여 실행>을 구현하기 위해서는 앞서 배웠던 입출력장치에 의한 인터럽트 부분에서
인터럽트 서비스 루틴을 실행하고 나서 돌아오기 위해 CPU는 저장된 명령어를 메모리에 있는 스택 영역에 백업해 두었다.

이 시스템 호출의 과정 또한 마찬가지로 CPU의 명령어를 메모리의 스택 영역에 백업한다.

시스템 호출 또한 인터럽트이다.
앞서 배운 입출력장치에 의한 인터럽트를 "하드웨어 인터럽트 또는 비동기 인터럽트"라고 불렀다.
시스템 호출은 인터럽트를 발생시키는 특정 명령어에 의해 발생하여 "소프트웨어 인터럽트"라고 한다.

운영체제 핵심 서비스

다시 말하면 운영체제의 핵심 서비스는 커널이 담당한다.
오늘 내가 배운 핵심서비스는 크게 3가지이다.

프로세스 관리, 자원 접근 및 할당, 파일 시스템이다.

프로세스 관리

Process
= 실행중인 프로그램

메모리 안에는 여러 개의 프로세스가 실행중이다.
각 프로세스마다 할당되어야 하는 자원이 다르거나 혹은 겹치는 경우도 있으며 겹치는 경우 누가 먼저 사용할 것인지 순서를 결정지어줘야 한다. 또한 우선순위가 있는 경우 우선순위에 따라 프로세스를 실행시켜줘야 한다. 이를 담당하는 것이 운영체제이다.

자원 접근 및 할당

모든 프로세스는 실행을 위해 자원을 필요로 한다.
따라서 운영체제는 프로세스가 실행되도록 자원에 접근하여 할당하는 역할을 한다.

앞서 핵심 부품 4가지에 어떻게 자원을 할당하는지 간략하게 알아보자.

CPU

CPU는 한번에 하나의 프로세스만 실행할 수 있기 때문에
운영체제는 CPU를 공정하게 이용하도록 관리한다. 이를 CPU 스케줄링이라고 한다.

메모리

메모리에 적재된 프로세스들은 그 크기도, 주소도 모두 다르다.

따라서 어느 주소에 적재되어야할지 결정하고
메모리가 꽉 차 있어 꼭 실행되어야 할 프로그램을 실행하지 못할 때 해결하는 등의 메모리 자원을 관리한다.

입출력장치

인터럽트 서비스 루틴은 운영체제가 적재된 커널 영역에 있다.
따라서 운영체제는 입출력장치의 작업을 수행한다.

파일 시스템 관리

컴퓨터의 파일을 열고, 생성, 삭제하고 파일들을 묶어 디렉토리로 관리는 것 또한 운영체제가 제공하는 핵심 서비스이다.

profile
꾸준하게 Ready, Set, Go!

0개의 댓글

관련 채용 정보