해당 포스트는 Abraham Silberschatz, Peter B. Galvin, Greg Gagne의 『Operating System Concept 9th』를 기반으로 작성하였다.

해당 저서는 '운영체제의 바이블'로서, 일명 '공룡책'으로 불린다.

전공면접을 준비하면서, 『Operating System Concept 9th』를 기반으로 운영체제 내용을 정리하기로 하였다.

 

CHAPTER 1 - Overview

- CHAPTER 1에서는 책 전반에 걸친 내용을 요약하는 내용이 담겨있다.
- 이 책의 뒷부분을 공부하기 전에 CH.1을 정확히 이해하면, 뒷부분을 공부하는 데 수월해진다.
- 책에 대한 공부를 모두 마친 뒤에 다시 한번 읽으면, 전체 내용을 정리하는 데 도움이 된다.

 


1.0 Introduction

- 운영체제는 컴퓨터 하드웨어(Hardware)를 관리하는 프로그램이다.

- 운영체제는 응용 프로그램을 위한 기반을 제공한다.

- 운영체제는 컴퓨터 사용자와 컴퓨터 하드웨어 사이에서 중재자 역할을 수행한다.

- 대형 컴퓨터의 운영체제는 주로 하드웨어의 이용을 최적화하는 데 중점을 둔다.

- Personal 컴퓨터에서는 복잡한 게임, 비즈니스 등 Application 지원에 중점을 둔다.

- 휴대용 컴퓨터 운영체제는 사용자가 컴퓨터와 쉽게 Interface 할 수 있는 환경을 제공하는 데 중점을 둔다.

- 즉, 운영체제의 종류와 목적에 따라 편리성, 효율성 등 다양한 기준에 따라 설계되었다.

 


1.1 What Operating Systems Do

- Computer System은 하드웨어, 운영체제, 응용 프로그램, 사용자로 구분된다.

1. 하드웨어(Hardware) : CPU(중앙처리장치), 메모리, I/O (입출력 장치)로 구성되어 기본 계산용 자원을 제공

2. 운영체제(OS) : 응용 프로그램 간의 하드웨어 사용을 제어하고 조정한다.

3. 응용 프로그램 : 워드 프로세서, 스프레드 시트, 컴파일러 등. 이들 자원이 어떻게 사용될지 결정

- Computer System은 하드웨어, 소프트웨어 및 데이터로 구성되었다고 볼 수도 있다.

- 운영체제(OS)는 컴퓨터 시스템이 동작할 때, 이들 자원을 적절하게 사용할 수 있는 방법을 제공한다.

- 운영체제는 government와 유사하다. 즉, 다른 프로그램이 유용하게 사용할 수 있는 '환경'을 제공한다.

 

* 사용자 관점(User View)

- Computer 사용자의 관점은 사용되는 Interface에 따라 달라진다.

1. Personal Computer의 경우

- 보통 컴퓨터 사용자들은 키보드, 마우스, System Unit으로 구성된 PC 앞에서 작업을 한다.

- 이 System은 한 사용자가 자원을 독점하도록 설계되었으며, 사용자가 수행하는 작업을 최대화하는 게 목표이다.

- 이 경우, '사용의 용이성'을 위해 설계되고, '자원의 이용'의 효율성에는 전혀 신경을 쓰지 않는다.

2. 대형 컴퓨터 혹은 미니컴퓨터에 연결된 터미널에 앉아 있는 경우

- 다른 사용자들은 동일한 컴퓨터에 대해 다른 Terminal을 접근하고 있다.

- 이들 사용자들은 자원을 공유하며, 정보를 교환할 수 있다.

- 따라서, 이 경우 OS는 '자원의 이용'을 극대화하도록 설계되어 있어, CPU 시간, 메모리 등이 효율적으로 사용된다.

3. WorkStation과 Server의 Network에 연결된 Workstation과 관계된 경우

- 이 경우, 사용자들은 자유롭게 사용할 수 있는 전용 자원을 가지게 된다.

- 그러나, 네트워킹과 프린트 서버 등을 공유하므로, '사용의 용이성'과 '자원의 이용'이 조화가 이루도록 설계된다.

* 시스템 관점(System View)

- 운영체제는 하드웨어와 가장 밀접한 프로그램이며, 운영체제를 Resource Allocator(자원 할당자)로 볼 수 있다.

- 운영체제는 CPU Time, 메모리 공간 등을 효율적으로 사용하기 위한 자원의 관리자 역할을 수행한다.

- 운영체제는 '제어 프로그램(Control Program)'으로, 입출력 장치의 제어와 작동에 깊이 관여한다.

* 운영체제의 정의(Definition of OS)

