본문 바로가기

ComputerScience/Operating System

OS - 2 Operating System Overview

728x90

1. Operating System

- 앞으로 이어서 운영체제의 주요 역할과 특징에 대해서 공부를 하겠지만 간략하게 정의와 역할을 살펴보자.

- 운영체제는 다른 프로그램들이 컴퓨터 위에서 효율적으로 돌아갈 수 있도록 실행을 도와준다.

- 컴퓨터에 있는 파일에 대한 접근을 통제하거나 i/o장치들에게 접근하는 역할을 수행하기도 한다.

- 즉 운영체제는 컴퓨터라는 자원의 사용을 관리해주는 프로그램이다.

- 사용자에게는 컴퓨터를 쉽게 사용할 수 있도록 ui를 제공하기도 하고 개발자에게 개발에 필요한 ABI(application binary interface)를 제공하기도 한다. 그 위에 개발된 수많은 API(Aplication binary interface)를 사용할 수도 있다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

- 동일한 CPU라면 ISA가 동일할 것이고 그 위에 설치된 운영체제에 따라서 각 ABI을 바탕으로 운영체제가 제공하는 함수들이 달라지게 된다. 그래서 window, macOs에서 각각 프로그램을 개발해야한다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

- 프로그램이 실행된다는 것은 cpu가 명령어를 처리할 수 있도록 메인메모리에 프로그램(process)이 올라와 있다는 뜻이다. 위 그림은 운영체제가 항상 메모리에 올라와 있다는 것을 의미한다. 즉 운영체제는 컴퓨터의 시작과 끝 동안 항상 실행되고 있는 프로그램이다.

2. 운영체제의 진화 과정

- serial processing

  • 사람들이 컴퓨터를 사용하기 위해서 서로 차례를 기다려야 했다.
  • 프로그램을 돌리기 전에 직접 프로그램을 세팅해야 했었고
  • 직접 하드웨어와 상호작용하면서 프로그램을 실행시켰다.

- simple batch system

  • 이때부터 운영체제의 조상인 모니터프로그램이라는 개념이 생겨났다.
  • 사용자들은 여러 프로그램을 메모리에 전부다 집어넣고 프로그램 실행은 모니터가 순차적으로 하도록 했다.
  • 모니터는 항상 컴퓨터 메모리에 상주하고 있고 모니터가 프로그램들의 순서를 control했다.
  • control이 job에게 넘어가면 processor가 사용자의 프로그램을 실행하고 control이 monitor에게 넘어가면 processor가 모니터를 실행하였다.
  • 이때 모니터에게 사용자 프로그램을 실행시키라고 명령하기 위해 JCL이라는 언어를 사용하였다. 이 언어를 이용해서 사용자 프로그램을 실행하기 위해 어떤 컴파일러를 쓰고 어떤 데이터를 사용해라 등을 전달했다.

- 모니터의 등장 이후 하드웨어에 대한 많은 기능 요구들이 생겨났다. 예를 들면 사용자 프로그램이 돌아갈때 모니터의 메모리 영역을 침범하지 못하게 하거나 인터럽트를 통해 흐름을 전환할 수 있는 요구들이 생긴 것이다.

- 따라서 두가지 모드가 생겨났다. 

- user mode : 사용자 프로그램이 실행되는 순간으로 컴퓨터의 보호를 위해 허용되지 않은 명령(특정 메모리 영역 접근 등)을 막아놓은 상태이다.

- kernel mode : 운영체제가 동작하는 순간으로 하드웨어를 제어하기 위한 거의 모든 동작이 가능하다. 커널모드에 접근하는 것이 해킹의 목적이다.

- Batch Multiprogramming

  • 이전 uniprogramming 방식에서는 프로그램하나씩 돌아갔고 i/o장치의 작업등을 기다리는데 cpu idle이 자주 발생하였다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

  • 여러 프로그램을 메모리에 올려 두고 쪼개서 프로그램들을 돌아가면서 실행시키는 multiprogramming이 등장했다.
  • cpu i/o등을 기다려야 하는 순간에 다른일을 계속 하고 있도록 한 것이다. (cpu 사용률의 극대화)
  • 이것을 Multitasking이라고 하고 사용자는 동영상을 보면서 인터넷으로 쇼핑을하는 일이 가능해 진 것이다.
  • 운영체제가 cpu에게 순차적으로 실행할 프로그램들을 알려주고 i/o의 응답이 오면 하던일을 멈추고 인터럽트를 처리하도록하는 등의 관리자 역할을 수행할 수 있게 된 것이다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

- Time-Sharing Systems

  • 사실상 batch multiprogramming과 거의 동일하나 목적에서만 살짝 차이가 있다.
  • 여러 사용자(a,b,c,d)가 pc를 사용한다고 했을때, 처음 0.1초동안 a의 작업을 처리해주고 다음 0.1초동안은 b, 다음 0.1초 동안은 c, 다음 0.1초는 d의 작업을 돌아가면서 processor가 처리를 해주는 것이다. 그럼 네명의 사용자는 각자 pc가 나만 사용하고 있는 것처럼 착각하도록 만들 수 있다.
  • 이렇게 즉각적인 응답시간을 확보해주기위해 여러 프로그램을 일정시간 돌아가면서 실행하는 것을 time sharing이라고 한다.

