Computer Science/OS

🦖공룡책 운영체제 - 1

sgwon 2022. 6. 26. 15:38

🦖Chapter 1

  • 운영체제는 무엇을 하는가
  • 컴퓨터 시스템의 Organization
  • 컴퓨터 시스템의 Architecture
  • 운영체제의 Operations
  • 자원 관리
  • 보안과 보호
  • 가상화
  • 분산 시스템
  • 커널 데이터 구조
  • 컴퓨팅 환경

🦕 운영체제는 무엇을 하는가?

Abstract View of Components of Computer

운영체제는 사용자와 컴퓨터의 관점에서 각각 다른 일을 한다.

  • 사용자 관점 - 편리성과 편의성, 그리고 좋은 퍼포먼스에 중심을 맞춘 일을 한다.
  • 컴퓨터 관점 - 유저프로그램과 하드웨어 사용의 최적화를 위해 프로그램을 컨트롤 하고 자원을 할당해주는 역할을 한다.

각 기기에 따라 특징이 있다.

  • 워크스테이션 - 전용 자원이 있지만, 서버를 이용하여 공유 자원을 자주 사용한다.
  • 모바일 기기 - 핸드폰과 타블렛 같은 모바일 기기는 사용성과 베터리의 최적화를 위해 자원을 적게 사용하도록 되어있다.
  • 임베디드 컴퓨터 - 주로 전자기기 내부에 들어간 컴퓨터는 유저인터페이스가 매우 미미하거나 없다.

 

운영체제의 정의는 따로 정해져 있지 않다. 다만 정의 한다면 벤더(vender)가 제공하는 모든 실행시스템을 운영체제라고 말할 수 있다.

 

커널은 운영체제의 일부분으로, 컴퓨터가 켜져있는 동안 계속 실행되는 프로그램이다.

 

프로그램은 세 가지로 나눌 수 있다.

  • 시스템프로그램 - 운영체제와 함께 실행되지만, 커널은 아닌 프로그램
  • 어플리케이션 프로그램 - 운영체제와는 관련없는 모든 프로그램
  • 미들웨어 - 개발자들에게 추가적인 서비스로 제공되는 프로그램으로 시스템프로그램도, 어플리케이션 프로그램도 아닌 하나의 프레임워크 ex) 데이터베이스, 멀티미디어, 그래픽

🦕 컴퓨터 시스템의 Organization

하나 이상의 CPU, 디바이스 컨트롤러는 보통 버스를 통해서 공유된 메모리에 접근한다.

CPU와 다른 디바이스들이 동시간에 메모리에 접근을 하게 될 경우 경쟁이 발생한다.


🦕 컴퓨터 시스템의 Operation

  • I/O 장치와 CPU는 시분할 처리를 통해서 동시에 실행되는 것 처럼 실행된다.
  • 각각의 디바이스 컨트롤러는 로컬 버퍼를 가지고 있고, 안의 데이터를 다루기 위한 디바이스 드라이버가 있다.
  • CPU는 데이터를 메인메모리에서 로컬버퍼로, 로컬버퍼에서 메인메모리로 이동시킨다.
  • 이때 I/O는 디바이스 컨트롤러의 로컬버퍼로부터 일어난다.
  • 그리고 디바이스컨트롤러와 CPU는 인터럽트를 통해서 통신이 이루어 진다.

인터럽트(interrupt)

  • 인터럽트는 보통 모든 서비스루틴의 주소를 가진 인터럽트 벡터를 통해 인터럽트 서비스 루틴으로 컨트롤을 전송한다.
  • 인터럽트 아키텍쳐는 반드시 인터럽트로 인해 중단된 명령어의 주소를 저장해야 한다.
  • 소프트웨어에 의해 생성된 인터럽트는 보통 에러나 유저의 요청으로 일어나는데, 트랩(trap) 혹은 익셉션(exception)이라고 한다.
  • 운영체제는 Interrupt driven으로 인터럽트에 의해 운영체제가 돌아간다.

인터럽트 타임라인

이렇게 써놓으면 이해 하기가 쉽지 않다. 예시를 하나 들어보자. 

  1. 우리 컴퓨터로 영화를 보고 있다고 생각하자. 그러면 CPU는 동영상에 대한 일을 하고 있을 것이다.
  2. 여기서 우리가 마우스를 움직인다면, CPU는 마우스(I/O device)에 의해 동영상의 버퍼링 작업을 그만둔다.(interrupt)
  3. 인터럽트를 발생시킨 장치를 찾아내고, 그 장치가 요청한 일을 수행하는 코드를 실행한다. (interrupt service routine)
  4. 작업이 완료되면 CPU는 하고 있던 동영상의 버퍼링 작업을 이어서 수행한다.

간단하게 쓰면 이렇게 되지만, 사실 더 복잡하다.

사용자의 관점에서는 단순히 마우스를 움직이기만 하면 되지만 컴퓨터의 입장에서는

영화재생을 처리중인 CPU가 중간에 작업을 저장하고, 중단하여, 인터럽트를 발생시킨 장치를 찾고, 장치가 요청한 작업을 수행하는데,