- 운영체제의 완벽한 정의는 없다.

- 운영체제가 존재하는 이유는 운영체제가 유용한 컴퓨터 시스템을 만드는 과정에서 발생하는 문제점을 해결하기 위한 적절한 방법이기 때문이다.

- 컴퓨터 시스템의 근본 목적은 사용자 프로그램을 실행하고, 사용자 문제의 해결을 보다 쉽게 해주는 데 있다.

- 이 목적을 달성하기 위해 컴퓨터 하드웨어가 제작되며, 순수 하드웨어만으로는 해결되지 않아 응용 프로그램이

개발되었다. 다양한 프로그램들은 입출력 장치의 통제와 같이 공통적인 연산을 필요로 한다.

- 여기에 자원을 할당하고 제어하는 공통 기능을 하나의 소프트웨어로 통합한 것이 운영체제이다.

- 보다 일반적인 정의로, 운영체제는 컴퓨터에서 항상 수행되는 프로그램으로 커널(Kernel)이라고 불린다.


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

* 컴퓨터 시스템 연산(Computer-System Operation)

- 현대의 범용 컴퓨터 시스템은 Shard Memory에 대한 접근을 제공하는 공통 버스에 의해 연결된

여러 개의 장치 제어기(오디오 장치, 비디오 디스플레이)와 하나 이상의 CPU로 구성되어 있다.

- 컴퓨터가 구동을 시작할 때, 수행할 초기 프로그램으로 부트스트랩(BootStrap) 프로그램이 있다.

- 이 프로그램은 보통 펌웨어라고 알려져 있는 컴퓨터 내의 ROM이나 EEPROM에 저장된다.

- 이 프로그램은 CPU 레지스터로부터 장치 제어기, 메모리 내용 등을 포함한 시스템의 모든 면을 초기화한다.

- 이 프로그램은 운영체제를 적재하는 방법 및 수행을 시작하는 방법을 알아야 한다.

- 이러한 목적을 달성하기 위해, Bootstrap Program은 운영체제의 커널을 찾아 메모리에 적재해야 한다.

- UNIX에서는 첫 시스템 프로세스가 'init'이며, 이 단계가 끝나면 시스템이 완전히 부트 된 상태이다.

이후, 시스템은 무슨 사건(event)가 발생하기를 기다린다.

- 사건이 발생하면, Hardware 또는 Software로부터 발생한 인터럽트(interrupt)에 의해 신호가 보내진다.

- Hardware는 어느 순간이든 System Bus를 통해 CPU에 신호를 보내고, 인터럽트를 발생시킬 수 있다.

- Software는 System Call이라 불리는 특별한 연산을 통해 인터럽트를 발생시킬 수 있다.

- CPU가 인터럽트 되면, CPU는 하던 일을 중단하고 즉시 고정된 위치로 실행 위치를 옮긴다.

- 이 위치는 일반적으로 인터럽트를 위한 서비스 루틴이 위치한 시작 주소를 가지고 있으며, 인터럽트 서비스 루틴이 시작된다.
  인터럽트 서비스 루틴이 완료된 뒤에는, 인터럽트 됐던 연산을 재개한다.

- 인터럽트 구조는 인터럽트 된 명령의 주소를 반드시 저장해야 하며, 복귀하기 전에 상태를 복원해야 한다.

- 인터럽트를 서비스한 후, 저장되어 있던 복귀 주소를 Program Counter에 적재하고, 인터럽트에 의해 중단되었던

연산이 인터럽트가 발생하지 않았던 것처럼 다시 시작한다.

 

* 저장 장치 구조(Storage Structure)

- CPU는 명령어를 단지 메모리부터 가져올 수 있으므로, 프로그램을 수행하려면 프로그램이 반드시 메모리에

있어야 한다.

- 컴퓨터는 대부분의 프로그램을 주 메모리(RAM)에서 가져온다. (재기록 가능)

- 컴퓨터는 다른 형태의 Memory도 사용한다. (ROM, EEPROM)

- ROM의 경우 BootStrap Program과 같은 정적 프로그램을 저장한다.

- 모든 형태의 Memory는 Byte의 배열을 제공하며, 각 바이트는 자신의 주소를 가지고 있다.

- 상호 작용은 특정 메모리 주소들에 대한 일련의 Load, Store 명령을 통해 이루어진다.

- Load는 주 메모리(RAM)로부터 CPU 내부의 레지스터라 한 바이트(or word)를 옮기는 것이다.

- Store는 레지스터의 내용을 주 메모리로 옮긴다.

- 이상적으로는, 프로그램과 데이터가 주 메모리에 영구히 존재하기를 원하지만, 아래 두 가지 이유로 불가능하다.

