운영체제란, Introduction to Operating Systems

운영체제란

  • 운영체제는 컴퓨터 하드웨어 바로 위에 설치되어 컴퓨터의 하드웨어와 사용자 및 다른 모든 소프트웨어를 연결하는 소프트웨어 계층이다.

좁은 의미의 운영체제 vs. 넓은 의미의 운영체제

  • 좁은 의미 : 커널

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

  • 넓은 의미

    • 커널을 포함하여 각종 주변 시스템 유틸리티를 포함한 개념

운영체제의 기능

운영체제는 그 정의에서 알 수 있듯, 컴퓨터 하드웨어 ←→ 다른 소프트웨어/사용자 사이에서 중간자 역할을 수행한다. 따라서 운영체제는 다음의 두 가지 역할을 수행한다.

역할 1. 컴퓨터 시스템의 자원을 효율적으로 관리한다. (컴퓨터 하드웨어와의 인터렉션)

  • 프로세서, 기억장치, 입출력 장치 등의 효율적 관리 (하드웨어 자원을 관리)

    • 사용자 간의 형평성 있는 자원 분배

    • 주어진 자원으로 최대한의 성능을 내도록

      • 실행중인 프로그램들에게 짧은 시간씩 CPU 를 번갈아 할당한다.

      • 실행중인 프로그램들에 메모리 공간을 적절히 분배한다.

  • 프로세스, 파일, 메시지 등을 관리 (소프트웨어 자원 관리)

  • 사용자 및 운영체제 자신을 보호

역할 2. 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공한다. (다른 소프트웨어 및 사용자와의 인터렉션)

  • 동시에 접속한 사용자 혹은 동시에 실행되고 있는 프로그램들이 각자 자신의 컴퓨터에서 독자적으로 수행되는 것 같은 착각을 제공한다.

    • = 실제로는 중앙의 큰 하나의 컴퓨터에서 실행되지만 이 곳에 접속한 서로 다른 사용자들은 마치 동시에 독자적으로 수행되는 것 같이 착각을 하게 된다.

  • 하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행한다.

운영체제 분류

운영체제는 1) 동시작업가능여부, 2) 사용자 수, 3) 처리방식 등을 기준으로 분류될 수 있다.

기준 1. 동시작업가능여부에 따른 분류

  • 단일작업 : 한번에 하나의 작업만 처리

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

  • 다중작업 : 동시에 두 개 이상의 작업 처리

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

기준 2. 사용자의 수에 따른 분류 - 한 대의 컴퓨터를 여러 사람이 원격으로 동시에 접속하여 사용할 수 있는가?

  • 단일 사용자 : MS-DOS, MS Windows

  • 다중 사용자 : UNIX, NT server

기준 3. 처리방식에 따른 분류 (시분할, 실시간, 일괄처리)

  • 시분할 방식

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

    • 일괄처리 시스템에 비해 짧은 응답 시간을 가진다. - UNIX

    • interactive 한 방식

    • 보통 우리가 사용하는 컴퓨터에 사용되는 방식이다.

  • 실시간(Realtime OS)

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

    • 특수한 목적을 가진 시스템에서 주로 이용된다.

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

      • 예시) 반도체는 하루에 1개씩 만들어지는데, 중간에 정전 등으로 시스템이 멈추게 되면 하루에 한 개 만들어지던 반도체는 30일동안 한 개도 못만들어지게 된다.

    • 경성 실시간 시스템 (hard realtime system)

      • 중간에 중단될 경우, 영향도가 심각한 시스템

      • 예) 반도체 공정

    • 연성 실시간 시스템 (soft realtime system)

      • 중간에 중단되어도 영향도가 치명적이지는 않은 시스템

      • 예) 영화상영

  • 일괄처리

    • batch processing

    • interactive 하지 않다.

    • 작업 요청 건들을 일정량 모아서 한꺼번에 처리하는 방식이다.

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

    • 예시) 초기 punch card 처리 시스템

몇 가지 용어

운영체제를 공부하다보면, 몇 가지 용어를 자주 만나게 된다.

  • multitasking

  • multi programming : 여러 프로그램이 메모리에 동시에 올라가 수행이 되는 것

  • time sharing : CPU 의 시간 분할하여 나눠쓴다는 의미를 강조

  • muliti process

위의 용어는 모두 하나의 CPU 에서 여러개의 프로그램을 처리할 때 쓰는 용어이다. 하지만 아래의 용어는 하나의 컴퓨터에 여러개의 CPU가 붙어있는 상태에서 쓰인다.

  • multiprocessor : 하나의 컴퓨터에 CPU (processor)가 여러개 붙어있음을 의미하다.