작업의 결과로 움직인 마우스와 실행중인 동영상을 배경화면에 어떻게 입체적으로 묘사할 것인가. 이와 같이 컴퓨터는 여러 일을 동시에 수행해야한다. 이렇게 하던 일을 중단시키고 다른 일을 함으로 써 많은 일을 동시에 수행할 수 있게 해주는 수단이 인터럽트인 것이다.

이것으로 우리는 interrupt-driven computer에서 일어나는 모든 현상을 인터럽트로 설명할 수 있다.

 

인터럽트 서비스루틴이 실행될 때 CPU는 인터럽트벡터테이블에서 어느 장치에서 인터럽트가 발생했는지 찾는다.

[인터럽트 벡터 테이블 - 여러개의 장치중에서 어떤것이 인터럽트가 일어났는지알려주는 테이블, 벡터안에 실행시켜야 하는 코드의 주소가 저장되어있다.]

 

Interrupt Handling

컴퓨터 내부의 모든 실행정보는 레지스터에 저장되어 있다.

인터럽트가 발생할 경우 CPU는 프로그램카운터(PC, 레지스터의 일종)와 레지스터를 사용한다.

인터럽트에 의해 중단된 프로세스는 레지스터에 저장된다. 인터럽트가 발생할 경우 두 가지의 방식을 사용한다.

  • polled interrupt system - 찾기
  • vectored inttrupt system - 기다림

인터럽트는 선별적으로 받을 수 없는 치명적인 오류인 Nonmaskable Interrupt와 그와 반대되는 Maskable Interrupt가 있다.

인터럽트는 아주 종류가 많은데 각 인터럽트 벡터의 요소들이 내부에서 계층구조를 가짐으로써 정리되어 있는 형태를 Interrupt chaining이라고 하고, 운영체제에서는 이런 각각의 인터럽트들에게 중요도에 따라 우선순위를 매기는데, 이 우선순위를 Interrupt Proirity Level이라고 하고, 높은 우선순위의 인터럽트로 실행중인 작업에 대하여 비교적 낮은 순위의 인터럽트는 작업에 영향을 끼칠 수 없다.

 

Interrupt-drive I/O Cycle

그림의 sensing은 코드가 아닌 회로로 인해 일어난다.

 

저장소 구조 (Storage Structure)

  • 메인메모리 - CPU가 직접적으로 접근가능한 큰 저장소
    • 랜덤 엑세스 메모리(Random-access Memory, RAM)
    • 휘발성(Volatile)
    • 보통 랜덤 엑세스 중에서 동적랜덤엑세스(Dynamic Randome-access Memory, DRAM) 메모리다.
  • Secondary stroage - 비휘발성의 많은 저장공간을 가진 메인메모리에서 확장된 저장소
    • 하드디스크, Hard Disk Drives(HDD) 자성을 띤 물질로 이루어진 넓은 판(트랙과 섹터로 구분됨)에 저장하는 장치로, 장치와 컴퓨터 사이에서 상호작용하는 디스크 컨트롤러가 있다.
    • 비휘발성 메모리, Non-volatile Memory(NVM) 하드디스크보다 빠르고, 비휘발성이다. 점점 기술이 발전하고 퍼포먼스가 향상됨에 따라 가격이 내려가고 있다.

 

Storage Hierarchy

  • storage system은 hierarchy(계층적)으로 이루어져 있다.
    • 속도(speed)
    • 비용(cost)
    • 변동성(volatility)
  • Caching - 정보를 더 빠른 저장소 시스템으로 복사하는 것, 메인메모리는 secondary storage의 캐시로 볼 수 있다.
  • Device Driver - I/O 장치를 관리하기 위한 각각의 디바이스 컨트롤러와 커널사이에서 통합된 인터페이스(Uniform Interface)를 제공한다.

폰노이만 구조의 컴퓨터

현대의 컴퓨터는 위 그림의 방식으로 작동한다.

디바이스와 CPU간의 인터럽트와, 데이터통신, 입출력 요청이 이루어지고,

메모리와 CPU간에 데이터 이동과 명령어 실행이 이루어진다. 배운대로라면 디바이스와 메모리간의 데이터 이동이 일어날 경우, 반드시 CPU를 거쳐야 하는데, 그림을 보면 DMA를 통해서 CPU를 거치지 않고 장치와 메모리간의 데이터 이동이 이루어 진다.

그렇다면 DMA는 무엇인가?

 

DMA, Direct Memory Access 

·        디바이스에서 들어오는 많은양의 데이터를 한번에 cpu 거치지않고 메모리에 직접 보내서 하나의 인터럽트로 해결하는

          이 하나의 인터럽트는 블락단위로 생성된다. (보통의 인터럽트는 바이트단위를 가짐)

 

