컴퓨터과학/0 +운영체제

운영체제 핵심 개요

힘들면힘을내는쿼카 2023. 9. 14. 02:41
728x90
반응형

운영체제 핵심 개요

 

운영체제란?

컴퓨터 하드웨어 바로 윗단에 설치되는 소프트웨어를 의미

 

🤔 운영체제 같은 대형 프로그램을 모두 메모리에 올리면 메모리가 낭비되는 것 아닌가요?

맞습니다.!!
운영체제처럼 규모가 큰 소프트웨어를 모두 메모리 올린다면, 메모리 낭비가 심합니다.

따라서 이러한 메모리 낭비를 고려하여,
운영체제 중 필요한 부분만 컴퓨터 전원이 켜짐과 동시에 메모리에 올려놓고,
그렇지 않은 부분은 필요할 때만 메모리에 올려서 사용합니다.

 

🤔 운영체제 하면 항상 커널 이야기가 나오는데 커널은 뭐죠?

메모리에 항상 올라가 있는 운영체제의 부분커널이라고 부릅니다.
(커널은 운영체제 코드 중에서 핵심적인 부분을 의미)

 

운영체제의 기능

운영체제는 컴퓨터 하드웨어와 사용자 또는 소프트웨어 사이에 존재합니다.
따라서 크게 하드웨어를 위한 기능과 사용자를 위한 기능 2가지로 나누어볼 수 있습니다.

  • 하드웨어를 위한 역할(효율성)
    • 시스템 내 자원을 효율적으로 관리
  • 사용자를 위한 역할(형평성)
    • 시스템을 편리하게 사용할 수 있는 환경

 

운영체제의 2가지 기능은 시스템 자원을 효율적으로 관리하고,
사용자 및 프로그램들 간에 자원이 형평성 있게 분배되도록 하는 역할을 해야 하는 것을 의미 합니다…!

 

즉, 형평성과 효율성을 고려하여 자원을 관리 해야 합니다.

 

운영체제의 분류

운영체제는 동시 작업을 지원하는지 여부에 따라서 2가지로 분류할 수 있습니다.

  • 단일 작업(single tasking)
  • 다중 작업(multi tasking)

 

단일 작업

단일 작업용 운영체제는 한 번에 하나의 프로그램만 실행시킬 수 있는 운영체제입니다.
초창기 운영체제는 대부분 단일 작업용 운영체제에 해당 되었습니다.

하나의 프로그램이 실행 중일 때 명령어 입력 라인이 나오지 않습니다.

이러한 불편함을 개선하고자 다중 작업을 지원하게 되었습니다.!

 

다중 작업

동시에 N개의 프로그램을 실행 시킬 수 있는 운영체제 입니다.

 

CPU가 1개인데 어떻게 여러 프로그램을 동시에 실행할 수 있을까요?

비록 CPU가 1개 밖에 없어, 순간 하나의 프로그램만 CPU에 실행될 수 있다고 하더라도
CPU의 처리속도가 워낙 빨라, 여러 프로그램이 번갈아가며 실행되면
사용자는 프로그램이 동시에 실행되는 것처럼 느낄 수 있습니다.

 

참고
운영체제가 다중 작업을 처리할 때 여러 프로그램이 CPU와 메모리를 공유하게 됩니다.

 

시분할 시스템(CPU)

이와 같이 CPU의 작업시간을 여러 프로그램들이 조금씩 나누어 쓰는 시스템을 시분할 시스템(time sharing system)이라고 부릅니다.

 

다중 프로그래밍 시스템(메모리)

CPU와 다르게 메모리의 경우
여러 프로그램들이 조금씩 메모리 공간을 분할하여
여러 프로그램들을 동시에 메모리에 올려놓고 처리하는 시스템을 다중 프로그래밍 시스템(multi-programming system)이라고 부릅니다.

 

대화형 시스템(사용자)

다중 작업 운영체제는 사용자의 관점에서는 입력의 결과를 곧바로 화면에 보여주기 때문에
대화형 시스템(interactive system)이라고 부릅니다.

 

운영체제의 자원 관리 기능

앞서 운영체제의 목적은 자원을 효율적으로 관리하고, 형평성 있게 자원을 분배하는 것 이라고 말씀드렸습니다.
여기에서는 자원을 효율적으로 관리하는 기능을 간단하게 설명드리겠습니다~!

 

운영체제에서 자원은 크게 하드웨어 자원과 소프트웨어 자원으로 나뉩니다.

  • 하드웨어 자원
    • CPU, 메모리, I/O 장치
  • 소프트웨어 자원
    • 각종 프로그램
 

 

 

CPU 스케줄링