1. 주 메모리(RAM)은 모든 필요한 프로그램과 데이터를 영구히 저장하기에는 너무 작다.

2. 주 메모리(RAM)은 전원이 공급되지 않으면, 그 내용을 잃어버리는 휘발성 저장 장치이다.

- 이에 따라, 대부분의 컴퓨터 시스템은 주 메모리의 확장으로 보조 저장 장치를 제공한다.

- 보조 저장 장치의 주요 요건은 대량의 데이터를 영구히 보존할 수 있어야 한다는 점이다.

- 이 외에도, 캐시 메모리, CD-ROM, 자기 테이프 등 여러 저장 장치가 존재한다.

- 다양한 저장 장치 시스템 간의 주된 차이점은 속도, 가격, 크기, 휘발성이다.

 

* 입출력 구조(I/O Structure)

- 시스템의 신뢰성과 성능에 미치는 영향 때문에, 그리고 장치들의 다양한 특질 때문에 운영체제 코드의 많은 부분들이 입출력을 관리하는데 할애된다.

- 디바이스 드라이버를 이용하는 인터럽트 구동 방식은 적은 양의 데이터를 전송하는 데에는 문제가 없으나, 디스크 입출력과 같은 대량의 데이터를 전송하는 데에는 높은 Overhead를 초래한다.

- 위의 문제를 해결하기 위해 DMA(Driect Memory Access) 장치가 사용된다.

- DMA를 사용하여 CPU의 개입 없이, (메모리→자신의 버퍼) or (버퍼→메모리)로 데이터 블록 전체를 전송한다.

- 한 바이트마다 인터럽트가 발생하는 게 아니라 블록 전송이 완료될 때마다 인터럽트가 발생한다.


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

* 단일-처리기 시스템(Single-Processor Systems)

- 단일 처리기 시스템은 사용자의 process 명령어를 포함한 범용 instruction을 수행할 수 있는 하나의 주 CPU를 가진다.

 

- 거의 대부분의 시스템들이 특수 목적의 전용 처리기를 가지고 있다.

- 이 전용 처리기는 디스크나 키보드 또는 그래픽 제어기와 같은 특정 장치 처리기의 형태로 제공되거나, 메인 프레임에서와 같이 시스템의 구성요소들 간의 데이터를 빠르게 전송할 수 있는 입출력 처리기와 같은 범용 처리기에 가까운 형태로 제공될 수도 있다.

* 다중-처리기 시스템(Multi-Processor Systems)

- 다중 처리기 시스템(병렬 시스템 또는 멀티 코어 시스템)은 하나 이상의 처리기들을 가지며,

컴퓨터 버스, 그리고 때로는 Clock, Memory와 주변 장치를 공유한다.

- 다중 처리기 시스템의 대표적인 장점으로는 아래 3가지가 있다.

1. Throughput(증가된 처리량) : 처리기의 수가 증가하여 보다 짧은 시간에 더욱 많은 일을 수행할 수 있다. N 개의 처리기를 사용한다고 할 때, 속도 증가율이 N 배가 되지는 않는다. 이는 다수의 처리기가 하나의 일을 수행하기 위해 협력할 경우, 모든 부분이 정확하게 동작하기 위해 약간의 Overhead가 발생하기 때문이다. 또한, 공유 자원에 대한 경쟁이 더해져 예상되는 이득을 더 떨어뜨린다.

2. Economy of Scale(규모의 경제) : 다중 처리기는 여러 개의 단일 시스템에 비해 비용을 절약할 수 있는데, 이는 처리기들이 주변 장치, 대용량 저장 장치 등을 공유하고 있기 때문이다.

3. Increased Reliability(증가된 신뢰성) : 만약 기능들이 여러 개의 처리기에 적절히 분산되어 수행된다면, 한 처리기가 고장 나더라도 시스템이 곧바로 정지하는 것이 아니라, 단지 속도만 느려지게 된다. 컴퓨터 시스템의 '증가된 신뢰성' 속성은 많은 응용 프로그램에게 필수적이다. 살아남은 하드웨어 수준에 비례해 계속적인 서비스를 제공하는 능력을 우아한 퇴보(Graceful degradation)라고 한다. 어떤 시스템은 어느 한 구성요소의 고장에도 불구하고 동작을 계속할 수 있기 때문에, 우아한 퇴보를 넘어 결함 허용(Fault Tolerant)이라고 불린다.

- 다중 처리기 시스템은 두 가지 형태를 가진다. (asymmetric[비대칭적], symmetric[대칭적])