Computer-System Architecture

  • 예전 대부분의 시스템은 single general-purpose 프로세서를 사용했다.
    • 또한 대부분의 시스템은 special-purpose 프로세서도 사용하는데 예로 GPU가 있다.
  • 멀티프로세서 시스템
    • parallel systems과 tightly-coupled systems로 알려져있다.(tightly-coupled : 버스로 연결된, ring결합 ↔ losely-coupled : 네트워크로 연결된, non-ring결합)
    • 세 가지 장점이 있다.
      1. Increased throughput : 처리량 증가
      2. Economy of scale : 단일 프로세서 여러 대 보다 사용면적 면에서 경제적
      3. Increased reliability : 성능저하나 내부 결함에 대해서 단일 프로세서보다 높은 신뢰성
    • 두 가지 타입이 있다.
      1. 대칭형 멀티프로세싱(Asymmetric Multiprocessing)모든 프로세스들이 각각 특정일을 수행하는 것.
      2. 비대칭형 멀티프로세싱(Symmetric Multiprocessing)모든 프로세스들이 기능면에서 같은일을 수행하는 것.

비대칭형 멀티프로세싱 아키텍쳐
듀얼 코어 시스템

 

 

누마시스템, Non-Uniform Memory Access System

CPU 독립된 메모리를 가지고 있는 시스템으로, CPU1이 다른 CPU의 메모리에 접근을 하고 싶다면 해당 CPU에 요청을 해야한다. 이는 비효율적인 구조이다.

 

 

Clustered System

멀티프로세서 시스템처럼 여러개의 시스템이 함께 묶여있는 시스템 구조

  • 보통 Storage-area network(SAN)을 통해 스토리지를 공유한다.
  • 높은 가용성을 가지고 있다.
    • 대칭형(Asymmentric) 클러스터링핫-스탠바이 모드(hot-standby mode)인 하나의 기기를 가지고 있다. (축구에서의 주장역할)
    • 비대칭형(Symmentric) 클러스터링은 모두 같은 권한을 가지고 서로를 모니터링하며 어플리케이션을 실행하는 노드를 여러개 가지고 있다.
  • 몇몇 클러스터 시스템은 어플리케이션을 병렬실행 함으로써 HPC(high-performance computing)을 지원한다.
  • 클러스터 시스템으로 이어진 컴퓨터들은 보통 가까이 연결되어 있다.
  • 컴퓨터들이 각각 실행하는 중에 공유메모리에 대한 충돌을 방지하고자 DLM(distributed lock manager)를 가지고 있는 클러스터 시스템도 있다.

🦕 운영체제의 Operations

1. Bootstrap program(부트스트랩)

시스템을 시작하는데 최소로 필요한 작은 코드이며 커널이 포함된 부트블락을 로드한다.

2. Kernel loads

3. Starts system daemons

커널의 외부에서 서비스를 제공하는 24시간 돌아가는 시스템이다.

4. Kernel interrupt driven (hardware and software)

  • Hardware Interrupt - 디바이스중 하나에 의해 인터럽트가 일어난다.
  • Software Interrupt
    • 소프트웨어 에러 (ex. division by zero)
    • 시스템 콜 - OS서비스에 대한 요청
    • 어떤 프로세스가 무한루프이거나, 프로세스간 서로나, OS의 영역을 침범할 때

멀티프로그래밍(Multiprogramming)과 멀티태스킹(Multitasking)

멀티프로그램 시스템의 메모리 형태

  • 멀티프로그래밍(배치 시스템, Batch system)
    • 큰 병원에서 여러 환자를 보는 것 과 유사함
    • 멀티프로그래밍으로 CPU가 항상 하나의 job(코드나 데이터)을 수행하도록 조직화함
    • 시스템 상의 모든 작업들은 메모리안에 보존됨
    • job 스케쥴링(scheduling)을 통해 실행할 하나의 job을 선택함
    • 실행중에 기다려야 할 때(I/O입출력)가 있을 경우, 운영체제가 다른 job으로 switch한다.
  • 타임쉐어링(멀티태스킹, Timesharing)
    • CPU가 여러 일을 동시에 하는 것 처럼 보이지만 위의 첫 번째 줄의 관점에서 생각해보면 하나의 의사가 여러명의 환자를 진료할 순 없으므로 멀티프로그래밍과는 다른 개념이다.
    • CPU가 job을 switch를 굉장히 빠른 속도로 하여 마치 사용자의 입장에서 봤을 때, 동시에 여러 일을 수행하는 것 처럼 보임
    • 응답시간(response time)은 1초 미만이어야 한다.
    • 각 유저는 메모리에서 실행 중인 최소 하나의 프로그램을 가지고 있다. → 프로세스
    • 만약 여러개의 job들이 동시에 실행 되기를 기다린다면, CPU scheduling을 통해서 순차적으로 실행한다.
    • 만약 프로세스가 메모리에 들어갈 공간이 없다면, swapping을 하고 실행한다.
    • 하지만 가상메모리(virtual memory)를 이용하면, 프로세스가 완전히 메모리에 들어가 있지 않아도 실행할 수 있다.

🦕 자원관리

 


🦕 보안과 보호


🦕 가상화


🦕 분산 시스템


🦕 커널 데이터 구조


🦕 컴퓨팅 환경