2장 - 운영체제 개요

Jimin·2022년 9월 21일
0

운영체제

목록 보기
3/9
post-thumbnail

1. 운영체제의 정의

운영체제(operating system)

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

운영체제는 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층으로 그 위상은 다음과 같다.

시스템

기반이나 틀이 되는 하드웨어를 지칭할 때 주로 사용

소프트웨어인 운영체제에 시스템이라는 용어가 사용된 것은 하드웨어가 운영체제와 한 몸이 되어야만 사용자에게 쓰일 수 있는 진저한 컴퓨터 시스템이 되기 때문이다.

컴퓨터의 전원을 켜면 운영체제는 이와 동시에 실행된다.

소프트웨어가 컴퓨터 시스템에서 실행되기 위해서는 메모리에 그 프로그램이 올라가 있어야 하는데, 운영체제 자체도 하나의 소프트웨어로서 전원이 켜짐과 동시에 메모리에 올라간다.

커널(kernel)

메모리에 상주하는 운영체제의 부분으로, 운영체제의 핵심적인 부분을 뜻한다.


2. 운영체제의 기능

운영체제의 역할

  • 하드웨어를 위한 역할
  • 사용자를 위한 역할

하드웨어를 위한 역할

하드웨어 쪽에서는 사용자가 직접 다루기 힘든 각종 하드웨어를 운영체제가 관리하는 역할을 한다.
→ 컴퓨터 시스템 내의 자원(resource)를 효율적으로 관리하는 것

사용자를 위한 역할

사용자에게는 편리한 인터페이스를 제공하는 역할을 한다.
→ 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공하는 것

여기서 편리한 환경 제공이란,
운영체제가 여러 사용자 및 프로그램들에게 각각 독자적으로 컴퓨터를 사용하는 것과 같은 '환상'을 제공하는 것을 말한다.

⇒ 즉, 하드웨어를 직접 다루는 복잡한 부분은 운영체제가 대행해주고, 각 사용자 및 프로그램은 그에 대한 자세한 내용을 알지 못해도 프로그램을 실행할 수 있도록 해주는 기능을 뜻한다.

컴퓨터 시스템 내의 자원을 효율적으로 관리하는 역할

운영체제는 컴퓨터 시스템 내의 자원을 효율적으로 관리하는 역할을 맞고 있어 자원관리자(resource manager)라고도 불린다.

운영체제는 자원들을 효율적으로 관리해 가장 좋은 성능을 내도록하는 역할을 담당한다.

자원

CPU, 메모리, 하드디스크 등 하드웨어 자원뿐 아니라 소프트웨어 자원까지를 통칭해서 부르는 말이다.

사용자와 운영체제 자신을 보호하는 역할

여러 사용자의 프로그램이 하나의 컴퓨터에서 실행되면 이에 대한 보안이 필요하다.

악의성 프로그램을 작성해 다른 사용자 프로그램이 올라가 있는 메모리 영역을 참조한다든지, 또는 다른 사용자의 사적인 파일에 접근한다든지 하는 일이 일어나서는 안된다.

운영체제 자체가 올라가 있는 메모리 영역을 변경하는 경우 컴퓨터의 정상적인 작동에 치명적인 악영향을 미칠 수도 있다.


운영체제의 분류

동시작업을 지원하는지의 여부

  • 단일작업(single tasking)용 운영체제
  • 다중작업(multi tasking)용 운영체제

단일작업용 운영체제

한 번에 하나의 프로그램만 실행시킬 수 있는 운영체제

초창기 운영체제는 대개 단일 작업용 운영체제에 해당되었다.

다중작업용 운영체제

동시에 2개 이상의 프로그램을 처리할 수 있는 운영체제

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

시분할 시스템(time sharing system)

CPU의 작업시간을 여러 프로그램들이 조금씩 나누어 쓰는 시스템

다중 프로그래밍 시스템(multi-programming system)

메모리 공간을 분할해 여러 프로그램들을 동시에 메모리에 올려놓고 처리하는 시스템

대화형 시스템(interactive system)

프로그램에 대한 결과를 곧바로 화면에 보여주는 시스템

다중작업, 시분할, 다중 프로그래밍, 대화형 시스템은 모두 여러 프로그램이 하나의 컴퓨터에서 동시에 실행되는 시스템들이다.
이 용어들은 각 프로그램이 사용자의 입력에 대해 곧바로 응답한다는 측면에서 유사한 의미로 사용되며,
우리가 널리 사용하는 PC가 이 조건을 만족하는 시스템이다.

여러 사용자가 동시에 접속해서 쓰는 서버인 경우에도, 서버 컴퓨터에 사용자가 입력을 전달하면 곧바로 서버가 응답하여, 각 사용자 입장에서는 또한 대화형 시스템에 해당한다.

다중처리기 시스템(multi-processor system)

하나의 컴퓨터 안에 CPU가 여러 개 설치된 경우

CPU가 여러 개 있는 컴퓨터는 서로 다른 CPU에서 여러 프로그램이 동시에 실행될 수 있어 처리가 더욱 빨라지지만,
운영체제 입장에서는 여러 CPU를 관리하기 위해 더욱 복잡한 메커니즘을 필요로 하게 된다.


