[OS] OS의 서론, 역사, 인터럽트 기반 시스템

2020. 4. 7. 17:47Programming/CS

운영체제란?

운영체제는 User와 H/W간의 인터페이스로서 동작하는 시스템 소프트웨어의 일종으로,
OS는 file, 즉 HDD에 저장되어있는 instruction들의 집합체인 program을 RAM(메인메모리)로 올리는 역할을 하는 여러 프로그램의 모임이다.
그래서 OS가 없다면 저 프로그램(실행파일로 구성됨)을 실행 할 수 없다.

운영체제가 없다면, 프로그램이 없을테니 메모리에는 쓰레기값만 가득할 것이다.

 

운영체제의 목적

가장 큰 목적은 컴퓨터 하드웨어(프로세서, mem, disk, network...)들을 잘 관리하여 성능향상을 하는 것에 있다. 또한 운영체제가 존재하기 떄문에 사용자가 마음대로 H/W를 관리하고, 편리하게 사용할 수 있다.

  1. 성능 향상
  2. User에게 편의성 제공
  3. H/W를 관리하는 프로그램(control program for computer)

 

부팅(Booting)

컴퓨터의 구조를 보자. HDD에 OS와 IE, word 등의 다양한 프로그램 파일들이 저장되어있고, RAM(mainMEM)에는 프로세서로 가져갈 프로그램들(instruction들의 집합), ROM에는 부팅하는데에 필요한 명령들이 저장되어있다.

부팅하는 순간을 예로 들어보자.

  1. power ON -> ROM에 접근해 POST(Power-On Self-Test) instruction이 부트로더를 실행시킨다.
  2. Booting : Boot loader가 실행되고, HDD를 뒤져 여기까지가 ROM의 역할
  3. OS가 저장된 위치를 찾아 OS를 메인메모리로 가져온다.
  4. 이제 OS는 power OFF 가 될 떄 까지 항상 RAM에 적재(resident)되어있는 상태로
  5. 하드디스크에서 사용자가 프로그램 실행을 요청하면 해당 프로그램을 불러와 실행시키고, HW와 USER를 매개해주는 인터페이스의 역할을한다.

우리가 흔히 컴퓨터를 부탕한다고 말 하는 것은, 위의 2번의 과정을 말한다.

그래서 ROM은 최초 power ON시까지만 필요하고, 그 이후는 모두 OS가 제어하다 power OFF시에 메인메모리에서 OS가 사라진다.

 

OS = kernel + shell(=command interpreter)

OS = 커널과 명령해석기의 역할을 한다. 현재까지의 컴퓨터 구조를 표현한 것과는 조금 다르게 그림을 그려보면, 이렇게 표현이 가능하다.

그래서 OS는 kernal(실제로 cpu, mem등의 hw를 관리하는 부분) + shell(User의 명령 해석(interpreter) -> 실행(execution)해 보여주기) 의 역할을 한다고 볼 수 있다.

  • OS에서 HW를 관리하는 부분: kernal
  • OS에서 Application 매개 : shell == command interpreter
    • Text 명령 방식 : ex. Linux $ls, $who ...
    • Graphic 명령 방식 : ex. Windows ...

그래서 OS에서는 kernal쪽을 위주로 배우게 되고, 각각 OS의 프로세서관리, MEM관리, network관리... 등으로 담당 관리 부분에 대해 심층적으로 배우게된다

 

 


운영체제의 역사

1. No OS

이전에는 현재의 프로그래밍 환경과 달리 모든 작업을 한꺼번에 처리해야하고, 프로그램 실행 중간에 사용자가 데이터를 입력, 수정이 불가능한 일괄 작업(처리) 시스템(batch job system)이었다.

다시말해, operator라는 직업이 직접 물리세계에서 카드리더기를 만들어 -> 천공카드리더가 프로그램 및 데이터 입력 -> 메모리의 User영역에서 compile하여 -> 라인컴퓨터로 출력 하는 시스템이었다는 뜻이다.

☹️ 그래서 너무 번거롭다. 이 compile, link, load과정을 일괄적으로 처리시키자! 하여 고안한 것이 최초의 OS,

2. Batch processing system(일괄처리시스템)

이다. 이는 항상 메모리에 resident (상주)하고있다고 하여 resident monitor이라고도 한다.

