콰이엇의 개발기록

[운영체제] 2. 운영체제 개요

by 콰이엇
반효경 교수님의 "운영체제와 정보기술의 원리" 책을 학습하고 정리한 글입니다.

 

1. 운영체제의 정의

📌 운영체제

컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어

  • 좁은 의미의 운영체제(커널, kernel) : 운영체제의 핵심 부분으로 메모리에 상주하는 부분
  • 넓은 의미의 운영체제 : 커널 뿐만 아니라 각종 주변 시스템 유틸리티를 포함한 개념

 

흔히 사용하는 MS 윈도우 환경에서 파일을 복사(copy)하는 프로그램 등 운영체제의 일부라고 보기는 힘들지만 시스템을 위한 유틸리티로 운영체제와 함께 설치되기 때문에 넓은 의미로는 운영체제에 포함

 

2. 운영체제의 기능

1. 컴퓨터 시스템을 편리하게 사용할 수 있는 환경 제공

  • 사용자가 직접 다루기 힘든 하드웨어를 관리하는 역할
  • 운영체제는 동시 사용자/프로그램들이 각각 독자적 컴퓨터에서 수행되는 것 같은 환상(illusion)을 제공

2. 컴퓨터 시스템의 자원을 효율적으로 관리

  • 운영체제를 자원관리자(resource manager)라고 부르기도 한다
  • 자원 : CPU, 메모리, I/O 장치(HDD) 등 하드웨어 장치 뿐만 아니라 소프트웨어까지 통칭하여 부르는 말

 

✍🏻 운영체제는 이와 같은 자원들을 효율적으로 관리해 가장 좋은 성능을 내도록 하는 역할

더보기
  • 주어진 자원으로 최대한 성능을 내도록 ⇒ 효율성
  • 특정 사용자/프로그램의 지나친 불이익이 발생하지 않도록 형평성

전체적인 성능을 향상시키려다 보면 일부 프로그램 또는 사용자가 불이익을 당할 수 있다

따라서, 사용자 및 프로그램들 간에 자원이 형평성 있게 분배되도록 하는 균형자 역할도 함께 수행

효율성이 가장 큰 목표이지만 이로 인해 일부가 지나치게 희생되지 않게 하는 형평성 또한 목표

 

 

3. 운영체제의 분류

3-1. 동시 작업 가능 여부

📌 단일 작업 (Single tasking)

한 번에 하나의 작업만 처리

ex) MS-DOS 프롬프트 상에는 한 명령의 수행을 끝내기 전에 다른 명령을 수행시킬 수 없음

📌 다중 작업 (Multi tasking)

동시에 두 개 이상의 작업 처리

ex) UNIX, MS Windows 등에서는 한 명령의 수행이 끝나기 전에 다른 명령이나 프로그램을 수행할 수 있음

 

✍🏻 운영체제가 다중 작업을 처리할 때는 여러 프로그램이 CPU와 메모리를 공유

더보기

CPU가 하나밖에 없더라도 처리 속도가 빨라 여러 프로그램을 번갈아 실행하여

여러 프로그램들이 동시에 실행되는 것처럼 보이도록 함

📌 시분할 시스템 (Time Sharing System)

CPU의 작업시간을 여러 프로그램들이 조금씩 나누어 쓰는 시스템

 

3-2. 사용자의 수

📌 단일 사용자용 운영체제 (Single user)

한 번에 한 명의 사용자만이 사용하도록 허용하는 운영체제

ex) MS-DOS, MS Windows

📌 다중 사용자용 운영체제 (Multi user)

여러 사용자가 동시에 접속해 사용할 수 있게 하는 운영체제

ex) UNIX, NT Server, 이메일 서버, 웹 서버

 

3-3. 처리 방식

📌 일괄 처리 (Batch Processing)

작업 요청의 일정량을 모아서 한꺼번에 처리

작업이 완전히 종료될 때까지 기다려야 함

ex) 초기 Punch Card 처리 시스템

📌 시분할 (Time Sharing)

여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용

일괄 처리 시스템에 비해 짧은 응답시간을 가짐, Interactive한 방식

ex) UNIX

📌 실시간 (Realtime OS)

정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 실시간 시스템을 위한 OS

ex) 원자로 / 공장 제어, 미사일 제어, 반도체 장비, 로보트 제어

더보기

📌 Hard realtime system (경성 실시간 시스템)

