[운영체제] 운영체제의 시작과 발전

1. 운영체제 개념

1) 운영체제 정의

  • 운영체제 : 컴퓨터 사용자와 컴퓨터 하드웨어 사이에서 중계 역할을 하면서, 프로그램 실행을 관리하고 제어하는 시스템 소프트웨어
  • 컴퓨터가 켜질 때 처음으로 적재되어 나머지 모든 프로그램의 실행을 제어하고 사용자의 요청을 처리하는 소프트웨어
  • 컴퓨터의 자원을 독점적으로 관리하는 특별한 소프트웨어

2) 운영체제의 목적과 기능

  • 운영체제의 목적
    • 컴퓨터 사용의 편리성
    • 컴퓨터 자원관리의 효율성
  • 운영체제의 기능
    • CPU/프로세스 관리
    • 메모리 관리
    • 파일 시스템 관리
    • 장치 관리
    • 네트워크 관리
    • 보안 관리
    • 기타 관리 (사용자 계정 관리, 통계, 오류 발견 및 대응, 부팅)

3) 운영체제와 응용소프트웨어

운영체제 응용소프트웨어

목적 컴퓨터 하드우어나 응용소프트웨어 등 자원 관리 컴퓨터 사용자들의 요구를 충족시킬 수 있도록 설계된 소프트웨어
기능 프로세스, 메모리, 파일 시스템, 입출력 장치 등 자원 관리와 사용자 관리 소프트웨어를 만든 특정 목적만 수행
개발 언어 C/C++, 어셈블리어 C/C++뿐 아니라 JAVA, Python, C# 등 다양한 언어
실행 부팅 시 메모리에 적재되어 실행을 시작하여 컴퓨터를 끌 때까지 실행 사용자가 명령을 통해 실행시키거나 종료
자원에 대한 접근 권한 컴퓨터의 모든 자원에 대해 배타적 독점 사용 권한 컴퓨터 자원을 사용하고자 할 때 반드시 운영체제에게 요청

2. 운영체제의 발전

1) 배치 운영체제

  • 컴퓨터의 idle 시간을 줄여 활용률 향상
  • 개발자와 관리자를 구분하여 실행
  • 대기 중인 프로그램을 한 번에 하나씩 적재하고 실행

2) 다중프로그래밍 운영체제

(1) 출현 배경

  • 프로그램 실행 형태로 인한 CPU의 idle 시간 발생
  • CPU의 idle 시간 줄이기 → CPU 활용률 증가 → 처리율 증가

(2) 다중프로그래밍 기법

  • 미리 여러 프로그램을 메모리에 적재
  • 프로그램 실행 도중 I/O가 발생하여 대기시 메모리에 적재된 다른 프로그램 실행
  • CPU의 유휴시간을 줄이기위해 미리 메모리에 작업을 올려놓는 방식

(3) 다중프로그래밍으로 인한 이슈

  • 여러 프로그램을 동시에 올리기 위한 큰 메모리 필요
  • 프로그램의 메모리 할당 및 관리 이슈
  • 메모리 보호 이슈
  • CPU 스케줄링과 컨텍스트 스위칭
    • 실행시킬 프로그램 선택 스케줄링 / 컨텍스트 스위칭 필요
  • 인터럽트 개념 도입
  • 동기화
    • 여러 프로그램이 동일한 자원을 액세스할 때 발생하는 문제
  • 교착 상태 해결
    • 프로세스들이 서로 상대가 가진 자원을 요청하면서 무한 대기를 교착 상태 해결

3) 시분할 다중프로그래밍 운영체제

(1) 출현 배경

  • 배치와 다중 프로그래밍의 문제점 인식
    • 비대화식 처리방식
    • 느린 응답시간, 오랜 대기 시간

(2) 시분할 운영체제

  • 빠른 프로그래밍 디버깅 필요
  • 사용자에게 빠른 응답을 제공하는 대화식 시스템
  • 시간을 나누어 돌아가며 각 명령을 처리하는 시분할 시스템 개발

4) 개인용 운영체제

(1) 출현 배경

  • 시분할 시스템 사용의 불편함
  • 개인용 컴퓨터 필요성

(2) 개인용 컴퓨터 등장

  • 개인용 운영체제 MS-DOS 등장

5) 임베디드 운영체제

  • 임베디드 컴퓨터 : 장치들의 목적을 지원하는 소형 컴퓨터
  • 임배디드 운영체제 : 임베디드 컴퓨터에서 장치들을 제어하고 작동시키는 기능 수행

6) 모바일 운영체제

  • 하드웨어의 발전으로 휴대 가능한 크기의 모바일 장치 출현
  • 모바일 컴퓨터 내 장치들을 구동시키고, 이들을 활용하는 다양한 응용프로그램을 실행하도록 설계된 운영체제

7) 다양한 운영체제

  • 데스크톱 운영체제 : Windows, Mac OS, Linux
  • 서버 컴퓨터 운영체제 : 네트워크에 연결하고 24시간 실행되는 컴퓨터, 보안이 중요
  • 실시간 운영체제 : 실시간 어플리케이션 혹은 테스크를 각각 정해진 데드라인 시간이내에 처리되도록 보장하는 것을 목표