운영체제의 예

  • UNIX 계열

    • 대형 컴퓨터를 위해서 만들어진 운영체제

    • 코드의 대부분이 C언어로 작성되어있고

    • 다중 사용자를 지원하며, 동시 처리가 가능하다.

    • 높은 이식성을 가지고 있어서 하나의 컴퓨터에서 다른 컴퓨터로 운영체제를 이식하기 쉽다.

    • 최소한의 커널 구조를 가지고 있어서 웬만한 기능들은 제외하고 최소한의 핵심적인 부분만 커널에 담겨있으며

    • 복잡한 시스템에 맞춰 확장하기가 쉽다.

    • 소스코드가 대중에 공개되어있고 (Linux 를 제외하고는 이제 거의 공개되어있지 않다)

    • 프로그램 개발도 용이하다.

    • 다양한 버전

      • System V, freeBSD, SunOS, Solaris

      • Linux : 공개 소프트웨어 정신에 입각하여 아직까지도 소스코드가 공개되어있다.

        • 안드로이드도 커널은 리눅스 커널을 쓰고 있음

  • DOS(Disk Operating System)

    • MS 사에서 1981년 IBM-PC를 위해 개발한 단일 사용자용 운영체제이나

    • 제작할 당시 메모리를 지나치게 적게 산정하여 추후 관리가 어려워지게 되었다.

    • 메모리 관리능력의 한계(주 기억장치 : 640KB)로 점차 사라지게 되었다.

  • MS WINDOWS

    • 개인용 컴퓨터 PC를 위해서 만들어진 운영체제

    • MS 사의 다중 작업용 GUI 기반 운영 체제

    • Plug and play, 네트워크 환경 강화

    • 초창기에는 다소 불안정하다는 평이 많았지만, 요즘에는 전혀 그렇지 않다.

    • DOS 용 응용 프로그램과 호환성을 제공한다.

    • 풍부한 지원 소프트웨어

  • 운영체제의 다양한 형태

    • 초기만해도 UNIX vs. MS Windows 처럼 두 가지로 운영체제를 설명하곤 했는데, 요즘은 아래와 같이 다양한 형태의 OS들이 나오고 있다.

    • Apple 의 Mac OS

    • 스마트폰 용 Android OS, IOS 등

    • Handheld device 를 위한 OS

      • PalmOS, Pocket PC, Tiny OS

운영체제의 구조

운영체제는 크게 보자면, CPU, Memory, Disk, I/O device 로 구성되어있다. 각 단계별로 운영체제가 고민해야하는 지점들이 존재한다.

CPU

  • 누구한테 CPU를 줄까? = CPU 스케줄링

  • 아주 빠른 장치이므로 짧은 주기로 CPU를 주고 뺃는 것이 가능하다.

  • 일반 세상에서는 빨리 온 사람에게 먼저주는 것이 관례이다. 하지만 컴퓨터 세계에서는 그렇게 하는 것이 반드시 가장 좋은 방법은 아니다.

    • 예를 들어서 은행에서 먼저 온 사람을 먼저 봐주는 방식으로 일을 처리한다고 생각해보자. 만약에 1시간이 걸리는 업무를 처리하고 있는 사람이 중간에 있다면 그 이후의 사람들은 업무를 처리하지 못하는 병목현상이 발생하게 된다.

메모리

  • 한정된 메모리를 어떻게 쪼개어 쓰지?

    • 공평하게 일정 구간씩 메모리를 나누면 될 것 같지만, 실제로는 그렇지 않다.

    • 실행하는 프로그램 많아질수록 한 프로그램 당 차지하는 메모리가 지나치게 작아지면서 프로그램 자체를 실행할 수 없게 되어버리기 때문이다.

    • 지금 실행하고 있는 프로그램에게 메모리를 몰빵해주면 더 수월하게 진행될 수 있다.

  • 메모리가 꽉차서 안쓰는 프로그램을 내보내야할 때, 어떤 기준으로 내보낼까?

    • 미래에 잘 안쓸 프로그램부터 먼저 내보내면 된다.

    • 메모리에 올려진 뒤, 오랫동안 사용되지 않은 데이터가 있다면 내보내면 된다.

Disk

  • 디스크에 파일을 어떻게 보관하지? 파일관리 (디스크 스케줄링)

    • Head 를 어떻게 하면 적게 움직이고 빠르게 처리할 수 있을까

I/O Device

  • 각기 다른 입출력 장치와 컴퓨터 간에 어떻게 정보를 주고 받게 할까? (입출력 관리)

  • I/O Device 는 인터럽트를 이용하여 이를 수행한다. 입출력이 감지되면, CPU에게 인터럽트를 걸어서 작업을 수행한다.

프로세스 관리

  • 프로세스 생성과 삭제

  • 자원할당 및 반환

  • 프로세스 간 협력

그 외

  • 보호 시스템

  • 네트워킹

  • 명령어 해석기 (command line interpreter)

공부하는 태도

운영체제는 사실 직접 뭔가를 만져보고 조작하면서 공부할 수 없기에 다소 어렵고 딱딱하게 느껴질 수 있다. 내가 사용자가 아니라 직접 운영체제가 되어 무엇을 해야하는지 생각하면서 강의를 수강하면 한결 재미있게 공부할 수 있을 것이다.

Last updated