운영체제 (2) - Batch, Spooling, Multi-programming

@JHSHIN·2023년 3월 9일
0
post-thumbnail

운영체제 수업을 수강하며 정리한 내용을 작성하려고 합니다.

컴퓨터(OS)의 역사

1. Mainframe

  • 중앙집중형 대형 컴퓨터

Mainframe - 일괄처리(batch)

  • 특징
    • 펀치 카드 제출 → 메모리 적재 → 수행
    • 일단 시작한 Job이 끝나야 다음 Job이 수행됨
    • Job의 중간에 유저와 상호작용이 불가능
  • 문제점
    • CPU는 빈번히 idle 상태로 전환
      • I/O 장치가 끝날 때까지 CPU는 계속해서 대기해야 함

Batch의 해결책 - Spooling

  • 특징
    • Simultaneous Peripheral Operation On-Line
    • I/O와 computation을 동시에 진행할 수 있음
      • I/O 요청시 버퍼에 로드, I/O 장치는 버퍼에서 데이터를 가져옴
      • 컴퓨터는 여러 I/O 작업을 순차적으로 요청해둘 수 있음
      • I/O 작업이 진행되는 동안 컴퓨터는 다른 작업을 수행할 수 있음
  • 문제점
    • Asynchronous IO(비동기적 IO) 작업에는 적합하나, IO 처리 결과를 필요로 하는 Synchronous IO 작업의 경우 여전히 CPU는 대기해야함

Spooling의 해결책 - Automatic job sequencing

  • 특징
    • 사람의 관여 없이 여러 개의 job을 컴퓨터에서 순차적으로 실행
    • 한 프로그램이 IO 수행 시, 다른 프로그램이 CPU 점유 → Spooling의 문제점 해결
    • 사람이 일일이 다음 작업을 시작해야하는 Batch와 달리, 이전 작업의 종료와 동시에 다음 작업을 실행하기 때문에 성능이 좋음
  • Batch와의 차이점
    • Batching : 사람이 직접 스케줄링
    • Automatic job sequencing: 스케줄링을 담당하는 SW에서 프로그램 실행

멀티 프로그래밍 (multiprogramming)

  • Automatic job sequencing에 필요한 기술
  • 2개 이상의 작업을 동시에 실행
    • 운영체제는 여러 개의 작업을 메모리에 동시에 유지
    • 현재 실행중인 작업이 I/O를 할 경우 다음 작업을 순차적 실행
  • 장점
    • CPU가 쉬지 않기 때문에 CPU 활용률이 극대화됨
  • 문제점
    • 현재 Job이 I/O를 해야 다른 Job으로 순서가 넘어감, 즉 voluntary yield에 의존함
    • 사용자 또는 운영체제는 여전히 실행중인 작업에 대해서는 관여할 수 없음
    • High priority로 수행할 필요도 생김
    • 공평성을 유지할 필요 발생

Time Sharing(시분할 기법)

  • CPU의 실행 시간을 타임 슬라이스(e.g. 10ms)로 나누어 실행
  • 모든 프로그램은 타임 슬라이스 동안 CPU를 점유하고, 그 시간이 끝나면 CPU를 양보
  • 여러 개의 작업들은 CPU 스위칭을 통해서 동시에 실행되는 것처럼 느껴짐

Concurrent execution

  • 여러 프로그램들이 동시에 수행 상태에 있는 것처럼 느껴지게 하는 것
  • 멀티프로그래밍 또는 time sharing을 할 때 가능
  • 실제로 같은 시간에 한 코어에서 여러 프로그램이 실행되지는 않는다

Time sharing의 단점

  • CPU 스위칭 시 프로그램의 state를 저장(context switching)해야 함
    • state : 프로그램이 실행되고 있는 상태(context)
    • 프로그램 구동 중 캐시 메모리, 레지스터 등을 flush, reload
    • 이 때 오버헤드가 발생
  • State의 저장이 없으면 일시정지된 프로그램을 다시 실행할 수 없음

Multitasking(멀티태스킹)

  • 하나의 Job은 동시에 실행할 수 있는 task로 나눔
  • 여러 개의 task들이 CPU와 같은 자원을 공유하도록 하는 방법
  • Concurrent execution을 지원하고자 함

멀티태스킹 이슈

  • 복잡한 메모리 관리 시스템
    • 동시에 여러 개의 프로그램이 메모리에 상주됨
    • 메모리 관리 및 보호 시스템 필요
  • 적절한 응답 시간을 제공
    • Job들은 메모리와 디스크로 swap in/out 될 수 있음
  • Concurrent execution 제공
    • CPU 스케줄링이 필요
  • 필요에 따라서 job들간의 orderly execution 이 필요
    • 동기화, deadlock

요약

  • Batching(일괄처리)
  • Multiprogramming: with voluntary yield
    • 장점: CPU 활용률 극대화
    • 단점: 작업들 간의 공평성 보장 불가
  • Timesharing: with an interrupt of OS
    • 장점: OS의 정책에 따른 정확한 스케줄링 가능
    • 단점: 작업 간의 스위칭으로 인한 성능 오버헤드 발생
  • Multitasking based on timesharing
    • 하나의 job을 여러 task로 구성하는 개념을 제공
    • 여러 task가 CPU를 번갈아가며 점유한다는 점에서, multiprogramming과 timesharing을 모두 multitasking의 한 형태로 보는 관점도 존재
    • 장점: 복잡한 프로그램의 설계를 가능하게 함
profile
We Need Better UX

0개의 댓글