[운영체제] 1.운영체제(OperatingSystem) 소개

2021. 12. 16. 12:13OperatingSystem

1. 운영체제(OperatingSystem) 소개

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

운영체제는 응용 프로그램(Application Programs)과 하드웨어(Hardware) 사이에 위치합니다. 그래서 사용자가 응용 프로그램을 통해서 어떤 서비스를 요청하면 응용 프로그램은 운영체제에게 메시지를 전달하고 하드웨어를 조작해달라고 요청합니다. 그 전달을 받은 운영체제는 서비스에 맞는 하드웨어(CPU, 메모리, HDD, 모니터 등)를 작동시켜 서비스를 완수합니다. 

 

예를 들어 사용자가 계산기라는 응용 프로그램을 사용한다고 가정합니다. 사용자가 "3+4"에 대한 결과를 요청합니다. 이 요청을 받은 계산기는 프로그램내에서 수식을 계산하는 명령어를 운영체제에게 전달합니다. 운영체제는 CPU, 메모리 등의 하드웨어를 조작하여 7이라는 답을 도출하고 반환합니다.

 

위와 같은 예시를 통하여 운영체제를 한문장으로 정리하면 운영체제는 하드웨어를 제어하는 소프트웨어이고 유저와 하드웨어 사이에서 중계자로써 응용 프로그램의 서비스를 제공하는 소프트웨어입니다.

 

위의 그림은 컴퓨터 시스템의 구성의 추상적인 화면입니다.  컴퓨터를 사용하는 유저는 컴파일러나 메모장과 같은 응용 프로그램을 이용하는 것을 볼 수 있습니다. 그리고 사용자가 응용 프로그램에 서비스를 요청하면 운영체제는 요청에 따른 동작을 하드웨어를 제어해서 수행하게 하는 것입니다.

 

운영체제의 정의

운영체제를 한문장으로 정의하면 다음과 같이 표현할 수 있습니다.

  • 컴퓨터 위에서 항상 실행되는 하나의 프로그램
  • Kernel로도 정의
  • 하드웨어를 제어하는 소프트웨어
  • 응용 프로그램과 하드웨어 사이의 중계자

 

 

1.2 컴퓨터 시스템의 구성(Computer-System Organization)

클래식한 컴퓨터 시스템

위의 그림은 클래식한 컴퓨터 시스템을 보여줍니다. 1개 이상의 CPU로 구성되었고 버스(Bus)를 통해서 연결된 기기 제어기(Device Controller)로 연결되었습니다. CPU는 메모리에 명령어들을 저장하고 기기 제어기를 통해서 하드웨어적인 작업을 수행합니다.

 

bootstrap 프로그램이란 무엇인가?

bootstrap 프로그램이란 컴퓨터 전력이 들어오자마자 제일 처음에 수행되는 프로그램입니다. bootstrap 프로그램을 수행하면 디스크에 저장되어 있는 bootstrap loader를 CPU가 실행하여 디스크에 저장되어 있는 운영체제를 메모리에 복사하여 올립니다. 즉, 다시 bootstrap 프로그램을 정의하면 운영체제를 메모리에 적재(load)하는 프로그램입니다.

 

컴퓨터의 부팅과정

https://yonghwankim-dev.tistory.com/188

 

[운영체제] 컴퓨터가 부팅하는 과정

