지난 포스팅에서는 운영체제에 대해서 다루기 전에 알아두면 이해에 도움이 되는 개념들을 포스팅했었다.
이번 포스팅은 운영체제 공룡책의 Chapter1 Introduction 부분으로
책 전체 내용이 전반적으로 담겨있는 가장 중요한 chapter이다.
이번 포스팅에서는 컴퓨터 시스템 구성, 컴퓨터 시스템 구조, 운영체제의 정의와 목적, 실제 운영체제가 하는 일, 컴퓨터의 부팅에 대해서 알아 볼 예정이다.

컴퓨터 시스템 구성(Computer System Organization)

컴퓨터 시스템의 구성은 하드웨어(Hardware)소프트웨어(Software) 로 구분된다.
하드웨어 는 컴퓨터를 구성하고 있는 물리적인 기계 장치로 소프트웨어에 의해 주어진 일을 수행한다.
이러한 하드웨어에는 중앙처리장치(CPU), 기억장치(memory), 입출력(I/O) 장치 등이 있다.

소프트웨어하드웨어의 동작을 지시하고 제어하는 역할을 하는 명령어들의 집합인 프로그램과 프로그램에 필요한 데이터를 총칭한다. 소프트웨어는 시스템 소프트웨어와 응용 소프트웨어로 분류된다.

하드웨어와 소프트웨어에 대한 자세한 내용은 컴퓨터 시스템 구성시간에 배우는 내용이니
이번 포스팅에서는 컴퓨터 시스템 구성의 Operations에 대해서만 언급할 예정이다.

Computer System Operations

컴퓨터 시스템 구성(Computer System Organization)에서의
Computer System Operations은 아래의 그림과 같다.
다수의 CPU는 여러 개의 Device Controller 들과 common bus를 통해 연결되어 있고
이를 통해서 shared memory, 즉 공유 메모리 자원으로의 접근이 가능하다.

여기서 Device Controller 란 다음과 같은 구조를 가지고 있습니다.
Device ControllerLocal processing unit(logic) & Local storages(data register나 data buffer) 를 포함하고 있는 작은 컴퓨터라고 할 수 있다.

그렇다면 이러한 Device Controller는 왜 필요한 것일까요?

Device Controller 가 필요한 이유는 바로
CPU와 I/O Device들은 따로 작동하는 것이 아니라 동시에 작동하기 때문이다.

따라서 각각의 Device Controller 는 위의 그림과 같이 Disk Controller는 disk를,
USB Controller는 mouse,keyboard,printer와 같이 특정 기기들을 책임지고 있다.

이러한 이유로 CPU가 local buffer로부터 main memory로 직접 데이터를 옮기는 것이 아니라 device controller들을 통해서 local buffer로부터 데이터를 주고 받는 것이다.

컴퓨터 시스템 구조(Computer System Structure)

컴퓨터 시스템 구조는 아래의 그림과 같이 4개로 구성되어 있다.

  • Users : 유저나 기계 혹은 다른 컴퓨터를 사용자로 볼 수 있다.
  • Application Programs : User Program + System Programs
    ( 여기서 User Program과 System Program이란 지난 포스팅의 10가지 개념 중에 하나이다.
    User Program : OS program을 제외한 모든 프로그램을 의미한다.
    System Program : Word processors, compilers, web browsers, database systems 등을 의미 )
  • Operating System : 수 많은 user와 application의 hardware 사용을 컨트롤하고 조정하는 것을 의미한다.
  • Hardware : 기본적인 컴퓨터 자원으로 CPU, memory, I/O devices(HDD) 를 의미한다.

그림에서의 Kernel이라고 빨간 박스로 그려진 부분이 바로 Operation System이 하는 일을 나타내는 부분이며 매우 중요하고 앞으로의 포스팅에서 설명할 내용이다.

운영체제의 정의와 목적

운영체제의 정의

운영체제(OS)는 아래의 그림 처럼 컴퓨터 사용유저와 컴퓨터 하드웨어 사이에 중개자 역할을 하는 프로그램이라고 생각하면 된다.

운영체제의 목적

그렇다면 운영체제는 왜 필요할까?

물론 운영체제의 목적은 엄청 많지만 중요한 3가지를 뽑아보면 다음과 같다.

  1. 컴퓨터 시스템을 사용하기 편하게 만들어준다. ☞ "User Convenience"

  2. 컴퓨터 하드웨어를 효율적인 방법으로 사용한다. ☞ "System Efficiency"

  3. 사용자 프로그램들을 실행할 수 있는 환경을 제공하며 사용자가 겪는 문제들을 쉽게 해결해줍니다.

이렇게 말하면 어떤 느낌인지 전혀 감이 오지 않는다.
예시를 들어보자.

현재 이 포스팅을 보시는 분들을 하나의 class라고 할 때
이 class는 다수의 사용자가 사용하는 multi-user system이라고 가정한다.
(물론 여러 명이 보지는 않겠지만.. 그렇다고 합시다)

그리고 각각의 single user는 multi processes를 가지고 있다.
(여기서 process란 컴퓨터에서 실행중인 프로그램(일, task)를 의미합니다.)
여기 있는 많은 processes들은 시스템에 의해 적어도 한 번은 실행되어야 한다고 하자.

이때 다수의 user들에 의해 공유되는 computer system은
모든 user의 happiness를 만족시켜야한다.
(여기서 Happiness란 convenience, fastness & fairness 에 의해서 만족된다.)

따라서 Operating System은 모든 user들이 happiness를 만족할 수 있도록
공정하고 효율적으로 자원을 사용할 수 있도록 관리해야만 한다.
이것이 바로 운영체제가 필요한 이유이며 운영체제의 목적이라고 할 수 있다.

