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

9.1.1 운영체제란

  • 시스템 자원, 자원: 프로그램 실행에 마땅히 필요한 요소

    • 모든 프로그램은 하드웨어를 필요
  • 운영체제: 프로그램에 필요한 자원을 할당, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램

  • 운영체제 또한 메모리에 적재되어야 한다.

  • 컴퓨터가 부팅될 때 메모리 내 ‘커널 영역’ 이라는 공간에 따로 적재됨

  • 사용자가 이용하는 응용 프로그램이 적재되는 영역을 사용자 영역이라 한다.

image-20240430124722355.png

  • 운영체제는 실행할 프로그램을 메모리에 적재하고, 더 이상 실행되지 않는 프로그램을 메모리에 삭제하며, 지속적으로 메모리 자원 관리

  • 응용 프로그램이 실행되려면 반드시 CPU가 필요

    • 운영체제는 최대한 공정하게 여러 프로그램에 CPU 자원 할당

image-20240430124924414.png

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

  • 운영체제가 없다면 하드웨어를 조작하는 코드를 모두 개발자가 직접 작성해야 한다.
    • 다행히, 운영체제의 도움을 받아 간편하게 개발 가능
  • 하드웨어를 조작하는 프로그램인 운영체제는 하드웨어 상의 문제를 사용자에게 알려주고, 이것이 문제 해결의 실마리가 된다.
    • 대다수의 오류 메시지의 근원은 운영체제이다.

9.2 운영체제의 큰 그림

9.2.1 운영체제의 심장, 커널

  • 운영체제 서비스: 운영체제가 응용 프로그램(App SW)에 제공하는 기능들
  • 운영체제 핵심 서비스
    • 자원에 접근하고 조작하는 기능
    • 프로그램이 올바르게 안전하게 실행되는 기능
  • 커널: 운영체제의 핵심 서비스를 담당하는 부분

image-20240430125404713.png

  • 운영체제가 제공하는 서비스 중에 커널에 포함되지 않는 서비스 중 대표적으로 사용자 인터페이스(UI) 가 있다.
    • UI는 운영체제가 제공하는 서비스이지만, 그저 컴퓨터와 상호작용하기 위한 통로일 뿐, 커널에 속한 기능은 아니다.
  • UI의 종류
    • GUI: Graohical User Interface, 마우스, 터치
    • CLI, Command Line Interface, 명령어 입력

9.2.2 이중 모드와 시스템 호출

  • 운영체제는 App SW가 자원에 접근하려 할 때, 오직 자신을 통해서만 접근하도록 하여 자원을 보호한다.
  • 운영체제에 도움을 요청 === 운영체제 코드를 실행
  • App SW의 요청을 받은 운영체제는 App SW 대신 자원에 접근하여 요청한 작업을 수행

image-20240430125833616.png

  • 이러한 운영체제의 문지기 역할은 이중 모드(dual mode) 로 구현된다.

  • 이중 모드: CPU가 명령어를 실행하는 모드를 크게 사용자 모드, 커널 모드로 구분하는 방식

  • 사용자 모드(user mode): 운영체제 서비스를 제공받을 수 없는 실행 모드

    • 커널 영역의 코드를 실행할 수 없는 모드
    • App SW는 기본적으로 사용자 모드로 실행된다.
    • 사용자 모드로 실행되는 일반적인 App SW는 자원에 접근할 수 없다.
  • 커널 모드(kernel mode): 운영체제 서비스를 제공받을 수 있는 실행 모드

    • 커널 영역의 코드를 실행할 수 있는 모드
    • CPU가 커널 모드로 명령어를 실행하면 자원에 접근하는 비롯한 모든 명령어를 실행할 수 있다.

image-20240430130210483.png

  • 사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면 운영체제에 요청을 보내 커널 모드로 전환되어야 한다.
  • 이때, 운영체제 서비스를 제공 받기 위한 요청시스템 호출, 콜(System Call) 이라 한다.

image-20240430130327200.png

  • 시스템 콜소프트웨어적인 인터럽트이다.

    • 인터럽트입출력 장치(하드웨어) 에 의해 발생하기도 하지만
    • 인터럽트를 발생시키는 특정 명령어에 의해 발생하기도 한다. 이를 소프트웨어 인터럽트 라 한다.
  • CPU가 시스템 호출을 처리하는 순서인터럽트 처리 순서와 유사하다.

    • 시스템 호출을 발생시키는 명령어가 실행되면 CPU는 지금까지의 작업을 백업하고,
    • 커널 영역 내에 시스템 호출을 수행하는 코드 (인터럽트 서비스 루틴) 를 실행한 뒤
    • 다시 기존에 실행하던 응용 프로그램으로 복귀하여 실행을 계속해 나간다.

