[2] 운영체제의 개론

hyunsooo·2023년 6월 2일
0
post-thumbnail

KOCW - 양희재 교수님 강의를 기반으로 운영체제 정리

컴퓨터 구조시간에 배운 모든 하드웨어 부품들은 운영체제가 없으면 쉽게 다룰 수 없습니다. 컴퓨터에 전원을 키는 순간 부터 끄는 순간까지 모든 영역에서 운영체제가 개입하고 관리하게 됩니다.

운영체제의 목적으로 위에서 설명한 내용처럼 컴퓨터 하드웨어를 관리(프로세서, 메모리, 키보드 등)와 성능(Performance)향상, 사용자에게 편의성(Convenience)을 제공하고 있습니다. 현재에 이르러 남녀노소 불구하고 컴퓨터를 편리하게 사용할 수 있는 것도 운영체제의 역할 때문입니다.

부팅(Booting)

컴퓨터 구조 시간에 메모리는 크게 RAM(Random Access Memory)와 ROM(Read Only Memory)로 나눠져 있으며 RAM은 휘발성, ROM은 비휘발성인 특징을 가진 메모리라고 설명했습니다.

ROM에는 컴퓨터를 구동하기 위한 필수적인 펌웨어와 같은 명령어들이 적재되어 있습니다. 실제로 컴퓨터에 전원을 키는 순간 ROM에 적재되어 있는 POST(Power-On Self-Test)가 실행되어 현재 컴퓨터의 상태를 체크하게 됩니다. 그 후 부트로더(Boot Loader)가 실행되는데, 이 부트로더는 하드디스크에 저장된 운영체제를 찾아 RAM에 적재하는 역할을 담당하게 됩니다.

이런 과정을 통해 컴퓨터의 전원을 키면 운영체제는 종료하기 전까지 지속적으로 RAM에 적재되고 컴퓨터를 관리하게 됩니다.

커널 vs. 명령 해석기

쉘은 커널과 사용자 사이에서 사용자가 입력한 명령어를 해석하는 역할을 합니다. 예를 들어, 리눅스에서 현재 디렉토리에 파일 정보를 보기 위해 ls명령어를 사용할 수 있습니다. 이처럼 ls명령어를 기계어로 번역하고 커널에 전달하는 역할을 하게 됩니다.

커널은 하드웨어를 제어하는 운영체제의 핵심이라고 할 수 있습니다. 운영체제 시간에는 이 커널의 기능들을 배워가는 시간이라고 생각해도 무방합니다.

운영체제의 위치

운영체제를 표현할 때, 위의 두가지 그림으로 표현하곤 합니다. 핵심은 하드웨어와 어플리케이션 사이에 위치하여 사용자가 실행한 프로그램을 효율적으로 작동하도록 합니다. 따라서 운영체제(Operating System)의 다른 이름으로 Resource Allocator/Management라고 부릅니다.

운영체제의 역사

컴퓨터는 1940년대 말기 부터 사용되었으며 하드웨어가 발전하며 운영체제도 같이 기술 발전이 이루어져 왔습니다.

초기에는 카드에 구멍을 뚫어 소스코드를 구현했습니다. 이 카드를 카드 리더기를 통해 메모리에 적재시키고 컴파일러 또한 리더기를 통해 적재시켜 소스코드를 번역 작업을 거쳐 컴퓨터를 사용해 왔습니다.

Batch processing

기술이 발전됨에 따라 Batch processing system(일괄처리)으로 발전되었습니다.
일괄처리 시스템은 소스코드를 실행시키기 위한 일련의 과정(컴파일, 링커, 로딩 등)을 할 수 있는 프로그램을 메모리에 넣어두는 방법입니다. 이 프로그램의 이름을 resident monitor라고 부르며 resident의 의미는 "상주한다"입니다. 이 resident monitor가 메모리에 상주하여 일괄처리를 하게 되고 이 방식이 최초의 운영체제가 됩니다.

Multi-programming

하드웨어 기술이 발전됨에 따라 운영체제는 Multiprogramming system(다중 프로그래밍)으로 발전했습니다.
일괄처리 시스템은 메모리에 하나의 프로그램만 적재되어 실행되었습니다. 프로그램이 실행되는 일련의 과정을 살펴보니 CPU를 사용하고 그 결과를 보여주기 위해 I/O장치도 사용하는 작업이 반복적으로 이루어 지고 있는 것을 알 수 있었습니다. 이 말은 I/O 장치를 사용할 때, CPU는 아무것도 하지 않는 상태가 되고 이 상태를 CPU Idle상태라고 말합니다. 더군다나 CPU는 빠르지만 I/O 작업은 느렸기 때문에 하나의 프로그램에서 긴 시간의 Idle상태가 발생하였고 이 문제를 해결하기 위해 메모리에 여러개의 Job(프로그램)을 적재하여 하나의 Job이 I/O작업을 만나면 또 다른 Job을 실행하여 CPU가 Idle 시간을 대폭 줄일 수 있었습니다.
다중 프로그래밍은 여러개의 프로그램을 메모리에 올리는 것이기 때문에 어떤 프로그램을 실행시켜야 하는지(CPU scheduling), 메모리는 관리 및 보호에 대한 처리를 고려해야 했습니다.

