[지식창고]/운영체제

[운영체제/OS] 2. OS의 역사

개발새발주발 2023. 4. 12. 21:51
728x90

운영체제가 어떻게 개발되었고 어떤 문제점을 거쳐 현재의 모습으로 자리 잡았는가에 대한 장이었다. 

사진 출처 : https://computer-science-student.tistory.com/384

Phase 0 - 하드웨어는 매우 비싼 experiment; 운영체제가 존재하지 않는 단계 

1. One user at console : 한명의 콘솔 사용자

 - 한 번에 하나의 기능 ( 연산, I/O, 사용자 생각/응답 )

 - 카드 덱을 통해 프로그램 로드: I/O 장치 드라이버 라이브러리 

 - 사용자는 콘솔에서 디버그 수행

 

 

Phase 1- 하드웨어는 비싸고 인간은 싸다

2. 간단한 배치 처리 : 프로그램을 로드하고 실행한 후 결과를 출력하고 삭제한 다음 반복한다. 

- 사용자는 (카드나 테이프로 된) 프로그램을 운영자에게 제공하고 작업을 예약한다. 

- Resident 모니터가 자동으로 사용자 작업을 로드, 실행, 덤프한다. 

- 매모리 관리(재배치) 및 보호가 필요하다 : 여러개의 작업이 메모리에 동시에 적재될 때 충돌이나 메모리 오버플로우 등의 문제가 발생할 수 있으므로 이러한 문제를 해결하기 위해 메모리 관리가 필요하다 

- 운영체제는 하드웨어를 더 효율적으로 사용할 수 있었으나 디버깅이 더 어려워지기 때문에 결과물에서 디버그를 해야한다. 즉, 사용자가 프로그램 실행 후 출력 결과를 확인하여 오류를 수정해야한다. 

 

 

3. Overlapped CPU & I/O operations : 중첩된 CPU 및 I/O 작업 

 

- First : 처음에는 느린 I/O 장치를 빠른 테이프 드라이버에 버퍼링하고, I/O 장치를 복제하여 CPU와 연결한다. 이를 통해 I/O 작업과 CPU작업을 동시에 수행할 수 있도록 한다. 

- Last : 나중에는 데이터를 디스크로 스풀링한다. 이를 통해 I/O 작업과 CPU 작업을 동시에 수행하는 더욱 효율적인 방법을 제공한다. 

 

** 스풀링 : Simultaneous Peripheral Operations On-Line의 약자로 컴퓨터 시스템에서 여러 프로세스 또는 작업이 동시에 I/O 장치에 접근할 수 있도록 하는 기술 

 

 

4. Multiprogrammed batch system : 다중 프로그램 일괄 처리 시스템 

- 여러개의 job이 disk에 있고 run되기를 기다린다

→ Multiprogramming - 여러개의 프로그램들을 '같은' 시간에 run 한다 

  • Scheduling - 어떤 job을 실행할 것인지 pick
  • Memory managemnet - 실행할 job을 메모리에 두는 방법 
  • 하나의 job run : 계속 대기 ! → 메모리에서 다른 job으로 바뀌기를 기다림 

- First big failures: 

  • MULTICS은 1963에 발표되었으나 1969까지 출시되지 않았다. 
  • IBM의 OS/360은 1000개의 알려진 버그를 가진 채로 출시되었다.

- OS의 디자인은 예술이 아닌 과학적이어야한다. 즉, 객관적이고 체계적인 방식어야한다 ! 

 

 

Phase 2 - 하드웨어의 가격은 내렸지만 사람은 비싸졌다 

 

5. Interactive timesharing 

 

- 하나의 컴퓨터에 많은 값싼 terminals들이 있다 

  • 모든 유저가 한번은 시스템과 상호작용을 한다. 
  • 디버깅이 훨씬 쉬워졌다. 

- 디스크가 값이 적게 들어 프로그램과 데이터를 온라인에 두었다

  • 1 punch card = 100bytes
  • 1MB = 10k cards
  • OS/360 was several feet of card = OS/360을 설치하기 위해 매우 많은 양의 카드가 필요해 