4. 운영체제의 예

MS 윈도우 운영체제

미국의 컴퓨터 소프트웨어 기업인 마이크로소프트(Micosoft)에서 이전에 개발한 MS-DOS와 윈도우 3.1 등을 한층 발전시킨, 개인용 컴퓨터를 위한 운영체제이다.

플러그 앤 플레이(plug and play)

시스템에 새로운 하드웨어를 장착하면, 운영체제가 자동으로 하드웨어를 감지하여 그에 맞게 설정된다.

MS 윈도우 는 자체적으로 네트워크 프로그램을 지원하기 때문에 윈도우 사용자들끼리 파일을 공유하거나 프린터 등의 하드웨어를 공유할 수 있는 기능을 가지고 있다.

유닉스 같이 오랜 전통을 가지는 운영체제에 비해 안정성은 떨어지지만, 사용이 편리한 여러 가지 기능들을 제공하기 때문에 컴퓨터를 전문적으로 이용하지 않는 일반 사용자에게 가장 보편적으로 사용되고 있다.

유닉스 운영체제

프로그램 개발 환경을 위해 설계된 운영체제로서 이식성(portability)이 좋고, 운영체제 커널의 크기가 작으면, 소스 코드가 공개되었다

위와 같은 특징들로 인해 학계를 바탕으로 많은 연구와 함께 그 사용이 확대되어 이제는 가장 널리 사용되는 운영체제 중 하나로 자리 잡고 있다.

대부분의 코드가 C언어 로 작성되었다.
→ 즉, 기계어에 가까운 어셈블리어 로 작성되는 운영체제에 비해 사람이 이해하기 편리한 고급 언어로 작성된 유닉스는 소스 코드를 이해하기가 쉽고, 이에 따라 다른 기종에 이식하는 것도 훨씬 쉽다.

특히 최근에는 리눅스(Linux) 의 등장으로 대형 서버뿐 아니라 개인용 컴퓨터에서도 유닉스를 널리 사용할 수 있게 되었다.

안정성을 가장 큰 장점으로 하며 컴퓨터 전문가에게 최적화된 체계적인 운영체제이다.


5. 운영체제의 자원 관리 기능

운영체제의 가장 핵심적인 기능을 자원을 효율적으로 관리하는 것이다.
여기서 자원은 두 가지로 나뉜다.

  • 하드웨어 자원
  • 소프트웨어 자원

하드웨어 자원

CPU와 메모리(memory)를 비롯해 주변장치 또는 입출력 장치라 불리는 장치들로 구성된다.

운영체제는, 여러 프로세스들이 한정된 CPU와 메모리를 효율적으로 나누어쓸 수 있도록 해야한다.

입출력 장치 도 운영체제의 관리가 필요하다.

보조기억장치

대표적인 매체로는 하드디스크가 있다.

CPU와 메모리는, 전원이 꺼지면 처리 중이던 정보가 모두 지워지기 때문에 전원이 나가도 기억해야하는 부분을 입출력 장치 중 한 종류인 보조기억장치 에 파일 형태로 저장한다.
이때, 파일들이 저장되는 방식 및 접근 권한 등에 대해서도 운영체제가 관리를 해주어야 한다.

키보드, 모니터 등이 입출력 장치로 운영체제의 관리대상에 포함된다.

CPU를 관리하는 방법;
CPU 스케줄링(CPU scheduling)

프로세스 여러 개가 동시에 수행될 때, 매 시점 어떠한 프로세스에 CPU를 할당해 작업을 처리할 지 결정하는 일

CPU 스케줄링의 목표

CPU를 가장 효율적으로 사용하면서도, 특정 프로세스가 불이익을 당하지 않도록 하는 것

CPU 스케줄링 기법

CPU 스케줄링 기법에는 3가지가 있다.

  • 선입선출(First Come First Served)
  • 라운드 로빈(Round Robin)
  • 우선순위(Priority)

선입선출

CPU를 사용하기 위해 도착한 프로세스들 중 먼저온 것을 먼저 처리해주는 방식

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

라운드 로빈

CPU를 할당 받아 사용할 수 있는 시간을 일정하게 고정된 시간으로 제한한다.

따라서 라운드 로빈의 경우, 할당시간을 얼마로 할 것인지가 중요하다.

우선순위 스케줄링

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

기다린 시간이 늘어날 수록 우선순위를 점차 높여주는 방안을 사용할 수 있다.

메모리 관리 방법

메모리

메모리는 CPU가 직접 접근할 수 있는 컴퓨터 내부의 기억장치이다.

프로그램이 CPU에서 실행되려면, 해당 부분이 메모리에 올라가 있어야 한다.
→ 이때, 한정된 메모리 공간에서 여러 프로그램을 수용하려면 메모리에 대한 효율적인 관리 메커니즘이 필요하다.
⇒ 따라서 메모리 관리를 위해 운영체제는 메모리의 어느 부분이 어떤 프로그램에 의해 사용되고 있는 지를 파악해야한다.
이러한 정보는 주소(address) 를 통해 관리된다.