주어진 시간을 지키지 못할 경우 매우 위험한 결과를 초래할 가능성이 있는 제어 시스템 (원자로, 로켓 등)

📌 Soft realtime system (연성 실시간 시스템)

스트리밍과 같이 데이터가 정해진 시간 단위로 전달되어야 올바른 기능을 수행할 수 있는 시스템

 

4. 운영체제 예시

4-1. 유닉스 UNIX

1969년 벨 연구소에서 최초로 개발되어 프로그램 개발 환경을 위해 설계된 운영체제

  • 높은 이식성 (Portability)
  • 운영체제 커널의 크기가 작음
  • 여러가지 유틸리티 지원
  • 오픈 소스
  • 다양한 버전 (System V, FreeBSD, SunOS, Solaris / Linux)

 

깔끔한 모듈 단위로 작성된 운영체제로 기술 발전에 따른 확장성을 지원하며

대부분의 코드가 C언어로 작성되어 있다 (사람이 이해하기 쉬운 편리한 고급 언어)

서버, 즉 여러 사람이 동시에 사용할 수 있는 구조를 위한 목적으로 사용된다.

 

4-2. MS Windows

  • MS 사의 다중 작업용 GUI 기반 운영체제
  • Plug and Play : 새로운 하드웨어 장착 시 운영체제가 자동으로 하드웨어를 감지하여 그에 맞게 설정
  • 네트워크 환경 강화
  • DOS용 응용 프로그램과 호환성 제공
  • (과거) 오랜 전통을 가진 unix에 비해 불안정성
  • 풍부한 지원 소프트웨어

 

5. 운영체제의 자원 관리 기능

운영체제의 가장 핵심적인 기능은 자원을 효율적으로 관리하는 것

  • CPU 스케쥴링
  • 메모리 관리
  • 입출력 관리
  • 파일 관리
  • 프로세스 관리
  • 보호 시스템, 네트워킹, 명령어 해석기 (Command Line Interpreter)

 

5-1. 하드웨어 자원 관리

✍🏻 하드웨어 자원 : CPU, 메모리, 주변장치 및 입출력 장치 등

더보기

프로세스들이 하나의 CPU / 한정된 용량의 메모리를 효율적으로 나누어 사용할 수 있도록 관리

CPU와 메모리는 전원이 꺼지면 정보가 모두 지워지므로

전원이 나가도 기억해야 하는 부분을 입출력 장치 중 한 종류인 보조기억장치(HDD)에 파일 형태로 저장

입출력 장치(키보드, 모니터 등) 또한 운영체제의 관리 대상에 포함

 

 

5-2. CPU 스케쥴링

📌 FCFS (First-Come First-Served, 선입선출)

CPU를 사용하기 위해 도착한 프로세스들 중 먼저 온 것을 먼저 처리해주는 방식

더보기

장기간 CPU를 사용하는 프로세스가 먼저 도착하고,

짧은 시간만 CPU를 사용하는 프로세스가 나중에 도착한 경우를 가정해보자.

짧은 수행시간을 가진 프로세스들은 선행 프로세스가 작업을 마칠 때까지 장기간 기다려야 한다.

즉, 시스템 전체 입장에서는 비효율적인 결과를 초래할 가능성이 존재한다.

 

 

📌 SJF (Shortest Job First)

금번 CPU 사용시간이 가장 짧은 프로세스를 제일 먼저 처리해주는 방식

  • Minimum average waiting time을 보장
더보기

많은 프로세스를 처리할 수 있어 효율성은 좋지만

사용시간이 짧은 프로세스를 계속해서 요청하게 된다면

상대적으로 긴 프로세스가 CPU를 사용하지 못하는 형평성의 문제가 발생함

 

 

📌 라운드 로빈 (RR, Round-Robin)

CPU를 한 번 할당받아 사용할 수 있는 시간을 일정하게 고정된 시간으로 제한하는 방식

더보기

긴 작업을 요하는 프로세스가 CPU를 할당받더라도 정해진 시간이 지나면 다시 대기열 마지막으로 이동

적어도 긴 작업을 수행하는 프로세스 때문에 짧은 작업을 가진 프로세스들이 무작정 오래 기다려야 하는 상황을 막을 수 있음

일반적으로 1회 할당시간은 밀리초 단위를 사용

 

 

📌 우선순위 스케쥴링

CPU 사용을 대기 중인 프로세스들에 우선순위를 부여하고 우선순위가 높은 프로세스에 먼저 할당

더보기

