02 운영체제의 소개

1. 운영체제 개요

  • 운영체제란 무엇인가?
    • 컴퓨터 사용자와 컴퓨터 하드웨어 간의 중간 매개체 역할을 하는 프로그램
    • 운영 체제의 목표
      • 사용자 관점
        • 사용자 프로그램을 실행하고 사용자의 문제 해결을 더 쉽게 만든다
        • 컴퓨터 시스템을 편리하게 사용할 수 있도록 한다(사용자 편의 환경)
      • 시스템 관점
        • 컴퓨터 하드웨어를 효율적으로 활용한다(자원 관리자)

컴퓨터 시스템의 다단계 구성

  • 컴퓨터 시스템의 4가지 구성 요소
    1. 하드웨어\(_{Hardware}\): 기본 컴퓨팅 자원을 제공
      • CPU, 메모리, 입출력 장치
    2. 운영 체제\(_{Operating \ System}\): 다양한 응용 프로그램 및 사용자 간에 하드웨어를 사용하고 조정하는 역할 즉, 하드웨어 자원의 사용을 효과적으로 관리하고 응용 프로그램 및 사용자 간의 상호 작용을 지원
    3. 응용 프로그램\(_{Application \ Programs}\): 시스템 자원을 사용해 사용자의 컴퓨팅 문제를 해결하는 방법을 정의
    4. 사용자\(_{Users}\): 이는 컴퓨터 시스템을 사용하는 사람들, 기계 또는 다른 컴퓨터를 의미
      • 사용자는 컴퓨터와 상호 작용하며 응용 프로그램을 실행하고 데이터를 처리하는 역할을 함

OS의 역할

  • 기능적인 부분
    • User Interfaces
      • 사용자와 컴퓨터 시스템 간 상호 작용
    • System Calls
      • 응용 프로그램이 운영 체제의 서비스 및 기능을 활용 가능하게 하는 인터페이스
      • 응용 프로그램이 하드웨어 리소스에 직접 액세스하는 것을 방지하고, 운영 체제를 통해 안전하게 리소스를 사용할 수 있도록 한다.
    • Services
      • 운영 체제가 제공하는 다양한 기능 및 서비스를 관리하고 실행
  • OS는 결국 서비스를 사용자가 사용하기 위해 안전하게 보호하는 역할
  • 사용자 서비스를 편리하게 하는 환경
    • 사용자 인터페이스
      • 명령줄 인터페이스\(_{CLI}\) , 그래픽 사용자 인터페이스\(_{GUI}\) , 일괄 처리 인터페이스 등의 사용자 인터페이스가 있어야한다.
    • 프로그램 실행
      • 시스템은 프로그램을 메모리로 로드하고 해당 프로그램을 실행할 수 있어야 한다.
      • 프로그램은 정상적으로 종료될 수도 있고 비정상적으로 종료되면 오류를 표시한다.
    • 입출력 작업
      • 실행 중인 프로그램은 파일 또는 입출력 장치와 관련된 입출력을 필요로 할 수 있다.
      • 파일 또는 입출력 장치와 상호 작용하는 작업을 나타낸다.
    • 파일 시스템 조작
      • 프로그램은 파일 및 디렉토리를 읽고 쓰고, 생성하고 삭제하며, 검색하고 파일 정보를 나열하며 권한 관리를 한다.
    • 통신
      • 프로세스는 동일한 컴퓨터 내에서 또는 네트워크를 통해 컴퓨터 간에 정보 교환이 가능하다.
      • 통신은 공유 메모리를 통해 이뤄질 수도 있고, 메시지 전달을 통해 이뤄질 수도 있다.
    • 오류 감지
      • 운영 체제는 잠재적 오류에 대해 지속적으로 인식해야 한다.
      • 이러한 오류는 CPU 및 메모리 하드웨어에서 발생할 수도 있고, I/O 장치나 사용자 프로그램에서 발생할 수도 있다.
      • 각각의 오류 유형에 대해 운영 체제는 올바르고 일관된 컴퓨팅을 보장하기 위한 적절하게 처리한다.
      • 디버깅 도구는 사용자와 프로그래머가 시스템을 효율적으로 사용하고 오류를 찾는 데 도움을 준다.
  • 자원 관리

    • 자원 할당
      • 여러 사용자나 여러 작업이 동시에 실행될 때, 각각에게 자원을 할당해야 한다.
      • 다양한 종류의 자원이 존재하며, 일부 자원은 특수한 할당 코드를 필요로 할 수 있고, 다른 자원(예: I/O 장치)은 일반적인 요청 및 해제 코드를 갖고 있을 수 있습니다.
    • 계정
      • 어떤 사용자가 얼마나 많은 어떤 종류의 컴퓨터 자원을 사용하는지 추적하기 위해 계정이 필요로 한다.
    • 보호와 보안
      • 보호는 시스템 자원에 대한 모든 액세스가 통제되도록 하는 것을 포함한다.
      • 시스템의 보안은 외부자로부터 시스템을 보호하는 것을 의미하며, 사용자 인증을 필요로 하며, 외부 I/O 장치를 부적절한 액세스 시도로부터 방어해야 한다.
      • 시스템이 보호되고 안전하게 운영되려면 시스템 전반에 걸쳐 조치가 취해져야 한다.

