CS 정리 | OS | 1. 운영체제 개요 (1) | kocw 반효경 교수님

Konseo·2023년 9월 5일
0

운영체제

목록 보기
1/19

강의 목표

OS는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 OS의 개념과 역할, 운영체제를 구성하는 각각의 요소 및 그 알고리즘의 핵심적인 부분에 대하여 기초부터 학습한다.

  • OS를 사용자 입장이 아닌 설계자 입장 에서 공부하는 것이 궁극적인 목표
  • 대표적인 OS : 리눅스나 윈도우즈, (리눅스 위에서 돌아가는) 안드로이드

운영체제란 무엇인가?

  • 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층
  • 컴퓨터의 사용자가 하드웨어적 지식을 몰라도 편하게 사용할 수 있도록 한다
  • 결국 컴퓨터분야에서 가장 복잡하고 까다로운 소프트웨어라고 볼 수 있으며, 이 또한 인간이 만든 소프트웨어이다. os는 기존 응용소트프웨어는 다르게 하드웨어를 직접 관리한다는 특징을 가진다
  • 사진과 같이 운영체제를 기준으로 상단에게는 편한 인터페이스를 제공해주며, 하단에게는 cpu, 메모리, 하드디스크들을 직접 관리해 준다

운영체제 목적


1. 편리한 환경 제공

  • 운영체제는 동시 사용자/프로그램들이 각각 독자적 컴퓨터에서 수행되는 것 같은 환상(illusion)을 제공해준다
    • ex) 웹서핑도 하고, 게임도 하며 동시에 음악도 들을 수 있다
    • 이렇게 여러 실행 프로그램을 동시에 수행하려면 하드웨어를 직접 다루는 복잡한 부분을 건들여야하는데, 이를 운영체제가 대행해 준다

2. 자원을 효율적으로 관리 ⭐️

  • 주어진 자원 : cpu, 메모리, I/O 장치 등
  • 상단의 사진과 같이 물리적인 컴퓨터는 1대인데 그 안에서 다양한 일을 수행해야하므로 최대한 성능을 내도록 해야한다.
    • 효율성 : 개별 실행 프로그램은 자기 자신이 마치 cpu를 독식한다고 느낄 정도로 빨라야 한다.
    • 형평성 : 특정 사용자나 특정 프로그램의 지나친 불이익이 발생하지 않도록 해야 한다.

  • 메모리는 cpu의 작업공간이며, cpu에서 프로그램이 실행되려면 메모리에 올려두어야 한다.
    • 그렇지만 메모리의 용량 또한 유한하기 때문에 여러 프로그램 동시에 실행된다면(=메모리에 여러 프로그램이 올라간다면) 언젠가는 메모리 공간이 모두 차게 된다.
  • 이 때 어떤 프로그램에게 메모리를 얼만큼 할당할 것인지 즉, 어떻게 자원을 효율적으로 관리할 지는 운영체제의 몫이다.

컴퓨터 시스템의 구조

크게 컴퓨터의 내부와 외부(I/O 장치)로 나눌 수 있으며,
cpu는 자신의 작업공간인 메모리를 읽어 프로그램을 실행시킨다

조금 더 상세히 그려보자. 이전 사진과 달라진 점은, 1) 메모리에 다양한 프로그램이 올라가 있다는 것2)각 I/O장치마다 작은 controller가 생겼다는 점이다. 이 점을 숙지하고 아래 내용을 읽어보자

위의 컴퓨터 내부 구조 그림을 보며 두 가지 질문에 대한 답을 도출해보자.

첫 째로, 우리가 컴퓨터의 전원을 켜면 어떤 일이 발생할까? 먼저 운영체제가 메모리에 올라간다 운영체제의 경우 컴퓨터가 꺼지기 전까지 항상 실행되는 프로그램이다

즉, 운영체제(커널)는 메모리에 항상 상주하고 있으며 os를 제외한 메모리 공간은 다양한 프로그램들이 차지하게 된다.

둘 째로, CPU의 작업 공간은 메모리이기 때문에 컴퓨터 외부 장치인 I/O장치에 직접 접근할 수 없다. 만약 어떤 프로그램 실행 도중 디스크의 파일 내용을 읽어와야만 다음 실행을 할 수 있다면 어떻게 될까?

CPU는 I/O를 전담하는 I/O controller에게 일을 위임 한다. 그러면 controller는 CPU가 요청한 파일을 읽어 본인의 작은 메모리에 읽어두고 파일이 준비되엇음을 CPU에게 알린다. 그러면 그제야 CPU는 파일을 읽어 일을 다시 수행하게 된다.

운영체제의 기능