이렇게 메모리에 OS program, User program이 들어갈 수 있는 공간들을 하나씩 두는 드디어 OS의 초기 모습이 나타난다. 그리고 하드웨어의 출시에 따라, 이제는 cpu외에도 I/O 장치들이 등장했다. 하지만 이것이 문제가 된다.

☹️
간단한 계산의 경우를 예를 들어보면, cpu와 HDD에 접근을 반복하며 처리를 수백만 번 하다보면 cpu -> I/O(||HDD 등의 hw) -> cpu -> I/O(||HDD 등의 hw) ... 의 무수한 반복이 진행된다.

이부분에서는 하드웨어중에서, for문 돈 후 출력을 표현하기 위해 I/O로 표현하였다

하지만 메모리에 User program이 사용할 수 있는 공간은 한개이기 때문에, I/O가 메모리를 사용하는 동안(일처리하는중..)은 cpu는 Idle상태(놀고있는 상태) 가 된다. 기본적으로 I/O가 cpu보다 훨씬 느리므로 크게 성능이 낭비된다.

그래서! User Program Section을 여러개로 나눠 할당 하자. 며 나온 것이

3. Multi programming system

이다. 이 multi programming system의 등장으로 인해 처리해야 할 다양한 문제들이 발생하는데,

  • CPU scheduling
    : 123, 213을 처리하는 순서가 다름 등의 문제 해결
  • Memory 관리
    : User program의 위치를 어떻게 둘것인지
  • Exception
  • New Program의 위치
  • Protect(보호)
    : p1, p2, p3의 영역을 서로 보호하며 다중처리가 이루어져야함

등의 문제가 존재한다. OS에서는 이것들을 처리하는 how? 에 대하여 배우게된다.

☹️ 멀티 프로그래밍 시스템 또한 한계가 존재하는데, 컴퓨터의 값은 너무나 비쌌고 모니터나 키보드 등의 I/O장치가 등장함에 따라 하나의 컴퓨터를 n개의 단말기(terminal == I/O만 있는 형태)가 공유하여 사용했다. 그래서 User1이 처리를 하고있다면, User2, 3, ...n 은 기다려야만 했다.

그래서, 컴퓨터 한대를 여러명이 동시처럼 사용할 수 있는 방법은 없을까? 하여 고안한 것이 바로

4. TSS(Time Sharing System) 이다.

이는 말 그대로 시간을 공유하여 사용하는 방식으로, 1/100초를 순서대로 user1, user2, ...userN명이 사용할 수 있도록 나눈 것이다. 그래서 user1의 프로세스가 끝나지 않았음에도 불구하고 바로 2로, ,, 이렇게 매우 짧은 시간 1/100초동안 일처리를 하다보면 거의 동시에 일을 하는 것처럼 보인다. 그래서 대화형 system이 가능해졌다고도 한다.

이후 user1, user2,, 을 순서대로 놓지 않고, 더 빨리 일처리를 할 수 있는 user의 업무를 먼저 해내자! 하는 synchronize(동기)에 대해 배우게된다.

☹️ 하지만 이 n이 너무 커지게 되면, 메모리가 부족하게 되는데, 그에대한 solution으로 HDD를 메모리처럼 사용하는 VM(Virtual Memory)의 개념이 등장하게되었다.

 

그래서 정리해보면,

  1. No OS : operator직업이 존재 -> card reader -> compile > ...
  2. Batch processing system(일괄처리) : (RAM) resident monitor
    --- HDD출시! ---
  3. Multiprogramming system(다중 프로그래밍)
    --- 모니터, 키보드(I/O) 출시! (interactive. 대화가 가능해짐)---
  4. TSS(Time-Sharing system, 시공유 시스템) : VM, Process간 통신, Synchronization(user1, us2, ... 동기화)

이 네트워크 기반 생태계 이전의 OS 의 역사에 대한 이야기이다.

 

5. 분산 시스템

70년대 후반, 매킨토시, MS-DOS를 비롯한 운영체제와 인터넷(TCP/IP, LAN)등이 보급되면서 컴퓨터를 개인용으로 보급이 가능했다. 그래서 복잡하거나 많은 양의 데이터를 처리하기위한 메인프레임이라는 대형 컴퓨터의 성능에 맞먹기위해 값이 싸고 작은 개인용 컴퓨터를 하나로 묶어 작업을 처리했는데, 이 시스템을 분산 시스템(distributed system) 이라고 한다.

