운영체제 구조와 역사

운영체제의 구조와 역사

‘쉽게 배우는 운영체제’ 읽고 정리

운영체제란

일반 컴퓨터나 노트북에서 사용하는 운영체제는 Windows, Mac OS, Unix 그리고 Linux 등이 있으며 스마트폰에서도 iOS와 Android 등이 사용된다. 컴퓨터와 스마트폰 외에도 내비게이션, 스마트 TV 등에도 CPU의 성능이 낮고 메모리 크기가 작은 임베디드 운영체제(embedded operating system)이 있는데, 운영체제가 있는 제품은 기능을 계속 향상시킬 수 있다.

운영체제의 필요성

  • 새로운 기능의 추가나 성능의 변경 가능 → 성능 및 효율성 향상 가능
  • 운영체제가 있는 기계를 프로그램이 가능한(programmable) 기계라 부름
  • 사용자가 직접 자원에 접근하는 것을 막으며 자원을 보호
  • 컴퓨터 자원을 효율적으로 관리
  • 응용 프로그램에 컴퓨터 자원 적절하게 배분
  • 사용자가 편하게 사용할 수 있도록 인터페이스 제공
  • 다양한 장치를 사용할 수 있도록 하드웨어 인터페이스 제공

운영체제의 목표

  • 효율성: 효율적인 자원 관리
  • 안정성: 자원 보호, 문제 발생 시 복구
  • 확장성: 하드웨어 인터페이스 제공, plug & play
  • 편리성: 사용자 인터페이스 제공

운영체제의 역사

  • 1940년대
    • 에니악
    • 진공관 사용, 2진법을 사용하는 계기가 됨
    • 전선으로 논리회로 구성
  • 1950년대
    • CPU, 메인메모리
    • 천공카드 리더, 라인 프린터 → 프로그래밍과 유사한 방식으로 소프트웨어 개발 가능
    • 일괄 작업 시스템(batch job system): 모든 작업을 한 번에 처리하고, 프로그램 실행 중간에 데이터를 입력하거나 수정할 수 없음
  • 1960년대
    • 키보드, 모니터
    • 대화형 시스템(interactive system)
      • 작업 중간에 사용자가 입력을 하거나 중간값을 사용자에게 보여줄 수 있음
      • 작업 중간에 결과값을 출력하여 프로그램 진행 확인 가능
      • 다양한 종류의 응용 프로그램 만들 수 있음
      • 작업 시간 예측 어려움
  • 1960년대 후반
    • 다중 프로그래밍(multi programming) 기술 개발
      • 하나의 CPU로 여러 작업을 동시에 실행
    • 시분할 시스템(time sharing system)
      • 여러 작업을 조금씩 처리하여 작업이 동시에 이루어지는 것처럼 보이게 함
      • 여러 작업을 동시에 처리하기 위한 추가 작업 필요
      • 많은 작업을 할 경우, 중요 작업이 일정 시간에 끝나는 것을 보장하기 어려움
    • 다중 사용자 시스템
      • 여러 사람이 동시에 사용 가능
    • Unix 개발
      • 멀티 프로그래밍, 다중 사용자 지원하는 운영체제
  • 1970년대
    • 최초의 개인용 컴퓨터 ‘애플II’
    • TCP/IP 정의
    • 분산 시스템
      • 네트워크 상에 분산되어 있는 여러 컴퓨터로 작업
      • 결과를 상호 교환가능한 시스템
  • 1990년대
    • 웹 시스템(web system) 보급
    • 클라이언트/서버 시스템
      • 작업을 요청하는 클라이언트와 응답하여 요청 작업을 처리하는 서버 구조
  • 2000년대
    • P2P(Peer-to-Peer)
      • 서버의 과부하 해결
      • 서버를 거치지 않고 사용자 직접 연결

CPU bound & I/O bound

  • CPU 집중 작업(CPU bound job): 주로 CPU를 사용하는 작업 (ex. 수학 계산)
  • 입출력 집중 작업(I/O bound job): 주로 주변장치의 입력과 출력을 하는 작업 (ex. DB, 동영상 플레이어)

실시간 시스템

  • 경성 실시간 시스템(hard real-time system): 지정 응답 시간을 정확하게 지키는 시스템 (ex. 원자력 발전소 온도 제어)
  • 연성 실시간 시스템(soft real-time system): 지정 응답 시간을 최대한 지키지만, 융통성이 어느 정도 허용된 시스템 (ex. 영상 재생)

운영체제의 구조

커널과 인터페이스
  • 커널
    • 프로세스 관리, 메모리 관리, 저장장치 관리 등의 운영체제 핵심 기능
  • 인터페이스
    • 커널에 명령 전달
    • 실행 결과를 사용자와 응용 프로그램에 돌려줌
    • 인터페이스에 따라 사용자에게 다른 운영체제로 보임
시스템 호출과 디바이스 드라이버
  • 시스템 호출(system call)
    • 커널이 자신을 보호하기 위해 만든 인터페이스
    • 사용자나 응용 프로그램의 자원 직접 접근 차단
    • 자원을 이용하기 위해 시스템 호출 이용
    • 커널이 제공하는 시스템 관련 서비스를 모아놓은 것으로 함수 형태로 제공
  • 드라이버
    • 커널과 하드웨어의 인터페이스 담당
    • 하드웨어의 특성을 반영한 소프트웨어

커널의 구성

커널이 하는 일
  • 프로세스 관리: 프로세스에 CPU 배분, 작업에 필요한 환경 제공
  • 메모리 관리: 프로세스에 작업 공간 배치, 실제 메모리보다 큰 가상공간 제공
  • 파일 시스템 관리: 데이터를 저장하고 접급할 수 있는 인터페이스 제공
  • 입출력 관리: 필요한 입력과 출력 서비스 제공
  • 프로세스 간 통신(IPC) 관리: 공동 작업을 위한 각 프로세스 간 통신 환경 지원
단일형 구조 커널(monolithic architecture kernel)
  • MS-DOS, VMS, 초기 유닉스 운영체제의 구조
  • 모듈이 구분되지 않고 하나로 구성됨
  • 장점
    • 모듈 간의 통신 비용이 줄어들어 효율적 운영 가능
  • 단점
    • 모든 모듈이 하나로 묶여 있어 버그나 오류 처리하기 어려움
    • 여러 기능이 서로 연결되어 있어 의존성이 높아 작은 결함이 시스템 전체로 확산될 수 있음
    • 다양한 환경의 시스템에 적용하기 어려움(이식성이 낮음)
    • 현대의 운영체제는 크고 복잡하여 단일형 구조를 구현하기 어려움
계층형 구조 커널(layered architecture kernel)
  • 비슷한 기능을 모듈로 묶어 하나의 계층으로 만들고 계층 간의 통신
  • 단일형 구조보다 버그나 오류 쉽게 처리 가능
  • 현대 운영체제의 구조 계층형 구조 커널
마이크로 구조 커널(micro architecture kernel)
  • 계층형 구조 접근 방식과 반대로 개발된 커널
  • 가장 기본적인 기능만 제공
  • 운영체제의 많은 부분이 사용자 영역에 구현
  • 메모리 관리와 프로세스 간의 동기화 서비스 제공
  • 메모리 관리자와 동기화 모듈은 프로세스 간 통신 모듈로 연결
  • 각 모듈이 독립적으로 작동 마이크로 구조 커널

가상머신

  • 운영체제와 응용 프로그램 사이에서 작동하는 프로그램
  • 가상머신을 사용하면 호환성이 높아지지만, 가상머신을 통해서만 작동하므로 느림