본문 바로가기

CS 이야기

운영체제란?

안녕하세요. 오늘은 운영체제란 무엇인가에 대하여 포스팅을 진행하겠습니다.

 

컴퓨터 공학을 하신 분이나, 이쪽 진로를 희망하시는 분은 운영체제가 중요하다는 말을 한 번쯤은 들어 보셨을 텐데, 도대체 운영체제란 무엇인가를 먼저 알아보겠습니다.

 

운영체제(Operating System)

An operating system is a software that operates a computer system.

 

직역하자면, 컴퓨터 시스템을 운영하는 software를 운영체제라고 합니다. 

 

여기서 말하는 컴퓨터란 무엇을 의미할까요?

 

Computer

A computer is a machine that processes the information

 

어떠한 정보를 처리하는 기기를 통상 컴퓨터라 칭합니다. 어떠한 정보를 말할까요? 여기서 말하는 정보란 특정할 수 없는 무언가를 측정해서, 정량적 수치로 나타낸 것을 뜻합니다.

 

컴퓨터는 정보의 최소 단위(bit)를 통해 이진수의 논리 연산으로 불확실한 어떤 것에 대해 측정하고, 이 것을 메모리에 저장하고 요청한 사람에게 표현해줍니다.

 

운영 체제란 이러한 컴퓨터의 정보 처리도와주는 Software라고 생각하시면 됩니다.

 

이러한 컴퓨터는 보통 Alan Turing, John von Neumann과 같은 시대의 뛰어난 수학자로 부터 발명됩니다. boolean algebra로 계산할 수 있는 거의 모든 것을 계산해내는 일종의 기기를 개발하게 됩니다.

 

Alan Turing은 튜링 머신은 컴퓨터의 조상격인 architecture를 설계하였습니다. 현재의 CPU->memory로 해당되는 architecture를 헤드-> 테이프 구조로 거의 흡사하게 만들어 내었습니다.

 

이러한 기기의 발전은 John von Neumann 에 의해 현대적인 컴퓨터와 유사하게 됩니다. 폰 노이만은 내장형 프로그래밍을 처음 도입하였습니다. Program을 RAM에 저장한 뒤, CPU는 저장된 명령어를 fetch 한 뒤, execute(실행)하게 됩니다.

 

실제로 프로그램은 명령어들의 집합입니다. 저희가 흔히 컴파일 과정에서 프로그래밍 언어를 어셈블리어로 변환하는 과정이 필요하죠. 이러한 어셈블리어는 실제로 여러 명령어들의 집합으로 이루어져 있습니다. 각각의 명령어에 대한 정보를 RAM에 내장한 뒤, 필요한 것들을 CPU에서 가져다 쓰는 구조를 만드는 것이죠!

 

자 여기까지 이해를 모두 하셨다면, 다음의 구조를 이해하실 수 있습니다.

 

결국 애플리케이션은 Hardware의 resources들을 사용해야 합니다. 하지만 여러분들이 개발을 할 때 직접적으로 어셈블리 명령어를 다뤄보신 경험은 거의 없으실 겁니다. 이게 가능한 이유는 모든 Application은 Hardware resource를 접근하기 전 OS에게 먼저 요청을 보낸 뒤, OS는 해당 명령을 수행하고, Application에게 반환해 줍니다. 따라서 일종의 Application과 Hardware 사이의 중간 매개 역할을 하는 소프트웨어입니다.

 

  • 당연하게도, 운영체제는 컴퓨터가 실행됨과 동시에 항상 실행되고 있어야 합니다.
  • 운영체제는 application에게 system service를 제공합니다.
  • 운영체제는 process, resources, user interface 등등을 관리합니다.

실제로 OS는 system resource에 대한 요청에 다음과 같이 작동합니다.

 

 

user process에서 system 자원에 대한 요청이 들어오면 (system call을 통해) user mode에서 kernel mode로 변경되며 OS가 모든 제어권을 갖게 됩니다. 그리고 요청된 처리가 끝나면 다시 반환하며, user mode로 변경해 줍니다. 이는 악의적인 프로그램을 통한 system 손상을 방지합니다.

 

다음은 운영체제의 기본적인 특징과 업무, 그리고 배경적인 컴퓨터 구조를 간략하게 정리해보겠습니다.

 

1. Bootstrap program

운영체제는 컴퓨터의 전원이 실행됨과 동시에 실행되어야 하는 software입니다. 따라서 컴퓨터의 전원이 on 되었을 때 자동으로 RAM(휘발성 메모리)에 OS 실행에 필요한 것들을 fetch 해 와야 합니다. 이러한 운영체제 실행에 필요한 것들은 RAM이 아닌 ROM과 같은 저장소에 저장되어 있는데 CPU는 이 bootstrap 프로그램 실행에 필요한 명령어들을 로딩하여, HDD와 같은 비 휘발성 메모리에 저장되어 있는 OS kernel을 RAM에 로딩하는 작업을 수행합니다.

 

2. I/O Interrupt

user process에서 I/O 관한 요청이 들어왔을 때 CPU는 적절하게 반응을 해야 합니다. 이러한 요청은 보통 키보드, 마우스와 같은 I/O device로 부터 전달되는데, 

 

위 그림과 같이 I/O device에서 interrupt가 발생하게 되면 조금 뒤에 CPU에서 해당 입력에 대한 처리를 수행합니다. 보통 이러한 signal이 CPU로 전달되는 길을 system bus라고 하고, 이러한 I/O에 대한 signal의 통신을 interrupt라고 표현합니다.

 

당연하게도 이러한 interrupt는 OS를 통해서 통신됩니다.

 

3. hierarchical memory

이번에는 운영체제가 아닌 컴퓨터의 특징인데요. 메모리를 효율적으로 관리하기 위해서, 다음과 같이 계층적 메모리 구조를 유지합니다. register부터 magnetic tapes까지 용량은 커지고, 속도는 느려집니다.

 

4. MultiTasking, CPU Scheduling.

CPU의 처리속도는 굉장히 빠릅니다. 저희가 블로그 글을 쓰거나, 워드와 같은 문서작업을 하면서 유튜브를 보거나, 아니면 음악을 들을 수 있습니다. 이는 실제로는 완전 동시에 일어나지는 않지만, CPU가 이러한 process들을 효율적으로 scheduling 하여 처리하기 때문에 우리 눈에는 마치 동시에 일어나는 작업처럼 보이게 됩니다.

 

이러한 CPU scheduling은 CPU의 효율성을 증가하기 위해 필요한 작업이며, 이는 운영체제에 의해 scheduling 됩니다.

 

5. Virtualization

운영체제의 꽃이라 불리는 Virtualization입니다. 마치 하나의 RAM 위에 여러개의여러 개의 CPU가 RAM을 공유하듯 virtual machine manager를 통하여 하나의 하드웨어에서 여러 개의 Kernel을 동시에 실행시킬 수 있습니다.

 

6. 그 외

이 외에도 User Interface, Program execution, File-system 관리, Communications, Error 발견, Resource allocation, Logging, Protection and security와 같은 작업들을 운영체제에서 맡아서 진행하게 됩니다.

 

오늘은 이렇게 운영체제에 대하여 알아보았습니다.

 

 

*저의 글에 대한 피드백이나 지적은 언제나 환영합니다.