시스템 내 프로세스 중에는 상대적으로 더 중요한 프로세스가 있을 수 있으므로

그런 프로세스의 우선 순위를 높게 하여 CPU를 먼저 획득할 수 있도록 함

 

 

5-3. 메모리 관리

✍🏻 프로그램이 CPU에서 실행되려면 해당 부분이 메모리에 올라가 있어야 함

더보기

운영체제는 프로그램에 메모리가 필요할 때 할당하고, 더 이상 필요하지 않을 때 회수한다.

어떤 경우에는 메모리를 조금만 더 할당하면 굉장히 빨리 수행할 수 있고,

때로는 불필요하게 메모리를 요청해 자원을 낭비하는 경우도 발생하므로

운영체제는 이를 잘 판단해 전체 메모리 공간이 효율적으로 사용될 수 있도록 해야 한다.

또한, 다수의 프로그램이 동시에 메모리에 올라간 경우

서로 다른 프로세스 영역을 침범하지 않도록 보안을 유지하는 역할을 한다.

즉, 운영체제는 각 프로세스가 자신의 메모리 영역에만 접근할 수 있도록 관리한다.

 

 

📌 고정 분할 방식 (fixed partition)

물리적 메모리를 몇 개의 분할로 미리 나누어 관리하는 방식

  • 메모리에 동시 적재되는 최대 프로그램의 수가 분할 개수로 한정되어 융통성이 없다는 단점
  • 분할의 크기보다 큰 프로그램은 적재가 불가능
  • 분할이 고정적이라서 내부 조각 발생으로 메모리 낭비 발생
더보기

📌 내부 조각 (Internal fragmentation)

분할의 크기보다 작은 프로그램이 적재되는 경우 해당 분할 내 남는 영역

  • 내부 조각은 해당 분할에 온라온 프로그램에 의해서도 사용되지 않고,
    다른 프로그램에도 할당될 수 없으므로 비효율적으로 낭비되는 공간 존재

 

 

📌 가변 분할 방식 (Variable partition)

매 시점 프로그램의 크기에 맞게 메모리를 분할해서 사용하는 방식

  • 물리적 메모리의 크기보다 더 큰 프로그램의 실행은 여전히 불가능
  • 분할의 크기와 개수가 동적으로 변하므로 기술적 관리 기법 필요
  • 외부 조각 발생으로 메모리 낭비 발생
더보기

📌 외부 조각 (External fragmentation)

프로그램에 할당되지는 않았지만 그 크기가 작아 프로그램을 올리지 못하는 메모리 영역

  • ex) 크기가 100인 프로그램 A가 실행되어 메모리에 100만큼의 영역을 할당
    프로그램 A가 실행되는 도중 크기가 50만 프로그램 B가 실행되어 바로 다음부터 메모리 공간 50을 할당받아 실행
    A의 작업이 완료되어 A의 영역에 크기 80인 프로그램 C가 적재
    이때, 프로그램 C가 A의 영역을 사용하고 있기 때문에 20만큼의 빈 공간 발생
    이제 크기가 40인 프로그램 D가 실행된다고 가정하면, 크기가 20인 공간을 활용할 수 없음
    이처럼 비어있는 공간이지만 그 크기가 작아 아직까지 프로그램에 할당되지 못한 공간을 의미

 

 

📌 가상 메모리 방식 (Virtual memory)

모든 프로그램이 물리적 메모리와는 독립적으로 자신만의 가상메모리 주소를 가지는 방식

  • 운영체제는 가상메모리 주소를 물리적 메모리 주소로 매핑(mapping)하는 기술을 이용해
    주소를 변환시킨 후 프로그램을 물리적 메모리에 올리게 됨
  • 현재 사용하는 부분만 메모리에 올리고, 나머지는 보조기억장치에 저장한 후 필요 시 적재하는 방식
더보기

📌 스왑 영역 (swap area)

물리적 메모리에 올린 후 나머지를 적재하는 보조기억장치의 영역

  • 프로그램을 구성하는 가상메모리 주소 공간은 페이지(page)라는 동일한 크기의 작은 단위로
    물리적 메모리와 스왑 영역에 일부분씩 저장한다.

📌 페이징 기법 (paging)

동일한 단위로 메모리를 나누는 기법

 

 

참고자료

  • 책 - 운영체제와 정보기술의 원리 (반효경, 2020년 5월)

블로그의 정보

콰이엇의 개발기록

콰이엇

활동하기