6. client-server system

분산시스템은 시스템에 참여하는 모든 컴퓨터가 같은 지위를 갖기 때문에 고장이나 추가시 작업 분배가 번거로웠다. 그래서 request-response의 개념을 도입하기위해 고안한 시스템이 client-server 시스템이다.

이 구조는 특히나 web system 이 보급되면서 크게 와닿는 시스템구조로, 네트워크를 타고 TCP/IP 프로토콜에 기반하여 web의경우 http.. 등의 통신을 한다.

이 다발적인 req를 처리하는 작업을 데몬(daemon) 이 담당하는데, 이 데몬을 가진 컴퓨터를 서버라고 부른다. 데몬의 종류별로 web / FTP / e-mail... 등 용도에 따라 다른 서버가 된다.

7. P2P 시스템

네트워크의 발전으로 인해 파일의 크기가 커도 전송이 가능해졌다. 그에 따라 많은 미디어파일(MB s)들은 웹페이지(KB s)보다 용량이 매우 크기 때문에 서버의 부하를 줄일 수 있는 새로운 시스템으로 Peer-to-Peer system을 고안했다.

이는 흔히 알고있는 토렌트와같은 시스템으로, 사용자간 파일전송이 이루어지고 서버는 파일소유자의 검색/사용자 인증 등을 담당하여 서버의 부하가 적다는 것이 큰 장점이다.

기타 컴퓨팅 환경

  1. 그리드 컴퓨팅(grid computing)
    : 하드웨어적인 컴퓨팅 환경의 통합이다. 바로 예를 들어보면, user1이 웹하드에서 파일을 내려받으려고 하면 서버에서 파일을 주는것이 아니라, 해당 파일을 과거에 다운받았던 user2의 컴퓨터에서 데이터를 몰래 빼와 전달한다. 그래서 일부 웹하드 서비스 업체에서는 무료로 이용권을 나누어주면서, 사용자들의 hw를 사용하며 몰래 delivery하곤한다.

  2. 클라우드 컴퓨팅
    : 하드웨어를 포함한 시스템이 사용자에게 cloud에 가려 사용자에게 보이지 않도록 하는 컴퓨팅환경이라는 뜻으로, 서버관리와 네트워크 관리를 클라우드 서버 제공자가 알아서 해주기 때문에 굉장히 편리하다.

    • SaaS(Sofrware as a Service)
      : 사용자가 소프트웨어 기능을 이용한만큼 비용을 지불하는 것이다. 예를들어 google drive, Web Office 365 등의 클라우드 파일 스토리지를 말한다.
    • IaaS(Infrastructure as a Service)
      : 서드파티 업체가 제공하는 자동화되고, 확장 가능한 it인프라를 말한다. 이 인프라에는 스토리지, 호스팅, 컴퓨팅, 네트워킹 등이 포함되며 비용은 사용한 만큼 지급한다. 가장 유명한 것이 aws의 cloud platform 서비스이다.
    • PaaS(Platform as a Service)
      : 기본 IaaS는 물론 개발툴, 기능, 애플리케이션 배포 등을 안전하게 제공하는 것이다. 미들웨어, db관리, 애널리틱스, 운영체제 등이 포함된다. PaaS를 사용하면 개발자는 기반 인프라스트럭처를 프로비저닝(provisioning, 사용자의 요구에 맞게 시스템자원을 할당, 배치, 배포해두었다가 필요시 바로 사용할수있도록 준비해두는 것).
      예를 들어 google App Engine, Oracle Cloud Platform, Heroku 등이 있다.
  3. 사물인터넷(IoT)

컴퓨터의 규모별 분류

1980년대 이전에는, 사용자수 N이 얼마나 큰지에 따라 supercomputer > mainframe(000) > mini(00) > micro 로 나누게 되었다.

그러나 그 이후 네트워크를 기반으로 하면서 얼마나 많은 PC가 필요한지에 따라 규모를 구분하게 되었다.

supercomputer > server > workstation > PC > handheld(smartphone, notebook) > embeded

으로 구분하곤 한다.


고등 운영체제, 인터럽트 기반 운영체제

고등 운영체제

