OS 존재 의의와 역할

Ureca.·2025년 2월 9일

개요

현대 사회에서 걸음을 조금만 옮겨도 보이는 것들이 바로 스마트폰, TV, 컴퓨터와 같은 기기다.

우리는 윈도우, IOS, 리눅스, 타이젠과 같은 네이밍을 들었을 수도 있고, 아니면 그것도 모른 채로 살아왔을 수 있다.

컴퓨터 부품들은 전기를 공급한다고 해서 알아서 동작하는 것이 아니기 때문에 이를 동작시켜 줄 수 있는 프로그램이 필요하고 이를 OS라고 한다.


운영체제란

  • 모든 프로그램은 실행을 위해서는 리소스(자원)가 필요하다.
  • 운영체제는 실행할 프로그램에 필요한 자원을 할당하고 프로그램이 실행되도록 돕는 프로그램.
  • OS는 메모리에 저장되어 실행이 된다.
  • 단, OS는 컴퓨터의 근원이 되는 프로그램이기 때문에, 다른 프로그램들과 섞이지 않고 순수하게 운영이 되어야만 하는데, 그렇기 때문에 이 OS는 메모리에서 ‘커널’이라고 하는 영역에 저장이 된다.

메모리 관리

사용자가 어떤 응용 프로그램을 실행했을 때, 우리는 이 프로그램을 메모리에 따로 어디에 할당하라고 지정하지 않는다. “그렇다면 이 프로그램들이 메모리에 할당하는 존재는 무엇일까?”

“운영체제”다.

처음 개요에서 설명했듯이, OS는 사용자가 컴퓨터를 쉽게 동작할 수 있도록 도와주는 프로그램이라고 했는데, 지금 이 메모리에 자동으로 할당해주는 것 또한 OS가 사용자를 도와주는 것이다.

CPU 관리

우리는 여러 프로그램을 동시에 사용하는 경우가 많다. 그러나 우리 입장에서는 동시에 사용하는 것이지만, 우리가 인지할 수 없는 시간 단위에서 번갈아가면서 실행된다고 볼 수 있다.

CPU가 이 여러 프로그램을 빠르게 번갈아가면서 실행하는 것이다.

따라서, CPU는 해당 프로그램들을 구동하기 위해 최적화를 하게 되는데,

“어떤 프로그램을 먼저 실행할 것인지, 얼마나 오랫동안 실행할지”를 운영체제가 결정해준다.

입출력장치 관리

워드 프로세서가 프린터라는 IO를 먼저 사용하고 있기 때문에, 메모장은 워드 프로세스의 실행이 끝날 때까지 대기해야하는데 이를 OS가 명령을 한다.

그렇기 때문에, 운영체제는 응용 프로그램의 최적화를 해주는 것 뿐만이 아니라, 하드웨어와 연결도 해주는 프로그램이다.

운영체제가 없다면?

  • 하드웨어를 직접 접근해 조작하는 코드를 만들어야 할 것이다.
  • 다음은 운영체제가 없을 시에 개발자가 해야하는 작업의 예시이다.

< 1과 2의 덧셈 결과를 모니터에 출력하는 프로그램 >

  1. 해당 프로그램을 먼저 메모리에 올릴 수 있는 코드가 있어야 한다.
  2. CPU가 1과 2를 덧셈할 수 있도록 하는 코드
  3. 모니터에 계산 결과를 출력하는 코드 등

Q. 모니터에 계산 결과를 출력하는 것은 C언어의 printf으로 충분히 할 수 있는 간단한 것 아닌가요?

A. 운영체제 내에 있는 특정 코드를 수행하라. 라는 식으로 정의되어 있기 때문에, 이 또한 운영체제의 도움을 받아 실행되는 함수라고 볼 수 있다.

운영체제가 있기 때문에

개발자는 하드웨어에 접근하는 코드를 직접 작성할 필요가 없다.

예를 들어, 파일을 읽고 싶을 때, 보조기억장치에 있는 파일을 접근해야 하는 코드가 필요한 것이 아니라, 그 파일에 접근할 수 있는 운영체제의 코드를 실행해서 운영체제한테 부탁만 하면 된다.