2. OS의 종류

동시 사용자 수에 따른 OS 분류

  • Single User System
    • OS가 한 사용자만이 시스템을 사용할 수 있도록 지원
    • 시스템의 모든 자원들이 사용자에 귀속
  • Mult User System
    • 동시에 여러 사용자들이 시스템을 사용할 수 있도록 지원
    • 각종 시스템 자원(파일 등)들에 대한 소유 권한 관리 필요
    • OS의 기능 및 구조가 복잡해짐

작업 처리 방법에 따른 OS 분류

  • Single Tasking
    • 시스템 내에 하나의 작업(프로그램, 프로세스)만 존재, 실행 가능
    • 하나의 프로그램 실행을 마친 뒤에 다른 프로그램의 실행을 시작
    • OS의 구조가 단순함

  • Multi Tasking
    • 동시에 여러 작업의 수행을 지원
    • 병행 수행으로 인한 문제점들의 관리 필요
    • 운영체제의 기능 및 구조가 복잡해짐

사용 환경에 따른 OS 분류

  • 일괄처리 시스템\(_{Batch \ Systems}\)
    • 사용자의 요청 작업들을 일정 시간 모아 두었다가 한번에 처리하는 방식
    • 전자계산소 등에서 컴퓨터 시스템의 일체의 장비들을 관리, 운영
    • 시스템 지향적인 환경
    • 장점
      • 작업처리량\(_{Throughput}\) 향상
      • 자원활용도\(_{Resource \ Utilization}\) 증대
    • 단점
      • 생산성\(_{Productivity}\) 저하
      • 반환시간\(_{Turnaround \ Time}\)이 길다 (약 6시간)
  • 시분할 시스템\(_{Time \ Sharing \ System}\)
    • 다수의 사용자들이 컴퓨터 시스템과 직접 대화형으로 작업 처리
    • 다수의 사용자가 프로세서 시간을 공유
    • Conversational system, Interactive system
    • 단말기\(_{Terminal}\) 사용
    • 사용자 지향적인 환경
    • 장점
      • 응답 시간\(_{Response \ Time}\)s 단축
      • 생산성\(_{Rroductivity}\) 향상
    • 단점
      • 통신선 비용 증가

  • 분산 시스템\(_{Distrbuted \ Systems}\)
    • 네트워크 기반의 일관된 환경 구축을 위해 구성된 시스템
    • 클라이언트-서버 환경
    • 특성
      • 각각 운영체제 탑재한 다수의 범용 시스템으로 구성
      • 물리적인 분산, 통신망 이용한 상호 연결
      • 분산운영체제 존재
      • 은폐성\(_{Transparency}\)
      • 각 구성 요소들간의 독립성유지, 공동작업 가능
    • 장점
      • 적은 비용, 고 성능
      • 확장성, 신뢰성/가용성, 확장 가능성
    • 단점
      • 구축 어려움
  • 실시간 시스템\(_{Real \ Time \ Systems}\)
    • 입력 작업이 제한 시간을 갖는 경우가 있는 시스템
    • 시스템 자원의 활용보다 작업별로 제한 시간 내에 서비스를 완료하는 것이 중요
    • 작업 유형
      • hard real-time job
        • 엄격한 시간 제한(예: 항공기 비행 제어 시스템)
      • soft real-time job
        • 유연한 시간 제한(예: 스트리밍 비디오)
      • non-real-time job
        • 시간 제한이 없음
    • 요구되는 기법
      • 실시간 프로그래밍 언어 및 컴파일러
      • 실시간 프로세스 스케줄링 기법
        • 실행 중인 다양한 작업 간 우선순위와 시간 할당을 관리하기 위한 스케줄링 기술이 필요하다.