3. 문제점들의 발생

- 멀티프로그래밍이 도입되면서 해결해야하는 문제점들이 생겨나기 시작했다. 앞으로 이 문제들을 현대의 운영체제는 어떻게 해결했는지 살펴볼 것이다.

- 프로세스들을 왔다갔다 실행하면서 이전에 작업하던 내용들을 잊어버리면 어떡하지?

- 만약 여러 프로세스들이 한꺼번에 컴퓨터의 자원(프린터 등)을 요구한다면? 

- 만약 두 프로세스가 서로 한명이 완료되기를 기다리는 상태라면 영원히 수행되지 못하고 기다리나?

4. 프로세스

- 프로세스는 프로그램이 실행되기 위해 프로그램 일부를 메인메모리에 올려둔 것을 말한다.

- 즉 실행되고있는 프로그램이 프로세스라고 생각하면 된다.

- 프로세스는 크게 다음요소들로 구성되어있다.

  • 실행되는 프로그램 코드
  • 프로그램이 사용할 데이터
  • context(processor의 register 값들)

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

- process list가 각 프로세스의 시작위치를 알고 있다.

- processor는 B의 실행이 끝났으면 현재 cpu의 register값들을 B의 context에 저장한다. 그리고 이어서 실행할 A프로세스의 context를 가져온다. 이렇게 A를 이어서 실행한다.

- 이렇게 processor가 여러 프로세스를 번갈아 실행할때 context를 바꿔주는 것을 context-switching이라고 한다.

- 운영체제는 이처럼 process managment를 수행하게되고 더 자세한 내용을 뒤에서 다루어보자.

5. Memory Management

- 운영체제의 또 다른 주요 역할이다.

- 예를들면 프로세스마다 서로의 메모리 영역을 벗어나지 않도록 해야하고 필요한 데이터의 위치를 찾아갈 수 있어야할 것이다.

- 가상메모리, paging

  • cpu는 메인메모리에 있는 데이터만 접근할 수 있다. 하지만 메인메모리는 용량의 한계가 있다. 가상메모리는 무한의 가까운 메모리를 사용하는 것 처럼 느끼게 해주는 방법으로 뒤에서 자세히 알아보자.
  • 사용자의 프로그램(프로세스)은 항상 메모리의 같은 위치에 올라가지 않는다.  하지만 프로그램 코드에서는 예를들면 0번지에 접근하라 등의 코드로 작성되어있다. 그렇다면 cpu는 0번지에 접근하라는 명령어를 수행하면서 어떻게 매번 다른위치에 올라가있는 데이터를 찾아갈 수 있을까? 뒤에서 그 답을 찾아보자.

6. Microkernel Architecture

- 점점 새로운 구조의 운영체제의 개발에 대한 노력이 있었다. 그중 하나가 microkernel architecture이다.

- 운영체제의 필수적인 몇가지 요소만 분리해서 kernel안에 두고 나머지는 kernel밖, 서버에서 수행하도록한 구조이다.

- 프로세스관리, 메모리관리, interprocess communication등의 핵심기능은 core에 둔다.

- 반면 여러 부가적인 기능들은 plugin을 통해 수행할수 있도록 한다.

7. Multithreading

- 프로세서가 하나의 프로세스를 수행할때를, 프로세스를 독립적인 부분들로 나누어서 실행할 수 있는 단위를 만들고 동시에 독립적인 부분들을 실행하는 것을 말한다.

- 그 독립적인 부분들을 하나의 thread라고 한다.

- 1부터 1000까지 합을 구하는 프로세스가 있다고 하자. 그럼 1-333, 334-666, 667-1000 세 쓰레드로 동시에 합을 구하고 세 결과물을 합하는 방식으로 멀티쓰레딩의 예를 들 수 있다.

8. Symmetric Multiprocessing(SMP)

- 앞에서 Symetric Multiprocessor를 간략히 살펴보았다. 여러 프로세서가 메인메모리, i/o 모듈, system bus를 공유하는 형태인데 여러 프로세스를 여러 프로세서에게 할당해서 동시에 일처리할 수 있게 된다.(병렬처리)

- 이때 프로세스를 누군가에게 어떻게 나누어 줄 것이고 동시에 처리되도록 나누어 줌으로써 생기는 문제들을 살펴보게 될 것이다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

- 위에 그림에서는 세개의 프로세스가 하나의 cpu에서 돌아가면서 실행된다. (interleaving)

- 반면 아래그림에서는 process1, process2, process3가 동시에 병렬적으로 번갈아가면서 처리된다. (interleaving & overlapping)

728x90
반응형