- 비 대칭적 다중처리 방식에는 각 처리기에 특정 Task가 할당되는 방식이며, 하나의 주 처리기가 시스템을 제어한다.
  다른 처리기들은 주 처리기의 명령을 수행하거나, 미리 정의된 태스크를 수행한다.
  주 처리기는 작업을 스케줄하고, 종속 처리기에 작업을 할당한다.

 

- 대칭적 다중 처리방식은 각 처리기가 운영체제 내의 모든 작업을 수행하는 방식이다.

대칭적 다중처리(SMP)는 모든 처리기가 대등하다는 것을 의미하며, 처리기 간에는 주종 관계가 없다.

각 처리기는 자신의 Register와 Cache를 가지지만, 모든 처리기는 Memory를 공유한다. (아래 그림 참고)

- 대칭적 다중 처리와 비대칭적 다중 처리의 차이점은 하드웨어나 소프트웨어의 결과일 수 있다.

- 다중 처리에서는 계산 능력을 늘리기 위해 CPU를 추가한다.

- 다중 처리는 Memory Access Model을 UMA에서 NUMA로 변경하게 만들 수도 있다.

   (UMA : Uniform Memory Access, NUMA : Non-Uniform Memory Access)

- UMA는 임의의 CPU로부터 임의의 RAM을 같은 시간에 접근할 수 있는 상태를 말한다.

- NUMA의 경우, 일부 메모리는 다른 위치의 메모리보다 접근 시간이 오래 걸려 성능 저하를 유발한다.

- CPU를 설계하는 최근의 경향은 하나의 chip에 여러 개의 Core를 포함시키는 것이며, 이를 멀티 코어(Multi-core)라 부른다.

- 이 방식은 칩 내의 통신이 칩 사이의 통신보다 빠르기 때문에 단일 코어를 가진 여러 개의 칩보다 효율적이다.

- Multi-Core System이 다중-처리기 시스템인 반면에, 모든 다중-처리기 시스템이 멀티 코어는 아니다.

* 클러스터형 시스템(Clustered Systems)

- 여러 CPU를 가지는 시스템의 또 다른 유형으로, 둘 이상의 독자적 시스템 또는 노드들을 연결하여 구성한다는 점

에서 다중 처리기 시스템과 차이가 난다. 그러한 시스템은 약 결합(Loosely coupled)라고 간주된다.

- 각 독자적 시스템(노드)들은 단일 처리기 시스템 또는 멀티 코어 시스템일 수 있다.

- 클러스터링(Clustering)은 통상 높은 가용성(Availability)를 제공하기 위해 사용된다.

- 즉 클러스터 내 하나 이상의 컴퓨터 시스템이 고장 나더라도 서비스는 계속 제공된다.

- 비 대칭형 클러스터링에서는 다른 컴퓨터들이 응용 프로그램을 실행하는 동안 한 컴퓨터는 hot-standby 모드

상태를 유지한다. 이 모드의 host는 활성 서버를 감시하는 작업만을 수행하며, 서버가 고장 난다면 hot-standby

모드의 호스트가 활성 서버가 된다.

- 대칭형 클러스터링에서는 둘 이상의 호스트들이 응용 프로그램을 실행하고, 서로를 감시한다. 가용한 하드웨어를

모두 사용하기 때문에 대칭형 구성이 더 효율적이다. 대칭형 구성이 효율적으로 동작하기 위해서는 하나 이상의

응용 프로그램들이 실행 가능해야 한다.

 


1.4 운영체제의 구조(Operating-System Structure)

- 운영체제(Operating System)는 프로그램이 수행될 환경을 제공한다.

- 운영체제는 다양한 발전 방향을 따라 구성되었기 때문에, 내부 구조가 매우 다양하다.

- 운영체제의 가장 중요한 면은 다중 프로그래밍(Multi-Programming)을 할 수 있는 능력이다.

- 일반적으로, 단일 사용자는 CPU 또는 입출력 장치를 항상 바쁘게 유지할 수 없다.

- 다중 프로그래밍(Multi-Programming)은 CPU가 수행할 작업을 항상 하나 가지도록 작업을 구성하여, CPU 이용률(CPU Utilization)을 증가시킨다.

- 기본 idea는 아래와 같다.

1. 운영체제는 한 번에 여러 작업을 메모리에 적재하며, 이들 작업은 처음에 디스크의 작업 풀 내에 유지된다.

2. 보통 운영체제는 메모리에 있는 작업 중에서 하나를 선택해 실행을 시작한다.

3. 비다중 프로그래밍 시스템에서는 CPU가 쉬게 되지만, 다중 프로그래밍 시스템에서는 운영체제가 단순히

다른 작업으로 전환해 그 작업을 수행한다.

- Multi-Tasking(시분할)은 다중 프로그램의 논리적 확장이다.