3. OS 발달 과정

아래 표 정도만 알고 있으면 될듯

0세대 (1940)

  • 초기 시스템에는 운영체제가 없었으며, 사용자가 직접 기계어를 사용해 명 령문을 작성
  • 프로그램을 작성할 때 컴퓨터에 필요한 작업을 모두 포함하고, 모든 명령어를 명시적으로 표현
  • 모든 작업은 예약을 통해 진행되고 컴퓨터는 프로그래머가 메인 콘솔에서 수동으로 운영

1세대 (1950)

  • 버퍼링, 스풀링, 일괄처리 시스템
  • 1952년 초, 자동차 제조회사 GM의 연구실에서 IBM 701 운영체제 개발, 이 것이 운영체제의 효시이다.
  • 1955년, GM과 북아메리가 항공사가 IBM 704 운영체제를 공동으로 개발.
  • IBM 사용자협회 SHARE(Semi-Automatic Business Research Environment) 에서 운영체제에 대한 토론회를 육성, 1957년까지 IBM 704를 위한 자체 운 영체제를 개발.
  • IBM 1400 계열 같은 소형 컴퓨터는 운영체제 없이 작동하며, 입출력 제어 시스템인 IOCS(Input/Output Control System) 패키지를 사용.
  • 버퍼링, 스풀링 기법 적용
    • 초기 운영체제는 설치 시간(Setup Time)과 철거 시간(Teardown Time) 낭비를 줄이는데 관심을 가짐.
      • 설치 시간 : 작업을 컴퓨터 시스템에 올리는 필요한 시간.
      • 철거 시간 : 작업을 컴퓨터 시스템에서 해체하는데 필요한 시간.
  • 유휴 기간을 줄이기 위해 작업을 일괄 처리하여 성능 향상.
    • 운영체제 개발 전의 작업은 카드에서 개별적으로 적재, 실행 중에는 각 작업이전 시스템을 차지.
    • 각 작업은 완료 또는 오류가 발생할 때까지 실행, 작업이 끝나야 오퍼레이터가 기존 프로그램과 카드를 제거하여 다음 작업을 실행 가능.
    • 이 과정에서 시스템은 유휴 상태가 되므로, 이를 줄이고 성능을 향상시키기 위해 작업을 소형 보조 컴퓨터의 테이프에 옮긴 다음 나중에 대형 컴퓨터로 처리 되는 과정을 채택
  • 하드웨어 장치의 독립성을 위해 시스템 파일명 등장.
    • 사용자가 하드웨어 장치 번호를 직접 코드화할 필요가 없어졌으며, 카드를 읽는 장치에 대해 표준 시스템 입력 파일, 인쇄 출력 장치에 대해서 표준 시스템 출력 파일을 지정 가능.
    • 어셈블러와 컴파일러에서 링커(Linker)와 로더(Loader)로의 변환이 원활해 짐.

