[OS] 운영체제 구조와 원리

김형주·2021년 9월 2일
0

Backend Study

목록 보기
11/19
post-custom-banner

운영체제(Operating System)란?

운영체제란 컴퓨터 하드웨어(입출력 장치, CPU)의 리소스를 관리해주면서 동시에 여러 애플리케이션이 작동할 수 있는 환경을 제공해주는 소프트웨어다.

  • OS는 프로그램들이 리소스를 필요로 할 때 필요 리소스를 할당해준다.
  • OS는 각각 자원을 할당받은 프로그램들이 서로 엉키지 않고 효율적으로 작동하도록 제어해준다.
  • 운영체제(OS)가 하는 일
  1. 프로세스 관리
  2. 메모리 관리
  3. 저장소 관리
  4. 보안

운영체제의 부팅과정

컴퓨터의 전원이 나가면 CPU는 ROM에 저장되어 있는 내용을 읽는다. ROM(Read Only Memory)은 컴퓨터에 전원이 나가도 사라지지않는 비휘발성 메모리며, 계속 보관되어야할 정보들을 저장한다. ROM안에는 POST(Power On Self-Test)부트로더(Boot Loader)가 저장되어 있다.

POST는 컴퓨터 전원이 켜지면 가장 먼저 실행되는 프로그램으로 컴퓨터에 이상이 있는지 체크하는 프로그램이다. 부트로더(Boot Loader)는 하드디스크에 저장되어 있는 OS 프로그램을 가져와서 RAM에 넘겨준다.

부트로더(Boot Loader)

부트로더란 운영체제가 시동되기 이전에 미리 실행되면서 커널이 올바르게 시동되기 위해 필요한 모든 관련 작업을 마무리하고 최종적으로 운영 체제를 시동시키기 위한 목적을 가진 프로그램을 말한다.

Interrupt(인터럽트)

컴퓨터가 부팅이 되면 OS 프로그램을 실행한 후 사용자의 입력 이벤트를 기다린다. 이 이벤트를 인터럽트라고 한다. 인터럽트가 발생되면 OS는 해당 명령어(Interrupt를 발생시킨) 주소를 기억한다. 그 후 인터럽트가 끝나면 해당 주소로 돌아가 다음 명령어를 수행하거나 대기상태로 돌아간다.

Interrupt(인터럽트)

인터럽트는 말그대로 방해의 의미를 가지고 있다. CPU가 프로그램을 실행하고 있을 때 입출력 하드웨어 등의 장치에 예외상황(에러라던지, 입력이라던지, 출력이라던지..) 다양한 상황에 대해서 CPU가 처리할 수 있도록 중간에 멈추게 한다. 인터럽트가 발생하면 CPU가 수행중이던 작업은 따로 저장하게 되고(CPU 내부 레지스터메인 메모리 등), 인터럽트가 발생한 작업을 먼저 수행하게된다.
관련 내용은 나중에 집중해서 쓰도록 하겠다.

운영체제의 구조

운영체제는 DOS 시절부터 꾸준히 발전해왔다. 기본적으로 하나의 CPU는 하나의 작업(Interrupt)만 처리할 수 있다. 따라서 예전에는 하나의 작업이 끝날 때까지 다른 작업은 대기만 하고 있어서 효율이 낮았다.

작업 1, 작업 2를 처리해야 한다.
작업 1I/O 자원을 사용한다. 작업 2 대기, CPU 자원 대기
작업 1CPU 자원을 사용한다. 작업 2 대기, I/O 자원 대기
작업 2I/O 자원을 사용한다. CPU 자원 대기
작업 2CPU 자원을 사용한다. I/O 자원 대기

멀티 프로그래밍(Multi-Programming)

이러한 문제를 해결하기 위해 생긴 방법론이 멀티 프로그래밍 원리다. 멀티 프로그래밍의 기본 개념은 입출력을 수행하고 있는 경우, 다른 작업에 CPU를 할당해서 처리하도록 한다. 반대로 CPU가 작업을 하고 있는 경우, 입출력 장치들을 대기 상태로 만들어서 입출력이 필요한 작업에게 입출력 리소스를 할당한다.