CPU가 1개 밖에 없는 기본적인 컴퓨터 구조에서도 프로세스는 여러개가 동시에 수행될 수 있습니다.
따라서 매 시점에 어떤 프로세스에 CPU를 할당하여 작업을 처리할 것인지 결정하는 작업이 필요합니다.
이러한 작업을 CPU 스케줄링이라고 합니다.

 

CPU 스케줄링의 목표는 CPU를 가장 효율적으로 사용하면서,
동시에 특정 프로세스가 불익익을 당하지 않도록 하는 것 입니다.

 

대표적인 CPU 스케줄링 기법은 아래와 같습니다.

  • 선입선출(FIFO | FCFS)
  • 라운드 로빈(Round Robin)
  • 우선순위(Priority)

 

선입선출(FIFO | FCFS)

선입선출 기법은 우리가 일상생활에서 줄을 서는 것과 유사합니다.
CPU를 사용하기 위해서 도착한 프로세스 중 먼저 도착한 것을 먼저 처리해주는 방식 입니다.

 

선입선출 방식에서는 CPU를 필요로하는 프로세스가 여럿 있을 때
CPU를 먼저 얻은 프로세스가 원하는 작업을 완료할 때까지 다른 프로세스들이 CPU를 사용하지 못합니다.🥲

 

선입선출 방식을 사용하면
CPU 자체의 효율적인 사용 측면에서는 문제가 없지만,
전체 시스템 입장에서는 비효율적인 결과를 초래할 가능성이 있습니다.

 

1초면 처리가 완료되는 프로세스가 있고, 1,000초가 걸리는 프로세스가 있다고 합시다.
만약 1,000초가 걸리는 프로세스가 먼저 도착했다면 1초가 걸리는 프로세스는 1,000초를 무작정 기다려야 합니다…

 

이러한 선입선출의 단점을 보완하기 위해 등작한 것이 바로 라운드 로빈 기법 입니다…!!

 

라운드 로빈(Round Robin)

라운드 로빈 기법에서는 CPU를 한 번 할당받아 사용할 수 있는 시간을 일정하게 고정된 시간으로 제한합니다.
그래서 긴 작업을 요구하는 프로세스가 CPU를 할당 받더라도 고정된 시간으로 제한 합니다…!

 

고정된 시간이 지나면 얄짤 없이 다른 프로세스에게 기회가 넘어가게 되고,
기존 프로세스는 대기열 제일 뒤로가서 기다려야 합니다.^^

 

라운드 로빈 방식을 사용하면,
긴 작업을 수행하는 프로세스 때문에
짧은 작업을 가진 프로세스들이 무작정 오래 기다려야 하는 상황은 막을 수 있습니다.👍

 

그러면 이제 할당 시간을 얼마로 해야하는가?
일반적으로 1회 할당 시간은 ms 단위를 사용하고, 시스템의 요구사항에 맞게 적절하게 설정해야 합니다.

 

우선순위(Priority)

우선순위 스케줄링은 CPU를 사용하기 위해 대기 중인 프로세스들에 우선순위를 부여하고
우선순위가 높은 프로세스에 CPU를 먼저 할당합니다.

 

시스템 내 프로세스 중에 상대적으로 더 중요한 프로세스가 있을 수 있기 때문에,
그러한 프로세스의 우선순위를 높게 하여 CPU를 먼저 할당 받을 수 있게하는 것이 핵심 입니다.!

 

참고로 지나치게 오래 기다리는 프로세스가 발생하지 않도록,
기다린 시간이 늘어날수록 우선순위를 점차 높여주는 방안도 우선순위 스케줄링에 활용될 수 있습니다.

 

메모리 관리

운영체제에서 중요 관리 대상으로 메모리가 있습니다.
메모리는 CPU가 직접 접근할 수 있는 컴퓨터 내부의 기억장치인데,
모든 프로그램이 CPU에서 실행되려면 해당 부분이 메모리에 올라가 있어야 합니다.
한정된 메모리 공간에서 여러 프로그램을 수용하려면 메모리에 대한 효율적인 관리 메커니즘이 필요합니다.^^

 

따라서 메모리 관리를 위해 운영체제는 메모리의 어느 부분이 어떤 프로그램에 의해 사용되고 있는지를 파악하여 이를 유지하게 되는데, 이러한 정보는 주소(address)를 통해 관리됩니다.

 

기본적으로 운영체제는 프로그램에 메모리가 필요한 상황이면 할당하고,
더 이상 필요하지 않으면 회수하는 메커니즘으로 구성되어 있습니다.

 

추가로, 다수의 사용자 프로그램이 동시에 메모리에 올라간 경우
서로 다른 프로세스의 영역을 침범하지 않도록 보안을 유지하는 역할도 운영체제의 역할이라고 할 수 있습니다.

 

요약하면…!
운영체제는 각 프로세스가 자신의 메모리 영역에만 접근할 수 있도록 관리해야 합니다.

 