- Multi-Tasking 시스템에서는 CPU가 다수의 작업들을 교대로 수행하지만, 매우 빈번하게 교대가 일어나기

때문에, 프로그램이 실행되는 동안에 사용자들은 각자 자기의 프로그램과 상호 작용할 수 있다.

- Multi-Tasking(시분할) 운영체제는 각 사용자에게 시분할 되는 컴퓨터의 작은 부분을 제공하기 위해서

'CPU 스케줄링'과 '다중 프로그래밍'을 사용한다.

- Multi-Tasking과 다중 프로그래밍 운영체제에서는 여러 작업이 메모리에 동시에 유지되어야 한다.

만약 몇몇 작업이 메모리로 옮겨올 준비가 되었고, 그들 전부를 메모리에 보관할만한 공간이 불충분한다면, 시스템은 그들 중 몇 개를 선택해야 한다. 이러한 결정을 하는 것을 작업 스케줄링이라고 한다.

- 여러 개의 작업이 동시에 실행 준비가 되어 있으면, 시스템은 그들 중 하나를 선택해야 한다. 이러한 결정을

내리는 것을 CPU 스케줄링이라고 한다.

- Multi-Tasking 시스템에서 운영체제는 적절한 응답 시간을 보장해주어야 한다. 이는 종종 스와핑(Swaping)에 의해 달성되는데, 스와핑은 프로세스를 주 메모리에서 디스크로 적절하게 Swap-in, Swap-out 시킨다.

- 합리적인 응답시간을 보장하는 더 일반적인 방법은 가상 메모리(Virtual Memory)이다.

- 이 방법은 일부만 메모리에 있는 작업의 수행을 허용하는 기법이다. (9장에서 논의)

- 이 기법의 주요한 이점은 프로그램이 물리 메모리의 크기보다 더 커도 된다는 것이다.

- 더욱이 가상 메모리는 주 메모리를 크고 균등한 저장 장치의 배열로 추상화하여, 사용자에게 보이는 논리 메모리(Logical Memory)를 물리 메모리(Physical Memory)로부터 분리시킨다.

 


1.5 운영체제 연산(Operating-System Operations)

- 현대의 운영체제는 interrupt-driven 방식이다.

- 실행할 프로세스, 서비스할 입출력 장치, 응답해야 할 사용자도 없다면 운영체제는 그저 기다리게 된다.

- Trap(or exception)은 오류 혹은 사용자 프로그램의 운영체제 서비스 수행 요청에 의해 유발되는

소프트웨어에 의해 생성된 인터럽트이다.

* 이중 연산 모드

- 운영체제의 적절한 동작을 보장하기 위해 운영체제 코드의 실행과 사용자 정의 코드의 실행을 구분할 수 있어야 한다.

- 이에, 두 개의 독립된 연산 모드인, 사용자 모드(User Mode)와 커널 모드(Kernel Mode)를 정의하여 사용한다.

- 보통 모드 비트(Mode bit)를 컴퓨터의 하드웨어에 추가하여, 현재 Mode를 구분한다.

- Computer System이 User Application을 위해 실행될 때는, System이 User Mode에 있어야 한다.

- User Application이 운영체제로부터 서비스를 요청하면, User Mode에서 Kernel Mode로 전환해야 한다.

- 보통 System Boot 시, 하드웨어는 Kernel Mode에서 시작한다, 이후 운영체제가 적재되고, 사용자 모드에서 사용자 프로세스가 시작된다. Trap이나 Interrupt가 발생할 때마다, 하드웨어는 사용자 모드에서 커널 모드로 전환해야 한다. 그러므로 운영체제가 컴퓨터의 제어를 얻을 때마다, 항상 커널 모드에 있게 된다.

- 이중 모드는 일부 명령을 특권 명령으로 지정함으로써, 잘못된 사용자로부터 운영체제를, 그리고 잘못된 사용자 서로를 보호하는 방법을 제공한다.

- System Call은 수행될 때마다, 하드웨어에 의해 하나의 Software Interrupt로 취급된다.

* 타이머

- 운영체제가 CPU에 대한 Control을 유지할 수 있도록 보장해야 한다.

- 즉, 사용자 프로그램이 무한 루프에 빠지거나 서비스 호출에 실패하여, 운영체제가 Control 하지 못하는 상황이 생기는 상황을 방지해야 한다. 이러한 목적을 달성하기 위해 타이머(Timer)를 사용할 수 있다.

- 타이머(Timer)는 지정된 시간 이후 컴퓨터를 인터럽트 하도록 설정할 수 있다.

- 고정 시간마다, 혹은 가변 타이머를 사용하여 클락이 tick할 때마다 counter가 감소하게 되며, counter가 0이