하나의 작업을 처리하기 위해서, cpu를 여러개를 두어 처리를 한다. 하지만 그 cpu/mem의 구조에 따라 시스템/OS 가 다르다. 여기서 핵심은, 메모리에 여러개의 프로세서를 적재시켜 작업을 처리하는데 cpu, mem의 구조가 어떻게 되느냐에 따라 시스템의 종류를 나눈다.

  1. 다중 프로세서 시스템 (Multiprocessor) : cpu N개, mem 1개

    • 병렬 시스템(parallel) : cpu N개가 병렬

    • 이때 MEM 1개를 cpu N개가 공유하므로 tightly-coupled system이라고도 함

    • 이때의 OS를 multiprocessor OS 라고 함

    • 장점

      • performance(cpu계산하는데 여러개 있으면 한번에 더 많은 계산가능)
      • cost : 컴퓨터를 여러대 두는거보다 하나에 프로세서(cpu) 여러개 두는게 더 경제적 고성능하나보다 저성능여러개가더경제적
      • reliability : cpu 하나가 고장나더라도 다른 cpu가 동작할수있어서 신뢰도 ㄱㅊ
  2. 분산 시스템 (Distributed)

    • multi-computer : LAN으로 연결된 (cpu - MEM)*N개 의 컴퓨터
    • 이때의 각각의 (cpu - MEM)*N 개가 LAN으로 연결되어있으므로 loosely-coupled system이라고도 함
    • 각각의 (cpu - MEM)은 하나의 일을 나누어서 처리하는 것이므로, 서로간 통신이 가능해야함. 이떄의 OS를 distributed OS 라고 함
  3. 실시간 시스템 (Real-time)
    이는 위 2가지와 목적이 살짝 다르다
    리얼타임 : 어떤 프로그램이 정해진 시간 내에 작업이 끝나야 하는 시스템

    • 시간제약이 주어진 시스템
    • FA(공장 자동화), 군사, 항공, 우주 등에 사용됨
    • real-time OS(RTOS) 라고 함

 

인터럽트 기반 시스템

현대의 OS는 인터럽트 기반 시스템이다. 그 순서대로 한번 보자.

20m

  1. 부팅
  2. 부팅이 끝나면, OS는 MEM에 resident 하며 event를 기다리면서 대기중...
  3. event 발생 : ex. 마우스-아이콘 더블클릭
  4. H/W 인터럽트(전기신호) 실행
  5. 인터럽트 결과 OS내에서 ISR(Interrupt Service Routine)실행 ex. 마우스 인터럽트 서비스 루틴(ex. hwp를 눌렀을경우 OS 내 HDD읽어오는 코드가 hwp HDD에서 찾아옴)
  6. ISR(Interrupt Service Routine)종료 후 다시 대기 (하면서 RAM 으로 프로그램 올림)

H/W인터럽트 외에 S/W 인터럽트도 존재한다. 사실상, 인터럽트의 개념은 과거 CPU가 모든 입출력에 관여하면 (polling. 폴링 방식 사용할 경우) 작업효율이 현저하게 떨어진다는 문제를 해결하기 위해 처음 고안되었다.

add, lw ... 들이 있지만 int(인터럽트! OS 중지시켜라)하는 명령어도 존재했음. 이 int 명령어같이 외부적으로 멈추게 하는 전기신호가 오지는 않지만, SW로 멈추는 처리를 해둔 것을 S/W 인터럽트라고 말한다.

이 또한 ISR종료 후 다시 User Program으로 돌아간다.

 

인터럽트 기반 운영체제란?

평소에는 OS가 대기상태로 있다가

  • HW인터럽트에 의해 ISR(OS내 Interrupt ServiceRoutine) 코드가 실행
  • SW인터럽트에 의해 ISR 코드 실행
  • 내부인터럽트에 의해 ISR실행
    ex. 5/0 = infinite.. 이 값을 저장할 수 없다. 그래서 이 때 실행이 불가능함. 이러한 사건이 일어나면 내부적으로 인터럽트가 일어났다고 판단하여 OS내에있는 divide by 0 코드를 실행시켜 -> 프로그램 종료(등의 exception 처리)시킨다.

ISR가 종료되면 원래의 대기상태 또는 User Program으로 복귀한다.

이처럼 우리가 사용하는 OS는 모두 인터럽트 기반 운영체제이다. User Program과 OS 내의 코드(ISR)가 반복 번갈아가며 memory에서 실행된다.