물리적 메모리를 관리하는 방법에는 크게 3가지가 존재합니다.

  • 고정분할(fixed partition)
  • 가변분할(variable partition)
  • 가상메모리(virtual memory)

 

고정분할(fixed partition)

고정분할 방식은 물리적 메모리를 몇개의 분할로 미리 나누어 관리합니다.
나뉜 각각의 분할에는 하나의 프로그램이 적재될 수 있습니다.

 

고정분할 방식은 메모리에 동시에 적재되는 프로그램의 수가 분할 갯수로 한정되어 있습니다.
또한, 분할의 크기보다 큰 프로그램은 적재가 불가능한 단점이 존재합니다.

 

분할이 고정적이기 때문에 분할의 크기보다 작은 프로그램이 적재되는 경우 해당 분할 내에 남는 영역이 발생하게 되는데, 이것을 내부조각(internal fragmenttaion)이라고 합니다.

  • 분할의 크기보다 큰 프로그램 적재 불가
  • 분할의 크기보다 작은 프로그램이 적재되면 내부조각 발생

 

가변분할(variable partition)

이러한 문제를 해결하기 위해 가변분할 방식이 등장 했습니다.
가변분할 방식은 매 시점 프로그램의 크기에 맞게 메모리를 분할해서 사용하는 방식을 말합니다.
따라서 분할의 크기 때문에 큰 프로그램의 실행이 제한되는 문제는 발생하지 않습니다.!!

 

하지만, 외부조각이라는 메모리 낭비 문제가 발생할 수 있습니다.

처음에 프로세스1(100MB)과 프로세스2(100MB)가 실행 중이다가,
프로세스1(100MB)이 끝나고, 프로세스3(80MB)와 프로세스4(150MB)가 실행된다고 할때
프로세스1이 실행되었던 메모리 공간에 프로세스3(80MB)가 적재되고 20MB의 외부 조각이 발생하게 됩니다.

 

추가로, 물리적 메모리의 크기보다 더 큰 프로그램의 실행은 여전히 불가능한 것을 알 수 있습니다.

  • e.g) 물리적 메모리(1GB) 프로그램(2GB)이면 실행 불가

 

가상메모리(virtual memory)

가상메모리 기법은 현대의 범용 컴퓨터 환경에서 가장 널리 사용되는 메모리관리 기법 입니다.
가상메모리 기법은 고정분할, 가변분할에서 해결하지 못했던
물리적 메모리보다 더 큰 프로그램이 실행되는 것을 지원합니다.

 

실행되는 프로그램의 크기는 가상메모리의 크기에 의해 결정됩니다.
모든 프로그램은 물리적 메모리와는 독립적으로 0번지 부터 시작하는 자신만의 가상메모리 주소를 갖고 있습니다.

 

운영체제는 가상메모리 주소를 물리적 메모리 주소로 매핑(mapping)하는 기술을 이용하여 물리적 메모리에 적재하게 됩니다.

 

🤔 그런데, 어떻게 물리적 메모리의 한정되어 있는데 물리적 메모리 보다 큰 프로그램을 적재할 수 있을까?
프로그램의 전체 크기가 100MB라고 할지라도 전체가 항상 동시에 사용되는 것은 아닙니다.
그렇기 때문에 사용되는 부분만 메모리에 올리고, 나머지는 보조기억장치에 저장해두었다가 필요할 때 적재하는 방식을 취합니다.
이때 사용되는 보조기억장치의 영역을 스왑 영역(swap area)라고 부릅니다.

 

프로그램을 구성하는 가상메모리 주소 공간은 페이지(page)라는
동일한 크기의 작은 단위로 나뉘어 물리적 메모리와 스왑 영역에 일부분씩 저장됩니다.
이렇게 동일한 단위로 메모리는 나누는 기법을 페이징(paging) 기법이라고 합니다.

 

입출력 관리

입출력 장치는 CPU와 메모리와 달리 인터럽트(interrupt)라고 불리는 메커니즘을 통해 관리가 이루어집니다.

 

🤔 인터럽트가 뭔가요?
입출력 장치들은 CPU의 서비스가 필요한 경우 신호를 발생시켜 서비스를 요청하게 되는데,
이때 발생시키는 신호를 인터럽트라고 합니다.

 

인터럽트가 발생하면 하던 일을 잠시 멈추고 인터럽트에 필요한 요청 서비스를 수행하게 됩니다.
인터럽트가 발생했을 때 직전 작업 상태를 잠시 저장하고 인터럽트를 먼저 처리하는 것 입니다.

 

참고
입출력 장치들은 각 장치마다 작은 CPU를 가지고 있는데, 이를 컨트롤러(controller)라고 부릅니다.

 

 

 

728x90
반응형