2세대 (1960)

  • 다중 프로그래밍, 다중 처리, 시분할 시스템
  • 일괄 처리 형태로 처리량을 향상시키며, 장치 독립성이라는 개념으로 하드 웨어 관리가 편리해 짐.
    • 사용자 프로그램에서 테이프 드라이브를 지정, 운영체제가 현재 사용되고 있지 않는 테이프 드라이브를 찾아 오퍼레이터에게 테이프를 드라이브에 걸어줄 것을 지시함.
  • 다중 프로그래밍
    • 여러 프로그램이 메인 메모리에 공존, 프로세서를 작업 간에 수시로 번갈아 할당.
  • 다중 처리 시스템
    • 시스템의 처리 능력을 증진시키기 위해 한 컴퓨터 시스템에 여러 개의 프로세서 사용.
  • 시분할 시스템
    • 사용자가 터미널을 통해 컴퓨터와 직접 접촉하기 위해 개발.
    • 사용자와 대화 방식으로 작동하며, 사용자가 컴퓨터에 요구 사항을 입력하고 컴퓨터가 요구를 처리하여 사용자의 터미널로 응답.
  • 실시간 시스템
    • 즉시 응답한다는 점이 특징으로, 컴퓨터가 가솔린 정제 등의 공정을 제어하는데 사용되며 발전하기 시작함.
    • 군용 실시간 시스템은 적의 공중 공격에 대비해 동시에 수천 지점을 감시하기 위해 개발.
    • 필요할 때 즉시 사용할 수 있고 빠른 응답이 중요하므로 활용도가 높지 못하고 비용이 많이 듬.

3세대 (1960)

  • 범용 시스템, 다중 모드 시스템
  • 1964년 IBM 시스템/360 계열 컴퓨터로부터 시작.
  • 범용 시스템으로 설계, 육중하며 모든 사용자에게 모든 기능을 제공할 수 있도록 제작.
    • 다량의 컴퓨터가 판매되었으나, 이러한 기능이 필요 없는 사용자에게 실행 시간의 과부하, 시스템 이해를 위한 기간, 오류 발생 시 수정 시간, 시스템 유지 등에 있어 많은 비용 부담의 단점을 가짐.
  • 다중 모드 시스템
    • 일괄 처리, 시분할 처리, 실시간 처리, 다중 처리를 모두 제공.
    • 고가이며 계획한 시간과 예산을 초과하여 완성되었으며 사용에도 고도의 훈련이 필요.
    • 사용자와 하드웨어 사이에 소프트웨어 계층 도입.
      • 하드웨어에 대한 관점 없이 소프트웨어에 의해 형성된 관점을 보게 됨으로 사용이 어려우며, 간단한 작업 수행에도 복잡한 작업 제어 언어(JCL, Job Control Language)의 이해가 필요함

4세대 (1970)

  • 네트워크, 가상 머신, 분산 처리 시스템, 개인 컴퓨터
  • 통신 발달과 더불어 컴퓨터 네트워크와 온라인 처리가 사용됨.
    • 다양한 형태의 단말기를 이용하여 멀리 떨어진 지역의 컴퓨터를 네트워크를 통해 사용 가능.
    • 마이크로프로세서의 등장으로 개인용 컴퓨터를 가짐.
  • 개인용 컴퓨터
    • 데이터 통신 인터페이스를 갖추어 터미널로 사용.
    • 시분할 모드로 한정된 컴퓨터만 사용해야 하는 제약 없이 지역적으로 멀리 떨어진 여러 시스템과 통신이 가능하다.
    • 통신선을 통과하는 정보의 안전한 관리 문제가 대두되며 정보 보호가 중요한 관심사로, 교신 내용 유출 시에도 지정한 수신자 외에 데이터 사용이 불가능하도록 하는 부분이 주요 이슈다.

Unix OS 발달 과정

Unix_history-simple.svg

그림 출처: 위키백과

4. OS의 구성

위 그림처럼 계층적인 구조를 띈다.