응용 프로그램이 운영체제를 통해 하드웨어를 접근한다 했을 때 어떤 문제점이 생겼다고 한다면, 운영체제가 먼저 알아차리게 된다.


따라서, OS는 프로그램이 실행될 때 메모리와 CPU 관리를 자동으로 해주고, 응용 프로그램과 하드웨어 사이에서 매개 역할을 해주기 때문에, 사용자가 아닌 프로그램을 위한 프로그램이라고 볼 수 있다.


커널

  • 핵심 서비스를 담당하는 부분을 커널(Kernel)

핵심적인 서비스

  • 자원에 접근하고 조작
  • 프로그램이 안정적으로 실행되게 관리

단, UI는 OS에 포함되지만 사용자가 컴퓨터를 이용할 수 있게 해주는 기능이기 때문에 핵심 기능, 즉 커널이라고 하지는 않는다.

이중모드와 시스템 호출

  • 일반적으로 사용자가 사용하는 실행하는 프로그램은 리소스(자원)에 직접 접근이 가능한가?
  • 직접 접근 시에, 다음과 같은 상황이 발생할 수 있다. 예를 들어, A라는 프로그램이 CPU를 사용하고 있다고 가정해본다. 이 때 B라는 프로그램도 CPU를 사용하려고 한다면, 동시에 사용하려고 했기 때문에 충돌이 발생할 수 있다.
  • 다른 장치도 마찬가지이다. A가 SSD에 어떤 내용을 저장했는데, B가 SSD에 똑같은 곳에 접근을 해 삭제할 수가 있다.
  • 그렇기 때문에, 응용 프로그램은 자원에 직접 접근할 수 없다. 이 때 OS한테 부탁을 한다. 즉, OS의 코드를 실행하게 해서 자원에 대신 접근을 한다.

이중 모드

  • CPU가 명령하는 모드는 두 가지로 나뉘는데 사용자 모드커널 모드가 있다.
사용자 모드커널 모드
운영체제 서비스를 제공받을 수 없는 실행 모드운영체제의 서비스를 제공받을 수 있는 실행 모드
커널 영역의 코드를 실행할 수 없는 실행 모드자원 접근을 비롯한 모든 명령어 실행 가능
결정적으로, 자원 접근이 불가
웹 브라우저, 게임 등의 응용 프로그램, 사용자 어플리케이션 파일 읽기/쓰기 요청파일 시스템 접근, 하드웨 제어, 스케줄링 등

유저 모드에서 사용자 애플리케이션 파일 읽기, 쓰기를 요청하면 System Call(시스템 호출)을 통해 커널에 전달이 된다. 이 때, 일시적으로 커널 모드로 전환이 되고 작업이 완료되면, 다시 유저 모드로 돌아온다.

시스템 호출

  • 커널 모드로 전환해 실행하기 위해 호출하는 것으로 일종의 소프트웨어 인터럽트이다.

응용 프로그램이 실행되다가 자원에 접근할 경우가 생긴다면, 시스템 호출을 이용해 커널 모드가 된다. 이 때, 하드웨어에 접근할 수 있는 코드를 실행하게 되고 다시 응용 프로그램으로 돌아오게 된다.


운영체제의 핵심 서비스

프로세스 관리

프로세스 : 실행 중인 프로그램

  • 많은 프로세스들이 번갈아 가면서 실행하는데, 생성/실행/삭제를 OS가 관리한다.

운영체제가 이 프로세스를 어떻게 관리하는지에 대해서는 추후 공부를 통해 더 알아보도록 한다.

ex) 프로세스와 스레드, 프로세스 동기화, 교착상태 해결

자원 접근 및 할당

  • CPU
    • CPU 스케줄링 : 어떤 프로세스를 먼저, 얼마나 오래 실행할까? 모든 프로세스는 CPU가 필요한데, 다양한 프로세스들 중에서 우선 순위에 맞게 할당해주는 것을 CPU 스케줄링이라고 한다.
  • 메모리
    • 페이징, 스와핑, …
  • 입출력장치

파일 시스템 관리


참고 : 혼자 공부하는 컴퓨터구조 + 운영체제

profile
한 편의 주마등이 망작이 될 수는 없잖아.

0개의 댓글