History of Operating Systems

vvonto·2024년 8월 7일

operating-system

목록 보기
2/2

L02

History of Operating Systems

phase 0-3

Phase 0 — hardware is a very expensive experiment; no operating systems exist

  1. One user at console
    • 한 명의 사용자가 콘솔에서 작업한다.
    • 한 번에 하나의 기능(계산, 입출력, 사용자의 생각/응답)만 처리한다.
    • 프로그램은 카드 덱을 통해 로드된다.
    • 사용자는 콘솔에서 디버깅을 한다.

Phase 1 — hardware is expensive, humans are cheap

  1. Simple batch processing: load program, run, print results, dump, repeat

    • 사용자는 작업을 운영자에게 제공하고, 운영자가 작업을 스케줄한다.
    • 메모리 관리(재배치)와 보호가 필요하다.
    • 하드웨어의 효율적인 사용이 가능해지지만, 디버깅은 더 어려워진다.
  2. Overlapped CPU & I/O operations

    • First: 빠른 테이프에 I/O 작업을 버퍼링
    • Later: 디스크에 스풀링
    • 여러 작업이 디스크에 있고 실행을 기다린다.
    I/O
    : 디스크에서 데이터를 읽거나(input) 프린터로 출력하는 작업(output)

    1) I/O 버퍼링과 장점?

    • 디스크에서 데이터를 읽어올 때, 디스크보다 빠른 테이프 드라이브에 먼저 버퍼링해두고 CPU와 메모리가 여기서 데이터를 읽는 방식
    • 디스크에서 바로 읽는 것 보다 훨씬 빨라질 수 있다.

    교수님 ver.
    새끼 CPU가 뭔데 진짜
    CPU는 혼자서 모든 일을 다 감당하기 힘들죠. 그래서 I/O 장치들 안에 작은 CPU들이 심어져 있는 거예요. 엄마 CPU가 "오늘 OS 수업 가서 열심히 들어와!"라고 지시하면, 새끼 CPU들은 "알겠습니다. 제가 버스 타고 전철 타고 가서 수업 들을게요"라며 자기 할 일을 스스로 해결하는 거죠.
    이런 식으로 엄마 CPU가 새끼 CPU들한테 작업을 떠넘기면, 엄마는 다른 중요한 일에 전념할 수 있게 되는 거예요. 이렇게 역할을 나눠서 동시에 작업하는 것을
    Overlapped CPU & I/O Operation이라고 부르는 겁니다 !!

    2) 스풀링이란?

    • 임시 저장소 역할을 해서 CPU와 메모리가 임시저장소에서 작업

    SPOOL(스풀링)은 새끼 CPU들이 일한 결과물을 엄마 CPU가 신경 쓰지 않게 임시로 저장해두는 곳 입니다. 프린터나 네트워크 작업 같은 I/O 작업 결과를 말이죠..
    엄마 CPU가 굳이 I/O 작업 과정을 지켜볼 필요 없이, SPOOL에 있는 결과만 가져다 쓰면 되니까 효율적이게 됩니다.
    그렇게 역할 분담하며 동시에 작업하면 비싼 CPU 자원을 낭비없이 효율적으로 쓸 수 있게 되는 것 입니다 !!

  3. Multiprogrammed batch systems

    • 인터랙티브 타임셰어링이 시작된다.
    • 디스크가 저렴해지면서 프로그램과 데이터를 온라인에 저장한다.

      엄마 CPU가 하나인데 어떻게 여러 프로그램을 동시에 돌릴 수 있냐?
      새끼 CPU 덕분이죠 ..

      [추가로 알아 둘 것] (나중에 나오는 개념, 매우 중요 !)
      사실 여러 프로그램을 돌리기 위해서는 다음과 같은 개념이 매우 중요합니다. 
      
      1. CPU 스캐줄링 
      여러 프로그램을 디스크에 올려두고, 그중에서 돌릴 프로그램들을 메모리에 올립니다. 
      그리고 CPU가 그 프로그램들을 번갈아가며 조금씩 실행하는 거죠.
      어떤 프로그램을 메모리에 올릴지는 스케줄링 기법에 따라 결정됩니다. 
      예를 들어 **우선순위가 높은 프로그램**부터 메모리에 올리는 식이죠.
      
      2. 메모리 관리 기법
      여러 프로그램이 메모리 영역을 겹치지 않게 적절히 배치하고 보호합니다.

      CPU가 프로그램들을 실행할 때마다 콘텍스트 스위칭을 하면서 번갈아가며 작업을 수행
      ⇒ 즉, 진짜 '동시에' 실행하는 건 아니고 CPU가 프로그램들을 매우 짧은 시간 단위로 번갈아 가며 실행하는 멀티태스킹인 셈 입니다 !!

    • 실패작 하지만 이런 멀티프로그래밍 기법이 처음 나왔을 때는 큰 실패작들이 있었다고 합니다. |
      MULTICS나 IBM OS/360 등이 1000개가 넘는 알려진 버그들을 가지고 있었다고 합니다.
      MULTICS는 교수님이 알아두라고 하셨음 !!