- New problems : 

  • Need preemptive scheduling → 적절한 반응시간을 유지하기 위해 
  • Need to avoid thrashing → 멀티프로세싱 잘한다고 일 많이 시키면 힘들어요 ㅜㅜ ~ 
  • Need to 적절한 보안 수단을 제공! 

** preemeptive scheduling (프리엠티브 스케쥴링) 운영체제에서 사용되는 스케쥴링 방식 중 하나이다.

CPU를 사용하는 프로세스가 실행 중에 있을 때, 다른 더 우선순위가 높은 프로세스가 CPU를 강제로 차지할 수 있는 스케쥴링 방식이다.  

** Thrashing 

- Success : UNIX 잘만들었다 ( Dennis Ritchie, Brain Kernighan, Ken Tompson) 

 

Phase 3 - 하드웨어는 아주 싸고 사람은 비싸다

6. Personal Computing 

  • CPU는 유용한 성능을 가졌음에도 각각의 터미널에 들어가기에 값이 싸졌다 ! 
  • 단순화와 간소화 추구 : OS를 간소화하기 위해 다중 프로그래밍(mulit programming), 동시성(concurrency), 보호(protection)에 대한 지원을 포기하고 OS를 단순화하였음  

 

현대 OS는 :

  • Enormous : 
    • Small OS = 코드 100K라인
    • Big OS = 10 M 라인 
  • 복잡성 : 100-1000명의 사람들이 1년정도 일함 
  • 이해도가 낮음 : 만든 사람들보다 더 오래되었다 = 사람이 이해하기에 너무 크다 ! 

 

현대 OS의 기능 :

  • Concurrency - 동시성 
    • 한번에 여러개의 프로세스가 돌아감
    •  프로세스끼리 소통 가능
    • 프로세스는 자원에 접근하기 위해 mutually exclusive (상호 배타적인)상태를 요구한다 - ex. running이면서 notrunning상태일 수 없음 ! 
    • CPU스케쥴링, 자원관리
  • 메모리 관리 
    : 프로세스를 디스크와 메모리 사이에서 움직이면서 프로세스에게 메모리를 할당한다. 
  • File system 
    : 프로그램과 데이터를 저장하기 위한 공간을 디스크에 할당한다 
  • 네트워크와 분산 컴퓨팅 
    : 컴퓨터들이 함께 일하는 것을 허용한다. 
  • 보안과 보호 

더 최근의 발전들 ~ : 

  • Parallel OS 
    : 다중 프로세서 시스템에서 여러개의 프로세서가 동시에 작동하도록 설계된 운영체제
    - 메모리, clock을 공유 
    - 수많은 프로세서가 하나로 꽉 묶여서 작동함 
    - 단일 운영체제 외형 : 여러개의 프로셋가 하나의 운영체제로 인식되어 하나의 운영체제처럼 보이게 되는 것  ! 
  • Distributed OS 
    : 여러 대의 컴퓨터(노드)가 네트워크로 연결되어 하나의 시스템처럼 동작하도록 설계된 OS 
    - 메모리, clock을 공유하지 않음 
    - 적은 수의 프로세서가 느슨하게 연결되어 작동함
    - 하나의 OS로 보이는 것이 이상적인 목표이지만 실제로 구현되지 않음 
    - 공유된 메모리를 시뮬레이션해 볼 수 있다.  (공유 메모리를 지원하지 않는 시스템에서도 프로세스 간에 데이터를 주고받기 위해 가상의 공유 메모리를 만들어볼 수 있다는 것을 나타낸다. )

  • Real-time OS 
    : 정해진 시간 안에 작업을 수행할 수 있도록 설계된 운영체제 
    - 데이터 처리에 있어서 hard또는 soft실시간 제약을 충족시킴 (이를 위해 Real-time OS는 정해진시간 내에 작업이 수행되도록 우선순위를 관리하고, 작업이 완료될 때까지 기다리는 대기 시간을 최소화하는 등 다양한 기술과 알고리즘을 사용함)