운영체제는 CPU 스케줄링, 메모리 관리, 디스크 스케줄링 그리고 인터럽트 및 캐싱 기능을 수행한다. 각 기능에 대해선 앞으로 자세히 설명할 예정이니 오늘은 간략히 핵심만 다루어 보도록 하자.

  1. CPU 스케줄링

    어떤 프로그램에게 cpu사용권을 줄까? 얼마만큼 줄까?

    앞서 말했 듯 CPU는 하드웨어이다. 즉, 생각을 못한다. CPU는 그저 매 클럭마다 메모리 어딘가에 있는 기계어를 읽어 연산을 할 뿐이다. 즉, CPU는 OS의 대행을 통해 다양한 프로그램에 대한 CPU 관리가 이루어진다.

    OS는 CPU를 '관리'할 수 있으므로 CPU가 OS를 읽고 있는 시점에선 완벽히 조율 할 수 있다. 그러나 다른 프로그램이 CPU를 무한루프 등으로 독점하고 있다면 어찌할 방법이 없다. (무한정 쓰지 못하게 막는 것은 OS 혼자 할 수 없는 영역이라는 뜻이다) 따라서 하드웨어의 도움(ex.인터럽트)을 받아 관리한다.

  2. 메모리 관리

    한정된 메모리를 어떻게 쪼개어 쓸까?

  3. 디스크 스케줄링

    디스크에 들어온 요청을 어떤 순서로 처리할까?

    디스크는 느리다. 또한 디스크는 다양한 프로그램으로부터 처리 요청이 들어올 수 있다. 이 때 요청 순서대로 처리되는 것이 아니라 나중에 들어온 요청이라도 효율적인 순서대로 처리 진행할 수 있다. 이는 엘리베이터 스케줄링과 동일하다.

  4. 인터럽트, 캐싱

    CPU와 I/O장치의 속도 차이는 100만배이다. 이들의 속도 차이를 어떻게 극복할 수 있을까?

    사실 CPU와 I/O장치 뿐만 아니라 CPU와 메모리도 대략 100배정도 속도 차이가 발생한다. 하지만 CPU와 메모리는 모두 컴퓨터 내부 부품이므로, 캐시 메모리나 파이프라이닝 등을 통해 성능 갭을 완충하는 장치가 존재한다.

    그렇다면 다시 돌아가서 CPU와 I/O장치는 어떻게 (속도 차이를) 극복할 수 있을까?

    먼저, CPU-메모리 사이에 있는 캐시메모리와 똑같이 CPU-디스크 사이에도 캐시 메모리가 존재하기 때문에 여기에 값을 보관하여 속도를 극복할 수 있다.

    또 다른 방식으로는 인터럽트 가 있다. cpu에서 프로그램을 실행하다 I/O의 값을 읽거나 저장해야할 떄, 이를 직접하는 것이 아니라 I/O controller에게 요청한다고 하였다. 그러면 CPU는 요청에 대한 결과가 올 때까지 마냥 기다릴까?

    CPU는 디스크보다 백만배 빠른데 그 시간을 단순히 기다리는데 허비한다면 굉장한 자원의 낭비일 것이다. 따라서 컨트롤러에게 일을 위임한 후 당장 일할 수 있는 다른 일을 찾는다.

    그렇게 CPU는 다른 일을 하고 있는 동안, 컨트롤러는 자신이 일을 다 했음을 알려주기 위해 이 때 '인터럽트'를 건다. 참고로 CPU는 기계어 명령을 처리하고 있지만, 기계어 하나를 처리할 때마다 매번 인터럽트를 체크한다. 따라서 인터럽트가 들어오면 CPU의 제어권이 인터럽터에 의해 자동으로 os에게 넘어가게 되고, OS에서 관리하는 기계어를 읽어서 해당 디스크 요청을 했었던 기존의 프로그램을 (OS)다음에 읽을 수 있도록 한다.

프로세스의 상태

프로세스란 실행 중인 프로그램 을 의미한다.
사진에서 초록색 원은 프로세스를 의미한다.

CPU에서는 특정 프로그램에 대하여 메모리를 읽어 기계어를 실행하며,
CPU를 쓰고자 하는 프로그램은 cpu큐에 줄세워둔다.
이 때 우리는 (앞으로 상세히 배울) CPU 스케줄링을 적용하여 프로그램들이 실행됨

그러다 디스크에 대한 파일을 읽어야하는 상황이 생긴다면, 시간이 걸리기 때문에 CPU에서 바로 쫓아냄과 동시에 동시에 디스크 입출력 큐에 프로세스가 쌓이게 된다. CPU와 마찬가지로 여기서도 디스크 스케줄링 적용되며 처리된 경우에는 디스크 큐에서 해당 프로세스를 빼서 CPU 큐에 다시 넣어준다

마지막으로, 사진의 상단 좌측을 보자.
프로그램은 interactive 어플리케이션과 Sciensific 어플리케이션 2가지 유형이 있는데, 일반적으로 우리는 interactive 어플리케이션을 실행한다.

예를 들어 우리가 웹서핑 도중 키보드와 마우스를 계속 사용한다면 인터럽트에 의해 I/O 장치에서 CPU가 OS로 넘어가게 되며, 운영체제는 키보드의 입력 데이터를 메모리로 카피하여 사용할 수 있게 한다. 이런식으로 우리는 CPU와 I/O의 반복을 통해 유저와의 상호작용을 하는 어플리케이션을 실행하곤한다.

I/O 작업 없이 CPU만 굉장히 오래 쓰는 어플리케이션 또한 존재한다. 얘를 들어 유전자 분석을 하는 프로그램이라면 cpu를 대단히 많이 쓰는 작업이기 때문에 중간에 I/O가 거의 끼어들지 않는다.

profile
둔한 붓이 총명함을 이긴다

0개의 댓글