Phase 2 — hardware is less expensive than before, humans are expensive

  1. Interactive timesharing

    • Lots of cheap terminals, one computer
      – All users interact with system at once
      – Debugging is much easier

    1) 타임 쉐어링이란?

    • 한 대의 컴퓨터를 여러 사람이 동시에 사용하는 것을 말합니다.
    • 터미널로 접속해서 동시에 코드를 보고 실행 → 문제 고치기가 수월해짐

    내가 필요할 때만 쓰고 ~.. 내가 안쓸때는 다른 사람이 써도 된다고~

    • Disks are cheap, so put programs and data online
      – 1 punch card = 100 bytes
      – 1MB = 10K cards
      – OS/360 was several feet of cards
      디스크도 저렴해졌다고 합니다. 프로그램과 데이터를 온라인에 올려두었습니다.
      교수님 맨날 뭐 OMR 카드 하나하나.. 말씀하실것..
      아무튼 지금은 저렴해졌다는 것만 기억하면 됨
    • New problems:
      – Need preemptive(우선적인) scheduling to maintain adequate response time
      – Need to avoid thrashing (swapping programs in and out of memory too often)
      – Need to provide adequate security measures
      **preemptive, swapping 은 나중에도 나오는 중요한 용어이니 꼮꼮 기억해두도록 합시다.**
      
      
      1) Preemptive scheduling ?
      
      - 프로세스들이 너무 많아져서 Preemptive scheduling 이 필요해졌습니다.
      - 상위 프로세스가 하위프로세스를 밀쳐내고, CPU를 점거 하는 것을 의미합니다.
      
      2) swapping?
      
      - 메모리 사이즈는 정해져 있는데, 프로세스를 너무 많이 로딩하면 성능이 나빠지는 경우가 있습니다.
      - 그래서 Swapping 기법을 사용해서 필요 없는 프로세스들은 디스크로 내려보내는 것을 의미합니다.
      
      
      여기서 질문 할만할 것.
      Swapping은 누가 하나요? 
      커널이요. 뒤에나옴~
    ![](https://velog.velcdn.com/images/juhyunhan/post/b552c832-a077-4a0b-96ee-f159d049c746/image.png)

    > 메인 메모리 리소스 부족 → 멀티태스킹 성능 저하
    
    

    ![](https://velog.velcdn.com/images/juhyunhan/post/aa6a948c-8455-4da8-8a1e-b2bac98f9816/image.png)

    > Swapping
 
    
    - Success: UNIX developed at Bell Labs so a couple of computer nerds (Thompson, Ritchie) could play Star Trek on an unused PDP-7 minicomputer
        
      
        웃기지만 유닉스 개발 배경은 **Bell** Labs에서 컴퓨터 덕후 두명이 미사용 PDF-7 미니컴으로
        스타트렉 게임을 돌릴려고 만들었다는 것이 웃음 **Bell**
      
        
    

    	잠깐 중요한 개념 !!!
    	커널에 대해서 더 자세하게 배워봅시다.
   
    
    > **Kernel**
    
    **process[0] : scheduler**
    > 
    > - CPU 스케줄링을 담당하는 프로세스입니다.
    > - 어떤 프로세스가 CPU를 점유할지 결정하고 순서를 정해줍니다.
    > 
    > **process[1] : swapper**
    > 
    > - 메모리가 부족할 때 불필요한 프로세스를 디스크로 내려보내고 (swap out)
    > - 필요할 때 다시 메모리로 불러오는 (swap in) 역할을 합니다. (둘 다 자동)
    > 
    > **process[2] : paper**
    > 
    

**Phase 3 — hardware is very cheap, humans are expensive**

1. Personal computing
    - CPUs are cheap enough to put one in each terminal, yet powerful enough to be useful
    – Computers for the masses!
    - Return to simplicity; make OS simpler by getting rid of support for
    multiprogramming, concurrency, and protection
        
        ```
        CPU가 터미널 마다 하나씩 들어갈 정도로 저렴해졌다고 합니다.
        컴퓨터는 서민의 것..
        근데 좀 아이러니 한 건 OS를 단순하게 만들기 위해서 
        멀티프로세싱, 동시성, 보안 지원을 다 뺐다는 점!
        ```
        
        ```
        어플이 수행 할 때 사용하는 모드의 비율입니다.
        이거 수업시간에 질문 많이 하시니까 꼭 기억해두기
        ```
        
        > 커널 모드 : 60%
        유저 모드 : 40%
        
        근데 커널 모드에서 도는 것은 특별한 모드겠죠? 즉 여기서 down되어 버리면 os 전체가 엉망이 됩니다. 그래서 시스템 콜을 할 때 마다 모드가 바뀌게 되는데, 이 커널 모드를 들어오기 위해서는 정장에 구두 신고 들어와야 한다고 합니다.
        > 
        
        ![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/a26edb72-eed0-427c-a495-af9b4ee1776c/2d008dd0-2a80-4477-b1d5-b8c2bb54fee0/Untitled.png)
        
        ```
        **잠깐만 내가 필기하다가 약간 혼동 된 개념**
        시스템콜 vs 인터럽트
        
        시스템 콜은 프로세스가 운영체제에게 특정 서비스를 요청하는 것. 
        일 읽기/쓰기, 메모리 할당, 새 프로세스 생성 등의 작업을 운영체제에게 부탁하는 거죠. 
        이는 마치 레스토랑에서 손님이 종업원을 불러 주문을 하는 것과 같습니다. 
        
        반면 인터럽트는 하드웨어 장치나 소프트웨어가 CPU에게 "주목해주세요!"라고 말하는 것과 
        같아요. 예를 들어 키보드에서 키를 누르면, 키보드 컨트롤러가 CPU에게 인터럽트를 보내 
        "새 입력이 있어요!"라고 알리는 것 입니다! 이는 마치 손님이 식사 중에 종업원을 불러 
        "물 좀 더 주세요"라고 하는 것과 유사합니다.
        
        또한 시스템 콜은 일반적으로 동기적(synchronous)
        프로그램이 시스템 콜을 호출하면 해당 작업이 완료될 때까지 기다리는 거죠. 
        반면 인터럽트는 비동기적(asynchronous)
        인터럽트가 발생하면 CPU는 현재 작업을 중단하고 인터럽트 처리 루틴을 실행합니다.
        
        요약하면:
        - 시스템 콜: 프로세스가 OS에 서비스를 요청, 동기적, 소프트웨어가 의도적으로 호출
        - 인터럽트: 하드웨어나 소프트웨어가 CPU에 주의를 요청, 비동기적, 예측 불가능한 시점에 
                  외부 사건에 의해 트리거
        ```
        

**Modern operating systems are:**

- Enormousn
    - Small OS = 100K lines of coden
    - Big OS = 10M lines
- Complex (100-1000 person year of work)l
- Poorly understood (outlives its creators,too large for one person to comprehend

```
요즘 OS는 진짜 거대해졌습니다. 
작은 OS도 10만 줄이 넘고, 큰 OS는 무려 1000만 줄이 넘는 !!
```

History Lessons

  • None of these operating systems were particularly bad; each depended on
    tradeoffs made at that point in time
    - Technology changes drive OS changes
  • Since 1953, there has been about 9 orders of magnitude of change in almost
    every computer system component
    - Unprecedented! In past 200 years, gone from horseback (10 mph) to Concorde
    (1000 mph), only 2 orders of magnitude
    ```
    그렇다고 합니다
    ```

Modern OS Functionality (Review)

  • Concurrency
    • Multiple processes active at once
    • Processes can communicate
    • Processes may require mutuallyexclusive access to some resource
    • CPU scheduling, resource management

      OS의 목표 → 효율 → 멀티태스킹
      but, 충돌이 발생할 수 있음 !!
      엄마 CPU는 하나인데, 새끼 CPU를 최대로 사용하려하니 충돌이 발생
      (리소스 공유)

      그럼 이를 해결하기 위한 방법은?
      ”멀티 태스킹을 포기하자”
      → Serialization으로, 한 순간에 하나만 돌리도록 하면 된다.
      간단하네요..

  • Memory management — allocate memory to processes, move processes between disk and memory
    메모리 관리는 OS의 중요한 역할 중 하나 입니다 !
    위에 배운 Swapping개념을 꼭 익혀두도록 합시다.
  • File system — allocate space for storage of programs and data on disk
  • Networks and distributed computing — allow computers to work together
  • Security & protection

More Recent Developments

  • Parallel operating systems
    • Shared memory, shared clock

    • Large number of tightly-coupled processors

    • Appearance of single operating system

      병렬 OS는 공유 메모리와 공유 시계를 사용합니다. 
      엄청 많은 프로세서들이 서로 밀접하게 연결 되어 있는데, 마치 하나의 OS 처럼 보이는 것 입니다.
  • Distributed operating systems
    • No shared memory, no shared clock

    • Small number of loosely-coupled processors

    • Appearance of single operating system is
      ideal goal, but not realized in practice

    • May try to simulate a shared memory

      반면 분산 OS는??!!
      공유 메모리도, 공유 시계도 없는 것 입니다. 
      프로세서들이 멀~찍이 떨어져서 느슨하게 연결되어있습니다. 
      이것도 하나의 OS처럼 보이는 것이 이상적이지만, 현실은 그렇지 못한다고 합니다. 
      그래서 가짜로라도 공유 메모리를 만들어 보려 try 중 이라고 하네요.

      병령 컴퓨터와 분산 컴퓨터의 차이?
      : Shared Memory!!

  • Real-time operating systems
    • Meet hard / soft real-time constraints on processing of data

      real-time constraints = dead line
      즉 실시간 os는 데이터 처리에 대한 엄격한 시간제약을 지켜야 합니다.

      비행기나 로켓 같은 경우, 언젠가 끝나면 되는것이 아니라 !!
      정해진 시간 안에 계산이 끝나야 합니다.
      근데..CPU가 감당할 수 있는 일이 너무 많으면 어떻게 데드라인을 지킬까요?
      그래서 애초에 CPU한테 맡길 수 있는 작업의 개수를 정해둔다고 합니다 ~

0개의 댓글