개요 이번글에서는 컴퓨터가 부팅하는 과정을 소개합니다. 1. 컴퓨터의 부팅(booting) 과정 step1. 컴퓨터의 전원버튼을 누르면 메인보드에 전원이 들어옵니다. 메인보드에 부착된 장치들(CPU, ROM, RAM

yonghwankim-dev.tistory.com

위의 컴퓨터의 부팅과정을 게시물을 따로 작성하여 올려두었습니다. 컴퓨터가 부팅하는 자세한 과정이 궁금하시다면 참고해주시면 감사하겠습니다.

 

인터럽트(Interrupt)

인터럽트란 하드웨어가 작동중에 CPU에게 알려주는 신호(signal)입니다. 시스템 버스(system bus)를 통해서 CPU에게 신호를 전송함으로써 어느 시간이던 하드웨어는 인터럽트를 발생시킬 수 있습니다.

 

예를 들어 키보드 "A"키를 누른다면 메모리에 A 누름 명령어가 적재되고 CPU에게 알려줍니다. (Interrupt)

 

 

폰 노이만 구조(von Neumann architecture)

폰 노이만 구조란 폰노이만이라는 사람이 제시한 프로그램 내장 방식입니다. 이 방식은 현재 컴퓨터의 기반이 되는 구조가 되었습니다. 폰 노이만 구조의 프로그램 내장 방식은 다음과 같은 과정으로 수행됩니다.

  1. 명령어 실행 사이클(Instruction-execution cycle)은 첫번째로 메모리에서 명령어를 인출(fetches)하고 명령어 레지스터(Instruction Register)에 명령어를 저장함
  2. 명령어는 그런다음 디코딩되어 메모리에서 피연산자(처리될 데이터 그자체)를 가져올 수 있습니다. 그리고 내부 레지스터(Internal Register)에 저장됩니다.
  3. 피연산자들에게서 명령어가 실행된 이후에 결과는 다시 메모리에 저장됩니다.

 

 

저장장치 계층

저장 시스템(storage systems)들은 다음과 같은 기준으로  계층적으로 구성될 수 있습니다.

  1. 용량(storage capacity)
  2. 접근 속도(access time)

위의 그림은 저장 시스템들을 계층적으로 구성한 것입니다. 위로 올라갈수록 속도는 빠르지만 저장용량이 적고 아래로 내려갈수록 속도는 느리지만 저장용량이 많아지게 됩니다. hard disk, solid-state disk는 우리가 흔히 아는 HDD, SSD이고 main memory는 하드웨어 부품인 RAM에 해당됩니다. 그리고 cache와 registers는 CPU에 존재하는 작은 용량의 기억장치입니다. 캐시에는 자주 사용하는 데이터를 저장하고 registers에는 명령어나 연산에 사용될 피연산자(데이터)를 저장합니다.

 

 

입출력 구조(I/O Structure)

운영체제 코드의 많은 부분이 입출력(Input/Output)을 관리하는데 사용되고 있습니다. 다음 그림은 현대 컴퓨터 시스템이 어떻게 작동하는지를 나타내는 그림입니다.

  • CPU는 디바이스(키보드, 모니터 등)에게 입출력을 요청합니다.
  • CPU와 디바이스는 서로 데이터를 통신합니다.
  • 디바이스에서 CPU에게 인터럽트를 전송할 수 있습니다.
  • CPU는 메모리로부터 명령어를 인출하고 실행하여 결과를 다시 메모리에 적재할 수 있습니다.
  • 디바이스와 메모리는 DMA(Direct Memory Access)라는 것을 할 수 있습니다.

 

 

DMA(Direct Memory Access)란 무엇인가?

  • 하드웨어(HDD, 그래픽 카드 등)들이 메모리에 직접 접근하여 읽거나 쓸 수 있도록 하는 기능
  • CPU의 개입이 없습니다.
  • CPU가 해야할 주변장치와의 전송을 DMA 장치가 대신 해줍니다. 따라서 CPU의 효율을 향상시킵니다.

 

 

1.3 컴퓨터 시스템의 구조(Computer System Architecture)

컴퓨터 시스템 부품들의 정의

  • CPU : 명령어들을 실행시키는 하드웨어, 프로세서의 종류 중 하나
  • Processor : 프로세서는 CPU의 일부분으로서 CPU의 핵심 기능을 수행하는 실제 칩(chip)을 가리킴
  • Core : 코어는 CPU 내부의 실행 엔진으로 실제로 명령어를 처리하고 연산을 수행함. 코어들은 CPU 내부에 위치하여 독립적으로 작동하거나 병렬적으로 수행할 수 있습니다

대칭형 다중 처리(Symmetric Multiprocessing, SMP)

  • 여러개의 프로세서 또는 코어가 동일한 메모리와 시스템 버스에 접근하여 작동하는 아키텍처
  • SMP 시스템에서는 각 프로세서가 독립적으로 작동하지만 모든 프로세서가 공유된 메모리에 접근 가능

 

 

멀티 코어 설계(Multi-core design)

  • 하나의 CPU 칩에 여러개의 코어를 통합하여 성능을 향상시키는 컴퓨터 구조
  • 멀티 코어는 병렬 처리를 가능하게 하고, 다수의 작업을 동시에 처리할 수 있도록 함

아래 그림은 같은 칩안에 2개의 코어가 포함된 멀티 코어 설계그림입니다.

 

1.4 운영체제 연산들(Operating System Operations)

멀티프로그래밍(Multiprogramming)

멀티프로그래밍이란 메모리에 여러 개의 응용 프로그램을 적재하는 것입니다. 멀티프로그래밍을 하는 이유는 메모리에 여러개의 프로그램을 올려두어서 CPU가 하나의 프로그램이 대기중일때 다른 프로그램을 수행시켜 효율을 극대화하기 위해서입니다.

 

아래 그림은 멀티프로그래밍 시스템을 위한 메모리 구조를 나타낸 것입니다. 아래 그림의 job1~4가 각각의 프로그램들입니다.

프로그램이란 무엇인가?

프로그램이란 명령어의 집합(Set of Instruction)이라고 정의할 수 있습니다.

 

멀티태스킹=멀티프로세싱(Multitasking=Multiprocessing)이란 무엇인가?

멀티프로세싱이란 멀티프로그래밍의 논리적인 확장입니다. 위에서 멀티 프로그래밍의 개념은 메모리에 여러개의 프로그램을 올려두어서 CPU가 쉬지않고 일을하게 만들게 하는 것이라고 하였습니다. 그런데 CPU가 하나의 프로그램을 작업하는 동안 다른 프로그램들은 수행되지 않습니다. 하지만 지금의 사용자들은 여러개의 프로그램을 띄우고 동시에 사용합니다. 위와 같이 프로그램들을 동시에 사용할 수 있게 하는 기술을 멀티프로세싱이라고 합니다.

 

위에서 멀티프로세싱이란 프로그램을 동시에 사용할 수 있게 한다고는 하였지만 정확히는 사용자가 동시에 여러개의 프로그램들을 사용하는 것과 같은 착각을 일으킬 정도로 CPU가 빠르게 수행되는 것입니다. 이는 CPU가 동시에 수행되는 것처럼 빈번하게 프로그램들을 교체하기 때문에 사용자들은 여러개의 프로그램들을 사용한다고 생각하는 것입니다.

 

CPU가 여러개의 프로그램들을 빠르게 교체하기 위해서 프로그램의 실행 순서를 결정하는 CPU 스케줄링을 수행합니다. CPU 스케줄링이란 만약 여러개의 프로세스들이 같은 시간에 실행될 준비가 되었다면 운영체제는 다음에 실행될 프로그램을 결정해야 합니다. 즉, 운영체제가 다음에 CPU의 의해 실행될 프로그램을 고르는 것을 CPU 스케줄링이라고 합니다.

 

대표적인 CPU 스케줄링 방식으로 시분할 시스템(time-sharing) 방식이 있습니다. 운영체제가 컴퓨터 자원을 일정 시간동안 분할하고 CPU는 해당 프로그램을 배분받은 시간동안만 수행시키고 다른 프로그램을 수행시키는 방식입니다.

 

운영체제 연산의 2가지 모드

  1. 유저 모드(user mode)
    • 사용자가 접근할 수 있는 영역을 제한적으로 두고, 프로그램의 자원에 함부로 침범하지 못하는 모드
    • 유저 모드에서 코드를 작성하고, 프로세스를 실행하는 등의 행동을 할 수 있음
  2. 커널 모드(kernel mode)
    • 커널 모드란 잘못된 프로그램으로 인해 다른 프로그램이 잘못 실행되지 않도록 하기 위해 사용되는 모드입니다.
    • 커널 모드는 모든 자원(드라이버, 메모리, CPU 등)에 접근, 명령을 할 수 있음

 

1.7 가상화(Virtualization)

가상화(Virtualization)

가상화 기술은 하나의 컴퓨터 하드웨어 위에서 여러개의 다른 운영체제를 실행하는 기술입니다. 가상화 기술을 사용하면 하드웨어에 VMM(Virtual Machine Manager)를 올리게 됩니다. VMM의 종류로는 Vmare, XEN, WSL 등이 존재합니다.

위의 그림에서 (a)는 하나의 운영체제를 올린 것이고 (b)는 하드웨어에 VMM을 통하여 여러개의 운영체제를 수행시키는 모습니다.

 

1.10 컴퓨팅 환경(Computing Environments)

운영체제에는 다양한 컴퓨팅 환경이 있습니다.

  • 일반적인 컴퓨터
  • 모바일 컴퓨팅(Mobile Computing)
  • 클라이언트-서버 컴퓨팅(Client-Server Computing)
  • P2P 컴퓨팅(Peer-to-Peer Computing)
  • 클라우드 컴퓨팅(Cloud Computing)
  • 실시간 내장 시스템(Real-Time Embedded Systems)

클라우드 컴퓨팅이란 인터넷을 통해서 서버에 접속하는 컴퓨팅 환경입니다. 사용자는 오직 클라우드 인터페이스를 통해서만 서버에 접근이 가능합니다.

 

 

[인프런] 운영체제 공룡책 강의
Operating System Concepts, 10th Ed. feat. by Silberschatz et al.
http://melonicedlatte.com/computerarchitecture/2019/10/15/143300.html
https://blockdmask.tistory.com/69