대학교/운영체제

chap1. 운영체제의 개념과 태동, 그리고 발전

CodeJin 2023. 3. 14. 13:38

※ 공부한 것을 정리한 노트입니다. 참고만 하세요. ※

 

1. 정의

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

단어별 분석

  • 자원
    • 하드웨어 자원 - CPU, 캐시, 메모리, 키보드, 마우스, 디스플레이, 하드디스크, 프린터 등등
    • 소프트웨어 자원 - 응용 프로그램
    • 데이터 자원 - 파일, DB등
  • 독점
    • 자원에 관한 모든 권한은 운영체제에 있다.
    • 자원 할당, 공유, 액세스, 입출력
    • ex) 파일 생성 - 디스크 빈 공간 관리, 파일 저장 위치 관리, IO 등
  • 관리(관리자, supervisor)
    • 실행중인 프로세스, 메모리 관리
    • 파일과 디스크 장치, IO장치, 사용자 계정 관리 등
  • 소프트웨어
    • kernel + UI/UX 도구 프로그램으로 이루어짐
    • ex) 탐색기(explorer), 작업 관리자(task manager), 제어판(control panel))
    • 디바이스 드라이버

목적

  • 사용자의 사용 편리
  • 컴퓨터의 자원 관리 효율

기능

  • CPU/프로세스 관리 : 프로세스 적재, 실행, 종료, 생성 관리 / 프로세스 스케줄링, 동기화
  • 메모리 관리 : 메모리 할당/반환, 보호, 가상 메모리
  • 파일 시스템 관리 : 파일 생성/삭제, 열기/닫기, 읽기/쓰기, 파일 정보 관리, 저장 관리
  • 장치 관리 : 장치 read/write, 제어
  • 네트워크 관리 : 네트워크 입출력, 분산처리
  • 보안 관리
  • 기타 관리 : 계정, 통계, 오류 발견 및 대응, 부팅

응용 소프트웨어와의 차이

 

2. 운영체제의 태동

고정 프로그래밍 컴퓨터(1940년대)

고정 프로그래밍 방식

  • 1940년대 전자식 디지털 컴퓨터가 만들어지기 시작하는 시대
  • 운영체제에 대한 개념이 없었음.
  • 소프트웨어와 하드웨어의 분리 개념이 없음. 모든 것이 하드웨어로 제작 됨
  • 프로그래밍
    • 종이에 프로그램 구현할 스위치와 전선 연결도 작성
    • 배선판에 전선 연결
    • 하나의 명령, 여러 가닥의 전선 연결
    • 프로그램 전체 구축에 수많은 전선 + 며칠 소요 → 새로운 프로그램 작성시 매우 힘듬
  • 사례
    • 독일의 Z3 computer
    • 영국에서 독일군의 암호를 해독하기 위해 만든 colossus
    • 에니악

내장 프로그래밍 컴퓨터(1945년~)

내장 프로그래밍 방식

  • 1945년 폰 노이만이 제안
  • 1951년 에드박 컴퓨터를 만들 때 적용
  • 오늘날의 컴퓨터 구조가 됨

의미

  • CPU와 메모리 분리
    • 실행할 프로그램은 메모리에 적재하고, CPU는 메모리에서 읽어와 프로그램을 실행함
    • 고정 프로그래밍 방식에 비해 정말 획기적인 변화
    • 하드웨어의 변화 없이 실행시킬 프로그램만 메모리에 적재
  • 소프트웨어와 하드웨어의 분리
    • 펀치 카드에 구멍을 뚫어 프로그램을 작성함
    • 카드리더기로 프로그램을 메모리에 읽어 들임

프로그램 로더 (1950년대)

프로그램 로딩의 시대가 시작. 운영체제 개념의 등장

  • 1954년 IBM 701 출시. IBM의 첫 내장 프로그래밍 컴퓨터
  • 기계만 대여하고 어떤 SW도 제공하지 않음
  • IBM 701 개발자들은 첫번째 카드에 다음 카드에 작성된 프로그램을 메모리에 적재할 코드만 작성하고, 두번째 카드부터 필요한 프로그램을 작성한다 → 로더 프로그램(뒷 카드를 메모리에 올리는 카드)의 필요성
  • 로더가 운영체재로 발전
  • 오늘날 운영체제의 가장 기본적인 기능
    • 저장장치에 담긴 프로그램을 메모리에 적재하는 기능