커널\(_{kernel}\)

  • 커널의 주요 기능

    • 하드웨어 자원 관리
    • 소프트웨어 자원 관리
  • OS의 핵심부분 (booting 후 memory에 상주)
  • 사용자 및 실행 프로그램들을 위해 빈번히 사용되는 기능 담당
  • 주로 자원의 관리 기능
  • 동의어
    • 핵\(_{nucleus}\)
    • 관리자\(_{supervisor}\) 프로그램,
    • 상주 프로그램\(_{resident \ program}\)
    • 제어 프로그램\(_{control \ program}\)

유틸리티 프로그램\(_{utility \ programs}\)

비상주 프로그램, 서비스 프로그램

주로 사용자 인터페이스 기능

시스템 호출\(_{system \ call}\)

  • 실행 중인 프로그램과 운영체제 간의 인터페이스
  • 응용 프로그램은 스스로 제어할 수 있는 권한이 없음
    • 때문에, 커널의 도움을 받아 os에서 처리를 해야함
    • 프로그램과 커널 사이의 중간 매개체라 생각하면 됨

5. OS 기능

프로세스\(_{process}\) 관리

  • 실행중인 프로그램, 시스템 내부의 작업단위
  • 사용자의 명령 또는 작업 요청이 컴퓨터 시스템에 입력되고 그 수행이 종료되지 않은 상태
  • 프로세스의 상태
    • 실행 상태, 준비 상태, 대기 상태
    • 각 상태로 전이하면서 프로세스가 동작
      • 실행 → 준비 → 대기 → 실행
  • 프로세서
    • 처리장치\(_{CPU}\)
    • 프로그램을 실행시키는 핵심 자원
  • 기능
    • 프로세스 생성 및 삭제
    • 프로세스 중단 및 재개
    • 프로세스 동기화
    • 프로세스 통신
    • 교착 상태 처리
  • 프로세스 관리 정보 (운영체제가 프로세스 관리를 위해 사용하는 정보)
    • 각 프로세스들의 상태
    • 특정 상태에 있는 프로세스들이 요구한 자원 (CPU, 기억장치, 파일, I/O)
    • 각 프로세스들에 대해 지금까지의 총 실행시간 등
  • 여러 프로세스간 자원 공유 관리
    • 2개 이상의 파일을 수정할 경우 파일이 깨질 수 있는것을 보완
    • 데이타의 무결성\(_{integrity}\) 유지
  • 프로세스 스케줄링\(_{process \ scheduling}\)
    • 시스템 내의 프로세스 실행 순서 결정
  • 프로세스 할당 관리 (다중 프로세서의 경우)
    • 각 프로세서들에 대해 프로세스 배당 결정 및 운영

기억장치\(_{memory}\)

  • 각각 자신의 주소를 가지는 단어와 바이트의 대용량 배열로 구성
  • CPU와 입출력 장치에 의해 공유되는 접근 가능한 자료 저장
  • 주기억 장치: CPU가 직접 주소로 지정할 수 있는 유일한 기억 장치
  • multi-user, multi-tasking 시스템에서의 기억장치 관리
    • 각 프로세스에 대해 주기억장치 할당, 기록, 반환
    • 주기억장치의 빈 공간에 대한 기록, 유지
    • 주기억장치 용량 부족 시 이에 대한 처리
    • 각 프로세스의 할당 영역 보호 (다른 프로세스의 영역을 침범하지 않게)
  • 운영체제의 기억장치 관리 필요
  • 주기억 장치 할당 방법
    • 사용자 프로그램 전체를 적재
      • 주기억 장치 낭비, 적재가능 프로그램 수 줄임
      • 구현이 쉬움
    • 사용자 프로그램 중 필요한 일부만 적재\(_{virtual \ memory \ concepts}\)
      • 주기억 장치 낭비 줄임
      • 실행 도중 보조기억장치 접근이 요구됨 (문제점?)
        • 속도가 느려짐
  • 기능
    • Memory usage book keeping
      • 어느 부분이 누구에 의해 현재 사용되고 있는지 점검
    • Choose the process to be loaded when there is space (fitting)
    • Allocation and de-allocation of memory space

댓글남기기