과연 single user, single process만 지원하는 경우 운영체제는 필요할까?

이와 같이 운영체제는 multi-user system에서는 필요하지만 과연 single user와 single process만을 지원한다고 한다면 과연 운영체제가 필요할까? 라는 의문이 생길 수 있다.

이에 대한 정답은 NO 이다.
왜냐하면 single user와 single process만을 지원한다면
User Convenience 측면에서는 user가 한명이므로 fastness나 fairness에서 문제가 발생하지 않고
System Efficiency 측면에서도 한 번에 하나의 process만을 처리하므로 자원을 효율적으로 관리할 필요가 없기 때문이다.

운영체제의 실질적인 역할

그렇다면 이제 운영체제가 어떤 것이고 왜 필요한지 알았으니 실제로 어떠한 역할을 하는지에 대해서 알아보자.

운영체제의 역할은 크게 3가지로 볼 수 있습니다.

  1. Scheduler : 어떤 프로세스가 다음에 실행 될 것인지를 결정해준다.
  2. Resource Manager (= allocator & deallocator)
    모든 자원들을 프로세서들에게 할당하거나 수거하여 관리한다.
    user 에게 fastness와 convenience를 만족시켜주기 위해 공정하고 효율적인 자원 사용에 있어서 상충되는 요구들을 결정한다.
  3. Control Program : 프로그램들의 실행을 컨드롤한다.
    (error나 유저가 적절하지 못하게 컴퓨터를 사용하는 경우를 방지)

이러한 역할들에 대한 자세한 내용은 앞으로의 Chapter에서 자세히 다룰 예정이다.

운영체제는 아래와 같이 표현이 되기도 합니다.

The one program running at all times on the computer is kernel.
All others are either system programs or user application programs.

컴퓨터에서 항상 실행되어지고 있는 하나의 프로그램은 kernel이다.
나머지 프로그램들은 System program이거나 User application program이다.

즉, 운영체제는 컴퓨터가 켜져있는 동안에는 항상 실행되고 있다는 의미이다.

컴퓨터 부팅

위에서 운영체제는 컴퓨터가 켜져있는 동안에는 항상 실행된다고 했는데 그렇다면 컴퓨터가 켜지는 과정과 운영체제가 실행되는 과정을 한 번 알아보자.

컴퓨터를 켜거나 재부팅 하였을 때 Bootstrap Program 이 로드(load)되어진다.
Bootstrap ProgramROM(Read Only Memory) 이나 EPROM(Erasable Programming ROM) 에 저장되어 power, 즉 컴퓨터를 꺼도 memory가 삭제되지 않는다.
컴퓨터가 켜지게 되면 PC의 값은 0이 되고, 다음 명령인 Bootstrap Program이 실행되기 위해서는 0번지 주소는 위의 그림과 같이 Main Memory(DRAM)가 아닌 ROM에 있다.
(여기서 PC는 이전 포스팅에서 다뤘던 CPU의 레지스터 중 하나로 다음 명령의 메모리 주소를 보관한다.)

이렇게 0번지에 가서 bootstrap program 을 로드하게 되면

  1. Init all hardware & software aspects of system
    (모든 하드웨어와 시스템 측면에서의 소프트웨어를 실행시킨다.)
  2. Load operating system kernel from HDD to MM
    (운영체제 kernel을 HDD로부터 Main Memory로 로드시킨다.)
  3. Let OS run
    (운영체제 kernel이 실행되도록 한다.)

위와 같은 순서로 컴퓨터가 부팅이 되게 된다. 즉, 컴퓨터는 부팅이 될 때 ROM에서 Bootstrap Program이 로드 되고 모든 하드웨어와 시스템 측면에서의 소프트웨어가 실행되며, HDD에 저장되어있는 운영체제를 Main Memory에 load 시키게 된다.

그렇다면 운영체제가 실행되도록 하는 방법은 무엇일까?

바로 운영체제(OS)가 저장되어 있는 메모리를 PC에 전달해 줌으로서 운영체제(OS)를 실행 시킬 수 있다.
다시 말해서 PC ← N이 ROM의 맨 마지막 명령으로 들어가게 되어 Main Memory에서의 OS가 시작되는 주소인 N 다음 명령이 되어 OS가 실행되는 것입니다.

이렇게 Booting Process가 끝나면 OS가 실행되기 시작하고 첫 번째로 주어진 process를 시작하며 scheduler로서의 역할을 수행하게 되며 사용자(user)로부터의 명령(=interrupts)이 있기를 기다린다.

프로그램들이 실행되려면...?

❗️❗️ 여기서 중요한 점은 어떠한 프로그램이든 실행이 되려면 프로그램이 저장된 HDD에서의 위치(=주소)를 운영체제(OS)가 알고 있어야한다. 이 주소를 PC로 전달해 주면 CPU는 단지 fetch와 decode를 수행하는 것 뿐이다.

결론

이번 포스팅에서는 전반적인 개념인 컴퓨터 시스템 구성, 컴퓨터 시스템 구조, 운영체제의 정의와 목적, 실제 운영체제가 하는 일, 컴퓨터의 부팅에 대해서 알아보았다.
다음 포스팅 역시도 Introduction - 2로 Boostrap Program, Operating System, 인터럽트에 대해서 포스팅 해 볼 예정이다. !!
👉🏻 이전 포스팅으로 가려면 여기로
👉🏻 다음 포스팅으로 가려면 여기로

참고

Operating System Concepts 9th Edition

profile
Hope to become an iOS Developer

0개의 댓글