원시 운영체제 GM OS (1955년)

  • IBM 701의 고객 GM(General Motors)이 개발
  • 핵심 개념
    • 로더 프로그램을 사용자의 프로그램에서 분리 → 사용자가 자신의 프로그램을 적재하는 셀프-로더 프로그램 작성의 번거로움 해소
    • 로더 프로그램은 시스템 내의 테이프에 저장, 필요할 때마다 실행
    • 당시의 로더 프로그램을 Monitor라고 부름
    • 후에 General Motors Operating System (GM OS) 이라고 불림

GM OS의 의의

사용자에게서 로더 프로그램을 분리하고, 시스템에 한개만 두어, 사용자 프로그램을 실행할 때 작동하여 프로그램을 읽어 실행시켜준다는 점에서 원시적인 OS라고 평가받는다.

최초의 운영체제 GM-NAA I/O 탄생 (1956~1957년)

  • IBM 701보다 성능이 좋은 IBM 704 등장
  • 하지만 여전히 문제가 존재한다.
    • 개발자들은 프로그램을 실행하기 위해 여전히 긴 시간을 대기해야한다.
    • 비싸디 비싼 컴퓨터가 오랜 시간동안 쉬고 있다. 개발자가 프로그램을 실행하기 위해 시스템을 셋팅하는동안, 컴퓨터는 놀고 있기 때문
    • 입출력 루틴을 여전히 개발자가 작성
  • 1956년 GM과 NAA(North American Aviation)이 GM-NAA I/O를 공동 개발함.
  • 고가의 IBM 704를 효율적으로 사용하기 위해서 IBM 701의 GM OS를 확장하여 구현
  • 운영체제로서의 모습을 갖춤
    • 배치(batch) 방식으로 작동 : 개발자들이 작성하여 쌓아놓은 작업을 순서대로 하나씩 메모리에 적재하여 하나씩 실행
    • GM-NAA I/O프로그램은 메모리에 상주함 → 오늘날의 운영체제 방식
    • 입출력 장치들을 제어하는 루틴을 라이브러리 형식을 갖추고 프로그램 사이에 공유함. (카드 입력장치, 테이프 입출력장치, 프린터 출력 등) → 라이브러리 개념의 등장
  • 구조
    • 어셈블러 코드 : 사용자가 작성한 어셈블리어 프로그램을 기계어로 번역
    • 로더 프로그램 : 사용자 프로그램을 하나씩 메모리에 적재
    • 운영체제의 메인코드 : 운영체제의 시작 코드
    • 공통 입출력 코드 : 장치 입출력을 다루는 프로그램 코드, 라이브러리화 되어 모든 프로그램이 실행시 호출하여 사용

3. 운영체제의 발전

운영체제의 태동

  • 1세대 컴퓨터 시절, 운영체제의 개념 전무
    • 개발자는 펀치 카드에 프로그램 작성
    • 컴퓨터는 한번에 한개의 작업
    • 컴퓨터 셋업하는 동안 많은 시간이 유휴(노는, idle)상태

배치 운영체제

  • 출현 배경 : 컴퓨터의 유휴시간을 줄여 컴퓨터의 활용률 향상
  • 개발자가 모든 것을 담당하던 이전과는 달리, 프로그램(펀치카드)를 작성하는 개발자와, 이를 실행해주는 관리자로 나뉘어짐.
  • 개발자는 프로그램을 작성한 후, 입력 데크에 올려두고 결과가 나올때까지 기다림
  • 관리자는 입력데크에 올라온 프로그램을 실행하고, 프로그램 실행 결과가 적힌 종이 출력후 밖에 쌓아둠 → 이후 개발자가 회수
  • 하지만, 여전히 한번에 하나의 작업만 가능함