Time-Sharing

모니터와 키보드가 등장하고 그에 따른 CPU의 성능도 상당히 발전 되었습니다. 기존에 하나의 프로그램이 CPU 작업을 끝내면 다음 프로그램이 CPU를 사용했던 것과 달리 프로그램별로 일정 시간 CPU를 사용할 수 있도록 할당하여 프로그램을 실행하게 됩니다.
예를 들어, 3개의 프로그램이 각각 0.01초 동안 CPU를 사용할 수 있도록 한다면 1초에 100번, 하나의 프로그램은 1초에 33번 CPU를 사용하게 됩니다. 이런 작업을 통해 실제로는 3개의 프로그램을 실행하고 있지만 사용자는 하나의 프로그램만 실행하고 있는 것 처럼 느껴지게 됩니다. 이런 스위칭을 빠른 시간에 일어나기 때문에 Time-Sharing이라고 부릅니다.
이런 강제 절환(스위칭)시스템이 나오면서 컴퓨터와 interative system(대화형)이 가능해 졌으며 프로세스간 통신이 가능해졌습니다. 또한 여러개의 프로그램이 동시에 실행되다 보니 동기화도 중요해졌습니다. 또한 많은 프로그램을 실행하다 보니 부족한 메모리를 위해 하드디스크의 일부를 메모리 처럼 사용하도록 하는 기술인 가상메모리 기술들이 등장하게 되었습니다. 대표적인 Time sharing system OS는 Unix(1960년대 말)입니다.

OS 기술의 변이

  • 컴퓨터 규모별 분류

    • Supercomputer > Mainframe > Mini > Micro (1980s)

    • Supercomputer > Server > Workstation > PC > Handheld > Embedded (현대)

  • 고성능 컴퓨터의 OS 기술이 Handheld/Embedded 까지 전달됨

    • Batch processing

    • Multi programming

    • Time sharing

  • 고등 컴퓨터 구조

    • 고등 운영체제의 등장

고등 운영체제

  • 다중 프로세서 시스템 (Multi-processor system)

    • 병렬 시스템
    • 강 결합 시스템
    • 다중 프로세서 운영체제
    • perfomance 향상
    • 높은 성능의 cpu 하나 보다 저렴한 cpu를 여러개 두는 것이 효율적
    • 다중 프로세서 운영체제가 필요
  • 분산 시스템 (Distributed system)

    • 다중 컴퓨터 시스템
    • 소결합 시스템
    • 분산 운영체제
    • 목적은 다중 프로세서와 동일하다.
  • 실시간 시스템 (Real-time system)

    • 시간 제약이 있는 시스템
    • 공장 자동화, 군사, 항공, 우주
    • 실시간 운영체제

인터럽트 기반 시스템

현대의 운영체제는 인터럽트 기반 시스템입니다. 운영체제는 부팅이 끝나면 메모리에 상주(resident)하게 되고 어떠한 사건(event)를 기다리며 대기하게 됩니다. 이 상태에서 마우스를 움직이게 된다면 마우스에서 전기적 신호를 발생하여 CPU로 전달되고 이 신호가 인터럽트가 됩니다. 인터럽트 신호는 현재 하던 일을 중지하고 운영체제 안에 있는 마우스 인터럽트 서비스 루틴으로 점프하여 마우스를 움직이는 방향으로 모니터에 있는 마우스 이미지를 움직이게 됩니다. 이처럼 운영체제 안에는 어떤 인터럽트가 발생했을때 실행해야 하는 수많은 코드들이 존재하고 인터럽트 신호에 알맞는 특정 코드를 실행하게 됩니다.
하드웨어에서 발생하는 인터럽트 뿐만 아니라 소프트웨어 인터럽트도 존재합니다. 컴퓨터 구조 시간에 배운 어셈블리어 명령어 중 SWI(SoftWare Interrupt)가 실행되면 소프트웨어 인터럽트를 발생시킬 수 있습니다. 예를 들어, HWP 프로그램을 실행시켜서 특정 HWP파일을 불러오고 싶은 상황일때 하드디스크에 접근하여 파일을 불러오는 작업은 HWP프로그램이 하는 것이 아니라 운영체제가 하게 됩니다. 이를 위해, HWP프로그램은 SWI를 발생시켜 운영체제의 특정 서비스 루틴으로 점프하게 되어 특정 코드를 통해 하드디스크에서 파일을 불러오게 됩니다.

이처럼 현대의 운영체제는 인터럽트를 기반으로한 시스템입니다. 정리하자면 운영체제는 평소에는 대기 상태이지만 하드웨어/소프트웨어/내부 인터럽트에 의해 특정 ISR(Interrupt Service routine)이 실행됩니다.

내부 인터럽트
내부 인터럽트는 어떤 숫자를 0으로 나누는 사건과 같은 상황에서 발생하는 인터럽트입니다. 이때도 운영체제에는 0으로 나누는 행위를 했을때 실행되는 코드가 있습니다.

profile
CS | ML | DL

0개의 댓글