작업 1, 작업 2를 처리해야 한다.
작업 1이 CPU 자원을 사용한다. 작업 2가 I/O 자원을 사용한다.
작업 1이 I/O 자원을 사용한다. 작업 2가 CPU 자원을 사용한다.

멀티 태스킹(Multi-tasking)

기술이 발전하면서 프로세서의 처리 속도가 더욱 빨라졌는데 역설적으로 C프로세서의 낭비가 더욱 커졌다. 그 이유는 프로세서의 처리 속도의 발전 속도를 입출력 장치가 따라가지 못해서 프로세서의 낭비가 더욱 커지게 된다.

작업 1, 작업 2를 처리해야 한다.
작업 1에게 CPU 자원 할당, 작업 2에게 I/O 자원 할당
작업 1를 완료하여 CPU 대기, 작업 2 처리 중
(이때, 작업 2가 처리될 때까지 CPU는 대기 상태여서 자원 낭비 발생)

이러한 문제를 해결하기 위해 나온 개념이 멀티 태스킹(Multi-tasking)이다. 멀티 태스킹은 각각에 작업들에게 자원 할당 시간을 정해줘서 그 시간이 지나면 다른 작업들에게 자원을 넘겨준다. 이때, 각 자원들에게 시간을 할당하는 것이 스케쥴링이고 Job 스케쥴링CPU 스케쥴링이 있다.

운영체제 원리

운영체제는 interrupt-driven방식으로 사용자의 요청(Event 혹은 Interrupt)이 발생하면 운영체제는 적절하게 자원(CPU, I/O, 메모리 등)을 분배하여 그 요청을 처리하는 구조이다.

Interrupt에는 크게 두 가지가 있다. H/W interruptS/W interrupt가 있다. H/W interrupt는 I/O, 메모리, CPU와 관련된 interrupt이고 S/W interrupt는 프로그램이 실행되다가 발생될 수 있는 Errors, 운영체제 Services들에 대한 요청인 System Call이 있다. S/W interrupt는 잘못 처리하면 한 작업이 자원을 계속 점유하거나 컴퓨터의 동작을 크게 저해할 수 있기 때문에 여러 방법을 써서 이를 예방해야 한다.

그 첫 번째로 Dual-Mode Execution이다. 운영체제는 기본적으로 사용자에게 인터페이스를 제공하는 User Mode와 기기들을 직접 관리하는 Kernel Mode로 구분된다. Kernel에서의 작업은 컴퓨터의 중요한 부분에 해당하는 작업이기에 사용자가 직접 작업하다가 문제가 생길 시 컴퓨터 전체에 영향을 끼치기 때문에 User Mode와 Kernel Mode로 나눠 사용자가 접근하지 못하게 한다.

사용자가 User Mode에서 작업을 명령하면 Kernel Mode에서 이를 처리해야하는데 그 연결고리 역할을 하는 것이 바로 Mode-Bit이다. 운영체제는 User mode에 들어온 명령어와 일치하는 Mode-Bit을 가진 Kernel Mode의 명령어를 찾아 Kernel에서 실행한 후, 그 결과를 User-Mode에 넘기고 일을 마무리한다. 이러한 행위를 System Call이라 한다.

두 번째로 Timer가 있다. Timer는 말 그대로 프로세스들에게 유효 시간을 부여하여 그 시간이 지나면 프로세스를 종료시켜 Error가 발생하여 작업이 멈추더라도 CPU를 계속 점유하는 것을 방지한다.

profile
만물에 관심이 많은 잡학지식사전이자, 새로운 도전을 꿈꾸는 주니어 개발자 / 잡학지식에서 벗어나서 전문성을 가진 엔지니어로 거듭나자!
post-custom-banner

0개의 댓글