다중 프로그래밍 운영체제

  • 정의 : 여러 프로그램을 메모리에 미리 적재하고, CPU가 한 프로그램을 실행하다 I/O가 발생하면, 해당 작업이 완료될 때까지 CPU가 메모리에 적재된 다른 프로그램을 실행하는 식으로 CPU의 노는 시간을 줄이는 기법
  • 출현 배경
    • 1960년대 CPU등 하드웨어들의 속도가 개선되고, 컴퓨터 가격이 오름 → 결국 활용률을 향상시키기 위함
    • 프로그램의 실행형태로 인한 유휴시간 발생
      • 형태 : CPU 작업 - I/O 작업 - CPU 작업 - I/O 작업 - CPU 작업 - I/O 작업 - .........
      • 배치 운영체제는 한번에 하나의 작업을 수행하기 때문에, I/O 작업이 이루어지는 동안 유휴시간 발생

다중 프로그래밍 기법의 문제점

  • 현재 모두 해결된 문제들. 단일 프로그래밍 기법에서 다중 기법으로 넘어가면서 발생하고, 발견된 문제들
  • 큰 메모리 이슈
    • 여러 프로그램을 동시에 적재해야하기 때문에 메모리의 크기를 늘릴 필요가 있음
  • 메모리 할당 및 관리 이슈
    • 몇 개의 프로그램을 적재할 것인가? 메모리 어디에 적재해야하는가? 프로그램당 할당해야하는 메모리의 크기는 얼마나 되어야 하는가? 이들을 적절히 조율해야하는 문제가 발생한다.
  • 메모리 보호 이슈
    • 한 프로그램이 다른 프로그램의 영역을 침범하지 못하도록 해야한다. 데이터 손실로 이어지기 때문
  • CPU 스케줄링과 컨텍스트 스위칭
    • 실행시킬 프로그램을 선택하는 스케줄링이 필요하다.
    • 다른 프로그램을 실행하기위해 넘어가면서, 프로그램의 실행 상태를 저장할 컨텍스트를 정의해야한다
    • 컨텍스트 스위칭이 필요하다.
  • 인터럽트
    • I/O 작업의 완료를 전달받을 방법이 필요했다.
  • 동기화
    • 여러 프로그램이 동시에 한 자원을 액세스하는 경우에 발생할 데이터 불일치, 손실 등의 문제를 해결해야한다.
  • 교착 상태
    • 프로세스들이 상대가 가진 자원을 서로 요청하면서 무한대기하는 교착 상태가 발견되었다.
    • 예를 들어 두 사람이 있고, 수저 세트는 하나만 있다고 하자. 밥을 먹기 위해서는 수저 세트를 모두 들고 있어야만 한다. 하지만, 한 사람은 숟가락만, 다른 사람은 젓가락만 가지고 있는 상태에서 서로의 도구를 요청하는 경우, 무한 대기 현상이 발생한다.

시분할(Time sharing) 다중 프로그래밍 운영체제

  • 출현 배경
    • 다중 프로그래밍 운영체제와 거의 동시에 연구가 진행됨.
    • 배치 처리와 당시 존재하던 다중프로그래밍의 문제점 2개를 해결하고자 함
      • 비대화식(non-interactive) 처리방식
      • 느린 응답시간, 오랜 대기 시간
  • 시분할 운영체제
    • 1959년 MIT의 John McCarty교수에 의해 발표
    • 빠른 디버깅이 필요함.
    • 사용자에게 빠른 응답을 제공하는 대화식 시스템 제안
      • 사용자는 터미널(키보드+모니터+전화선+모뎀)을 통해 시분할 운영체제가 있는 메인 컴퓨터에 원격 접속
      • 메인 컴퓨터는 시간을 나누어 돌아가면서 여러 프로그램을 실행함
    • CTSS : 시분할 시스템

그 외 다양한 운영체제

  • 개인용 운영체제 : 장치, 부품들의 성능향상, 개인용 컴퓨터의 필요성
  • 임베디드 : 산업 기계, 상용 제품 등에 내장되어 특정 목적을 지원하는 소형컴퓨터, 임베디드OS는 이런 소형컴퓨터를 제어하는 운영체제
  • 모바일 : 하드웨어의 급속한 발전으로 휴대가능한 모바일 장치가 등장