운영체제는 프로그램에 메모리가 필요할 때 할당하고, 더 이상 필요하지 않을 때 회수한다.

다수의 사용자 프로그램이 동시에 메모리에 올라간 경우 서로 다른 프로세스의 영역을 침범하지 않도록 보안을 유지하는 역할도 운영체제의 몫이다.
⇒ 즉, 운영체제는 각 프로세스가 자신의 메모리 영역에만 접근할 수 있도록 관리해야한다.

물리적 메모리 관리 방식

물리적 메모리 관리 방식에는 3가지 방식이 있다.

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

고정분할방식

물리적 메모리를 몇개의 분할로 미리 나누어 관리한다.

융통성이 없다는 단점이 있다.
분할이 고정적이기 때문에 분할의 크기보다 작은 프로그램이 적재되는 경우 해당 분할 내에 남는 영역이 발생하게 된다.

내부조각(internal fragmentation)

해당 분할에 올라온 프로그램에 의해서도 사용되지 않고, 다른 프로그램에도 할당될 수 없는 비효율적으로 낭비되는 공간이다.

가변분할방식

매 시점 프로그램의 크기에 맞게 메모리를 분할해서 사용하는 방식

내부조각은 발생하지 않지만 외부조각은 발생할 수 있다.

외부조각(external fragmentation)

프로그램에 할당되지는 않았지만 그 크기가 작아 프로그램을 올리지 못하는 메모리 영역

가상메모리방식

물리적 메모리 보다 더 큰 프로그램이 실행되는 것을 지원하는 방식

가상메모리 방식은 현대의 범용 컴퓨터 환경에서 가장 널리 사용되는 메모리 관리 기법이다.

모든 프로그램은 물리적 메모리와는 독립적으로 0번지부터 시작하는 자신만의 가상메모리 주소를 갖는다.
→ 운영체제는 (이 가상메모리의 주소를 물리적 메모리 주소)로 매핑(mapping) 하는 기술을 이용해 주소를 변환시킨 후 프로그램을 물리적 메모리에 올리게 된다.
⇒ 가상메모리 기법에서는 물리적 메모리의 크기와 상관 없이, 사용할 수 있는 메모리의 크기가 충분히 크다고 가정하고 프로그램을 개발할 수 있다.

현재 사용되고 있는 부분만 메모리에 올리고, 나머지는 하드디스크와 같은 보조기억장치에 저장해두었다가 필요할 때 적재하는 방식을 취한다.

스왑 영역(swap area)

위에서 사용되는 보조기억장치의 영역

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

페이징(paging) 기법

동일한 단위로 메모리를 나누는 기법

주변장치 및 입출력 장치 관리

CPU나 메모리와 달리 인터럽트(interrupt)라는 메커니즘을 통해 관리가 이루어진다.

인터럽트

주변장치들은 CPU의 서비스가 필요한 경우에 신호를 발생시켜 서비스를 요청하는데, 이 때 발생시키는 신호를 인터럽트라고 한다.

CPU는 평소에 CPU 스케줄링에 따라 자기에게 주어진 작업을 수행하다가 인터럽트가 발생하면 하던 일을 잠시 멈추고 인터럽트에 의한 요청 서비스를 수행한다.

인터럽트는 요청하는 장치와 발생 상황에 따라 다양한 종류가 있기 때문에, 운영체제는 인터럽트의 종류마다 서로 다른 인터럽트 처리루틴을 가지고 있다.

인터럽트 처리루틴

인터럽트가 발생했을 때 해주어야 할 작업을 정의한 프로그램 코드로
운영체제 커널 내에 존재하며, CPU 스케줄링, 메모리 관리루틴 등 다양한 기능을 위한 커널 코드의 일부분이다.

인터럽트가 발생 → 운영체제가 해당하는 인터럽트 루틴을 찾음 → 운영체제가 터럽트 루틴에 정의된 프로그램 코드에 따라 일을 수행함

컨트롤러(controller, 제어기)

주변장치들이 각 장치마다 그 장치에서 일어나는 업무를 관리하기 위한 일종의 작은 CPU를 가지고 있는데, 이를 컨트롤러라 부른다.

컨트롤러는 해당 장치에 대한 업무를 처리하고, 이를 메인 CPU에 인터럽트를 발생시켜 보고하는 역할을 한다.

예; 사용자의 키보드 입력 → 인터럽트 발생 → CPU가 현재 수행 중이던 작업의 상태를 저장
→ 인터럽트 요청을 처리하기 위해 운영체제 내에서 정의된 키보드 인터럽트 처리루틴을 찾아간다.
→ 키보드 인터럽트 처리루틴은 (키보드로부터 입력 받은 내용을 메모리의 특정 부분에 저장해 해당 프로그램에 키보드 입력이 들어왔음을 알리면서) 인터럽트 처리를 완료한다.
→ 인터럽트 처리가 끝나면, 인터럽트가 발생하기 직전의 상태를 복구시켜 중단되었던 작업을 CPU가 재개한다.

profile
https://github.com/Dingadung

0개의 댓글