1. Introduction to Operating System

토즐라·2022년 4월 28일

이번 글은 이화여자대학교 반효경 교수님의 강의와 Abraham Silberschatz의「Operating Syetems Concepts」를 바탕으로 작성했음을 밝힙니다.


1. 운영체제란 무엇인가?

1.1 운영체제의 의미

하드웨어 바로 위에 설치되는 소프트웨어.

하드웨어와 각종 소프트웨어, 사용자를 연결해주는 계층

협의의 운영체제: 커널(Kernel)

  • 운영 체제의 핵심 부분으로 메모리에 상주하는 부분

광의의 운영체제

  • 커널 뿐 아니라 각종 주변 시스템 유틸리티를 포함한 개념
  • 윈도우즈 운영체제를 컴퓨터에 설치하게 되면 커널 뿐만 아니라 여러 부가적인 서비스(별도의 소프트웨어)도 깔림.

1.2 운영체제의 목표

하드웨어하고 어떻게 interact를 해야 하는가

  • 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공
    • 동시 사용자/프로그램들이 각각 독자적 컴퓨터에서 수행되는 것 같은 illusion 제공
    • 하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행

사용자와 각종 software들과 어떻게 interact 해야 하는가

  • 컴퓨터 시스템의 자원을 효율적으로 관리 → 자원 관리자
    • 프로세서, 기억장치, 입출력 장치 등의 효율적인 관리
    • 주어진 자원으로 최대한의 성능을 내도록
  • 사용자간의 형평성 있는 자원 분배
  • 사용자 및 운영체제 자신의 보호
  • 프로세스, 파일, 메세지 등을 관리

각각의 주제에 대해서 여러 알고리즘이 있음. 도대체 어떻게 CPU를 할당할 것인가? 누구에게 얼마나? 이런 게 정책적인 문제. 메모리도 마찬가지. 너도 나도 내 프로그램이 메모리에 올라가야 된다고 주장할 텐데, 그 중 어떤 걸 선택해야 하는가?

최우선적인 목표는 한정된 자원 (CPU나 메모리)을 가지고 얼마나 효율적으로 관리할 것인가. 조금 더 생각하면 형평성. 전체 퍼포먼스가 좋아야 하지만, 한 프로그램이 할당을 특히 적게 받으면 안 됨.

하드웨어 자원은 한정되어 있음. 이로 최대한의 성능을 내도록 하는 것이 운영체제의 목적.


1.3 운영체제의 분류

동시 작업 가능 여부

  1. 단일 작업(single tasking)
    • 한 번에 하나의 작업만 처리 - 한 명령의 수행을 끝내기 전에 다른 명령을 수행시킬 수 없음
  2. 다중 작업(multi task)
    • 동시에 두 개 이상의 작업 처리
    • 현대적인 대부분의 운영체제

지원해주는 사용자의 수

  1. 단일 사용자(single user)
  2. 다중 사용자(multy user)

컴퓨터 한 대를 여러 사용자가 동시에 접속해서 쓸 수 있는지를 기준으로 분류

처리 방식

  1. 일괄 처리(batch processing)
    • 작업 요청의 일정량을 모아서 한꺼번에 처리
    • 작업이 완전 종료될 때까지 기다려야 함
    • 현대의 운영체제에서는 찾아보기 어려움
  2. 시분할(time sharing)
    • 여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용
    • 일괄 처리 시스템에 비해 짧은 응답 시간을 가짐
    • 각각의 사용자 입장에서 interactive한 방식
      • 밀리세컨드 단위로 분할하므로, 사용자는 실시간으로 반응한다고 체감
    • 현대 운영체제가 사용하는 방식
  3. 실시간(Realtime OS)
    • 정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 실시간시스템을 위한 OS
    • 특수한 목적을 가진 시스템(원자로/공장 제어, 반도체 장비 등)에서 이용
    • Hard realtime system / Soft realtime system(유튜브) 으로 나뉨

현재 운영체제는 다중 작업, 다중 사용자, 시분할.

UNIX

  • 코드의 대부분을 C 언어로 작성
    • C언어가 UNIX를 만들기 위해 만든 언어
  • 높은 이식성
  • 최소한의 커널 구조
  • 복잡한 시스템에 맞게 확장 용이
  • 소스 코드 공개
  • 프로그램 개발에 용이
  • 다양한 버전
  • 대형 컴퓨터(서버)를 위한 운영체제

1.4 운영 체제의 구조

CPU 스케줄링

  • 어떤 프로그램한테 CPU를 할당할 것인가
  • CPU는 아주 짧은 간격으로 CPU를 줬다 뻇었다 하는 것이 일반적인 스케쥴링
  • 이론적으로는 CPU를 가장 짧게 이용하는 프로그램에 먼저 할당하는 것이 최적
  • FIFO는 효율적이지 않은 경우가 많음

메모리 관리

  • 한정된 메모리를 어떻게 할당할 것인가
  • 어떤 프로그램에 메모리를 많이 할당해주고, 어떤 메모리를 쫓아내야 하는가

파일 관리

  • 디스크에 파일을 어떻게 보관할 것인가
  • 디스크에 들어온 요청들을 어떻게 스케줄링 할 것인가
    • 엘레베이터 스케줄링과 유사함

입출력 관리

  • 각기 다른 입출력장치와 컴퓨터 간에 어떻게 정보를 주고 받게 할 것인가
  • I/O device들은 대부분 속도가 굉장히 느림
  • 기본적으로 interupt라는 방식을 이용

프로세스 관리

  • 프로세스의 생성과 삭제
  • 자원 할당 및 반환
  • 프로세스 간 협력
profile
도전을 즐기는 데이터 엔지니어입니다.

0개의 댓글