되면, 인터럽트가 발생하게 된다.

 


1.6 프로세스 관리 (Process Management)

- 실행 중인 프로그램(program in execution) = 프로세스(Process)

- 프로그램은 passive(수동적)인 개체인 반면, 프로세스는 프로그램 카운터를 가진 active(능동적) 개체.

- 프로그램은 해당 instruction이 CPU에 의해 수행되지 않으면, 아무 일도 할 수 없다.

- 프로세스는 자신의 일을 수행하기 위해 CPU 시간, 메모리, 파일, 그리고 입출력 장치를 포함한 여러 가지 장치를 필요로 한다.

- 한 프로세스는 한 시스템 내의 작업의 단위이다. 이러한 시스템은 프로세스의 집합으로 구성되는데, 프로세스들 중 일부는 운영체제 프로세스들(시스템 코드 수행)이며, 나머지는 사용자 프로세스들(사용자 코드 수행)이다.

- 운영체제는 프로세스 관리와 연관해 다음과 같은 활동에 대한 책임을 진다.

1. CPU에 Process와 thread를 Schedule 하기.

2. User Process와 System Process의 생성과 제거

3. Process의 일시 중지와 재수행

4. Process Synchronization를 위한 기법 제공

5. Process Communication을 위한 기법 제공

 


1.7 메모리 관리(Memory Management)

 

- 주 메모리(Main Memory, RAM)은 현대 컴퓨터 시스템 작동에 중추적인 역할을 한다.

- 메모리는 수십만에서 수십억까지의 범위를 갖는 Byte의 대용량 Array이다.

- 각 바이트는 자신의 주소를 가지며, 주 메모리(Main Memory)는 CPU와 입출력 장치에 의하여 공유되는

빠른 접근(quickly accessible)이 가능한 데이터의 저장소이다.

- 주 메모리(Main Memory)는 일반적으로 CPU가 직접 주소를 지정할 수 있고, 그리고 직접 접근할 수 있는

유일한 대량 메모리이다.

- 예를 들어, CPU가 디스크에서 가져온 데이터를 처리하려면, 이들 데이터는 CPU가 생성된 입출력 호출에 의해 먼저 주 메모리로 전송되어야 한다. 마찬가지로 CPU가 명령을 수행하기 위해서는 명령이 주 메모리 내에 있어야 한다.

- 프로그램이 수행되기 위해서는 반드시 Absolute Address로 매핑(Mapping) 되고, 메모리에 적재되어야 한다.

- 프로그램을 수행하면서, 이 Absolute Address를 생성하여 메모리의 프로그램 명령어와 데이터에 접근한다.

- 프로그램이 종료된 뒤에, 프로그램이 차지하던 메모리 공간은 가용 공간으로 선언되고, 다음 프로그램에 적재되어 수행될 수 있다.

- CPU 이용률과 사용자에 대한 컴퓨터의 응답 속도를 개선하기 위해, 우리는 메모리에 여러 개의 프로그램을 유지해야 하며, 이를 위해서 메모리 관리 기법이 필요하다.

- 운영체제는 메모리 관리와 관련하여 아래와 같은 일을 담당해야 한다.

1. 메모리의 어느 부분이 현재 사용되고 있으며, 누구에 의해 사용되고 있는지를 추적해야 한다.

2. 어떤 프로세스들을 메모리에 적재하고, 제거할 것인가를 결정해야 한다.

3. 필요에 따라 메모리 공간을 할당하고 회수해야 한다.(Allocating/Deallocating memory space)

 


1.8 저장 장치 관리 (Storage Management)

* 파일 시스템 관리

- 파일은 파일 생성자에 의해 정의된 관련 정보의 집합체이다. (text 파일도 포함됨.)

- 컴퓨터는 여러 타입의 물리적 매체에 정보를 저장할 수 있다. (자기 디스크, 광디스크, 자기 테이프 등)

- 각 매체는 Disk-Drive, Tape-Drive와 같은 장치에 의해 제어되며, 이들 장치 또한 독특한 방식을 가지고 있다.

- 운영체제는 파일 관리를 위하여 다음과 같은 일을 담당한다.

1. 파일의 생성 및 제거

2. 디렉터리 생성 및 제거

3. 파일과 디렉터리를 조작하기 위한 프리미티브의 제공

4. 파일을 보조 저장 장치로 매핑

5. 안정적인 저장 매체에 파일을 백업.

* 대용량 저장 장치 관리

- Main Memory는 용량이 작고 휘발성이기 때문에, 내용을 저장하기 위해 보조 저장 장치를 제공해야 한다.