image-20240430130634877.png

  • App SW는 실행 과정에서 운영체제 서비스들을 매우 빈번하게 이용합니다.
    • 빈번하게 시스템 콜을 발생시키고 사용자 모드와 커널 모드를 오가며 실행된다.

image-20240430130647214.png

9.2.3 운영체제의 핵심 서비스

9.2.3.1 프로세스 관리

  • 실행 중인 프로그램을 프로세스라 한다.
  • 일반적으로 하나의 CPU한 번에 하나의 프로세스만 실행할 수 있다.
    • CPU는 이 프로세스를 조금씩 번갈아 가며 실행
    • 다시 말해 CPU는 한 프로세스를 실행하다가 다른 프로세스로 실행을 전환하고
    • 그 프로세스를 실행하다가 또 다른 프로세스로 실행을 전환하는 것을 반복합니다.

image-20240430131444298.png

  • 이때 각 프로세스는 상태, 사용하고자 하는 자원도 다양하다.
    • 운영체제는 다양한 프로세스를 일목요연하게 관리 및 실행할 수 있어야 한다.
    • 추가로, 여러 프로세스가 동시에 실행되는 환경에서는 프로세스 동기화가 필수적
    • 프로세스의 교착 상태를 해결해야 함

9.2.3.2 자원 접근 및 할당

  • 모든 프로세스는 실행을 위해 자원(시스템 자원) 을 필요로 한다.

  • CPU 자원

    • 일반적으로 메모리에는 여러 프로세스가 적재되고, 하나의 CPU는 한 번에 하나의 프로세스만 실행
    • 그래서 하나의 프로세스가 CPU를 이용하고 있다면 다른 프로세스는 기다림
    • 프로세스들에 공정하게 CPU를 할당하기 위해 어떤 프로세스부터 CPU를 이용하게 할 것인지, 얼마나 오래 CPU를 이용하게 할지를 결정할 수 있어야 한다.
    • 이를 CPU 스케줄링이라 한다.
  • 메모리 자원

    • 메모리에 적재된 프로세스들은 크기, 주소 모두 가지각색
      • 같은 프로세스라 할지라도 실행될 때마다 적재되는 주소가 달라짐
      • 따라서, 프로세스가 적재될 때 마다, 어느 주소에 적재해야 할지를 결정해야 한다.
    • 때로는 메모리가 이미 꽉 차 있어 꼭 실행해야 할 프로세스를 적재할 공간이 없는 경우도 있고,
    • 메모리에 공간이 남았는 데도 불구하고 프로세스를 적재하지 못하는 상황도 발생
  • 입출력 장치 자원

    • 인터럽트 서비스 루틴은 운영체제가 제공하는 기능으로 커널 영역에 있다.
    • 입출력 장치가 발생하는 하드웨어 인터럽트 도 마찬가지
    • 운영체제는 인터럽트를 처리하는 프로그램, 즉 인터럽트 서비스 루틴을 제공함으로써 입출력 작업을 수행

9.2.3.3 파일 시스템 관리

  • 컴퓨터를 사용할 때는 여러 파일을 열고, 생성하고, 삭제한다

    • 그리고 이 파일들을 한데 묶어 디렉터리(폴더)로 관리한다.
  • 당연해 보이는 이런 파일 시스템(file system)운영체제가 지원하는 핵심 서비스 이다.

9.3 가상 머신과 이중 모드의 발전

  • 가상 머신이란 이름 그대로 소프트웨어적으로 만들어낸 가상 컴퓨터이다.

    • 가상 머신을 통한 가상화를 지원하는 현대 CPU는 커널, 유저 모드 이상을 지원한다.

image-20240430135316096.png

  • 컴퓨터에 설치된 운영체제에서 가상 머신을 실행한다면, 그 가상 머신 또한 응용 프로그램이다.

    • 그래서 사용자 모드로 작동한다. 마찬가지로 가상 머신상에 설치된 운영체제 또한 사용자 모드로 작동한다.

    • 가상 머신에 설치된 운영체제도 사용자 모드로 작동한다면, 운영체제 서비스를 제공 받기 어렵다.

  • 그래서 가상화를 지원하는 CPU는 가상 머신을 위한 모드인 하이퍼 바이저 모드를 따로 둔다.

    • 이로써 가상 머신 상에서 작동하는 App SW들은 하이퍼 바이저 모드로써 가상 머신에 설치된 운영체제로부터 운영체제 서비스를 받을 수 있습니다.

9.4 시스템 콜, 호출의 종류

image-20240430135414408.png

  • 개발자가 작성하는 프로그래밍 언어들은 내부적으로 위와 같은 시스템 콜을 통해 실행된다.

Reference