- 운영체제는 디스크 관리를 위해 다음과 같은 기능을 담당한다.

1. 자유공간(Free-Space)의 관리 2. 저장 장소 할당 3. 디스크 스케줄링

 

* 캐싱(Caching)

- 정보는 저장 장치에 보관되지만, 정보를 사용할 때 보다 빠르게 처리하기 위해 Cache에 일시적으로 복사된다.

- 특정 정보가 필요한 경우, 우선적으로 Cache에 그 정보가 있는지 검사하는 과정을 거친다.

- Cache에 해당 정보가 없을 경우, Main Memory System으로부터 그 정보를 가져와서 사용해야 한다.

- 이때, 이 정보가 다음에 다시 사용될 확률이 높다는 가정이 있다면, 그 정보를 Cache에 넣게 된다.

- Index Register와 같은 CPU 내부 프로그램 가능한 레지스터들은 주 메모리를 위한 고속의 Cache로 볼 수 있다.

- 전적으로 Hardware를 통해 구현된 Cache도 존재한다. 예를 들어, 다음에 수행될 것으로 예상되는 명령을 넣어

두는 명령 Cache가 이 경우에 해당된다.

- Cache의 크기에 한계가 있기 때문에, 캐시 관리(Cache Management)가 설계의 중요한 문제가 된다.

- 저장 장치 각 단계의 성능은 아래 그림과 같다.

 


1.9 보호와 보안(Protection and Security)

- 만약 컴퓨터 시스템이 다수의 사용자를 가지며, 다수의 프로세스의 병렬 수행을 허용한다면, 데이터에 대한 접근은 반드시 규제되어야 한다.

- 이를 위해 file, Memory segment, CPU 및 다른 자원들에 대해 운영체제로부터 적절한 허가를 획득한 Process만이 작업을 할 수 있도록 하는 기법이 필요하다.

- 예를 들어,

1. 메모리 주소 지정 하드웨어는 프로세스가 자신의 주소 영역에서만 실행될 수 있도록 보장한다.

2. 타이머는 모든 프로세스가 CPU의 제어를 얻은 후 결국에는 제어권을 양도하도록 보장한다.

3. 여러 주변 장치의 무결성이 보호받도록, 장치 제어 레지스터들에 사용자가 접근할 수 없게 한다.

 

 


1.10 커널 자료 구조(Kernel Data Structures)

* 리스트, 스택 및 큐 (List, Stack, Queue)

- 배열(Array)은 각 원소가 직접 접근될 수 있는 단순한 자료구조이다. (Main Memory는 하나의 배열로 구축)

- 배열은 각 항에 직접 접근할 수 있는 반면에, 리스트의 항들은 특정 순서로 접근해야 한다.

- 리스트는 데이터 값들의 집단을 하나의 Sequence로 표시해야 하며, 일반적으로 연결 리스트로 구현한다.

- 연결 리스트(Linked List)의 종류는 대표적으로 3가지가 있다.

 

 

- 스택(Stack)은 순차적 순서를 가진 자료구조로, LIFO(Last In, First Out)를 사용한다.

- 운영 체제는 함수를 호출할 때, Stack을 사용한다.

- 큐(Queue)는 순차 순서의 자료 구조로, FIFO(First In, First Out)을 사용한다.

- CPU에서 수행을 기다리는 Task들은 종종 Queue를 사용하여 구성될 수 있다.

 

* 트리 (Tree)

- 트리(Tree)는 데이터의 서열을 표시하는 데 사용 가능한 자료 구조이다.

- General Tree에서 부모는 임의의 수의 자식을 가질 수 있으며, Binary Tree에서는 최대 2개의 자식을 가질 수 있다.

- Binary Search Tree에서 한 항을 찾을 때, 최악의 경우 성능이 O(n)이다.

- Balanced Binary Search Tree에서는 n 개의 항을 가질 때, 트리의 최대 깊이가 lg(n)이며,

따라서 최악의 경우 성능이 O(lg n)이다.

* 해시 함수와 맵 (Hash Function & Map)

- Hash Function은 데이터를 입력으로 받아, 이 데이터에 산술 연산을 수행하여 하나의 수를 return 한다.

- 크기가 n인 List에서 데이터를 찾는 데 최악의 경우 O(n)의 비교가 필요한 반면, 테이블에서 해시 함수를 사용하여 데이터를 얻어올 경우, 최악의 경우 O(1)의 시간이 걸릴 수 있다.

- Hash Function의 까다로운 점은 두 개의 입력이 하나의 출력값을 가질 수 있다는 점이다.

- 즉, 두 개의 입력이 모두 테이블의 한 위치를 가리킬 수 있으며, 이를 해시 충돌(Hash Collision)이라 한다.

- 해시 충돌이 많아질수록, 해시 함수의 효율이 떨어지게 된다.

- Hash map은 Hash Function을 사용하여 [Key:Value]를 연관시킨다.

* 비트맵(Bitmap)

- 비트맵(Bitmap)은 n 개의 항의 상태를 나타내는 데 사용 가능한 n 개의 binary digit의 string이다.

 


1.11 계산 환경(Computing Environments)

- 전통적인 계산 환경의 경계가 흐려지고 있다.

- Mobile Computing은 휴대용 스마트폰과 태블릿 컴퓨터의 계산을 말한다.

- 분산 시스템은 물리적으로 떨어져 있는 컴퓨터들의 집합이다.

- 분산 시스템의 컴퓨터들은 사용자가 시스템 내의 다양한 자원들을 접근할 수 있도록

네트워크로 연결되어 있다.

- 가상화(Virtualization)은 운영체제가 다른 운영체제 내에서의 하나의 Application처럼 수행될 수 있게 한다.

- 클라우드 컴퓨팅은 computing, storage, application까지 네트워크를 통한 서비스로 제공하는 계산 유형이다.

 


1.12 오픈소스 운영체제 (Open-Source Operating System)

- 오픈소스 운영체제는 컴파일된 Binary code보다는 Source Code 형태로 받을 수 있는 운영체제를 의미한다.

- 오픈소스의 대표적인 운영체제로는 Linux, Solaris 등이 있다.

 


1.13 요약 (Summary)

- 운영체제는 하드웨어를 관리할 뿐 아니라 Application이 실행되기 위한 환경을 제공하는 소프트웨어이다.

- 컴퓨터가 Program을 수행하려면 Program이 Main Memory에 있어야 한다.

- 주 메모리는 메모리가 직접 접근할 수 있는 유일한 대량 저장 장치로서, 휘발성 저장 장치이다.

- 대부분의 컴퓨터 시스템은 주 메모리의 확장으로 보조 저장 장치를 제공한다.

- 보조 저장 장치는 대용량의 데이터를 영원히 보존할 수 있는 비휘발성 저장 장치이다.

- 단일 처리기 시스템(Single Processor System)은 하나의 Processor만을 가지고 있다.

- 다중 처리기 시스템(Multi Processor System)은 물리 메모리와 주변 장치들을 공유하는

둘 또는 그 이상의 처리기를 가지고 있다. (가장 일반적인 다중 처리기는 대칭형 다중 처리기이다.)

- CPU를 최대한 활용하기 위해, 현대의 운영체제들을 다중 프로그래밍(Multi Programming) 개념을 도입했다.

- 다중 프로그래밍에서는 한 번에 여러 job들을 Memory에 유지하므로, CPU는 항상 실행할 작업을 가지게 된다.

- 시분할 시스템(Multi-Tasking System)은 다중 프로그래밍의 확장이며, CPU 스케줄링 알고리즘은 작업들을

빠르게 교환해 가며 실행함으로써, 마치 각 작업이 동시에 실행되는 것 같은 착각을 주게 한다.

- 운영체제는 컴퓨터의 시스템의 정확한 동작을 보장해야 한다.

- 사용자 프로그램이 시스템의 정상적인 동작을 방해하는 것을 막기 위해, 하드웨어는 사용자 모드와 커널 모드를 가지고 있으며,
  여러 가지 Privileged instruction들은 Kernel Mode에서만 실행 가능하다.

- Timer는 무한 루프(Infinite Loop)를 방지하는 효과를 가지고 있다.

- Process는 운영체제에서 일의 기본적인 단위이다.

- Process Management는 프로세스의 생성 및 제거, 프로세스 간의 통신 및 동기화 기법을 포함한다.

- 운영체제는 어느 프로세스가 메모리의 어느 영역을 사용하고 있는지를 추적하여 메모리를 관리한다.

- 운영체제는 운영체제와 사용자를 보호하고 보안을 유지해야 한다.

- '보호' 기법은 컴퓨터 시스템이 제공하는 자원들에 대한 프로세스와 사용자의 접근을 제어한다.

- '보안' 기법은 외부 또는 내부의 공격에 대해 컴퓨터 시스템의 방어를 책임진다.

- 컴퓨팅은 다양한 환경에서 이루어진다.

- 전통적 컴퓨팅, 이동형 컴퓨팅, 분산 시스템, 클라우드 컴퓨팅 등이 있다.

- 오픈 소스에는 GNU/Linux, BSD UNIX, Solaris 등이 있다.


-Reference-

Abraham Silberschatz, Peter B. Galvin, Greg Gagne의 『Operating System Concept 9th』