Abraham Silberschatz, Peter B. Galvin, Greg Gagne의 "Operating System 9th"를 기반으로 운영체제 내용을 정리
1.1 운영체제가 할 일(What Operating System Do)
컴퓨터 시스템은 하드웨어, 운영체제, 응용 프로그램 및 사용자로 구분된다.
- 하드웨어(Hardware) : CPU, 메모리 및 I/O 장치로 구성되어 기본 계산용 자원을 제공
- 운영체제(Operating System) : 다양한 사용자를 위해 다양한 응용 프로그램 간의 하드웨어 사용을 제어하고 조정
- 응용 프로그램(Application Program) : 워드 프로세서, 스프레드 시트, 컴파일러, 그리고 웹 브라우저 등 자원이 어떻게 사용될지 정의
운영체제는 컴퓨터 시스템이 동작할 때 이들 자원을 적절하게 사용할 수 있는 방법을 제공한다.
운영체제는 다른 프로그램이 유용한 작업을 할 수 있는 환경을 제공한다. 운영체제의 역할은 사용자 관점(User View)과 시스템 관점(System View)으로 나눠볼 수 있다.
사용자 관점(User View) 🔗
사용자의 관점은 사용되는 인터페이스에 따라 달라진다.
- Personal Computer의 경우
- 사용자들은 키보드, 마우스 System unit으로 구성된 PC 앞에서 작업한다.
- 한 사용자가 자원을 독점하도록 설계되었으며, 사용자가 수행하는 작업을 최대화하는 것이 목표이다.
- 운영체제는 사용의 용이성을 위해 설계되고, 자원의 이용의 효율성에는 전혀 신경 쓰지 않는.
- 대형 컴퓨터나 미니 컴퓨터에 연결된 터미널을 사용하는 경우
- 사용자들은 동일한 컴퓨터에 대해 다른 터미널을 접근한다.
- 자원을 공유하며 정보를 교환할 수 있다.
- 운영체제는 자원 이용을 극대화하도록 설계되어 있어 CPU 시간, 메모리 및 I/O 등이 효율적으로 사용됨
- 워크스테이션과 서버의 네트워크에 연결된 워크스테이션을 사용하는 경우
- 사용자들은 자유롭게 사용할 수 있는 전용 자원을 가지게 된다.
- 하지만 네트워킹과 프린트 서버 등을 공유하므로, 개인의 사용 용이성과 자원 이용이 조화가 이루도록 설계된다.
시스템 관점(System View) 🔗
운영체제는 하드웨어와 가장 밀접하게 연관된 프로그램이다. 따라서 운영체제를 자원 할당자(Resource Allocator)로 볼 수 있다. 컴퓨터 시스템은 CPU 시간, 메모리 공간, 파일 저장 공간, I/O 장치 등 다양한 문제를 해결해야 한다. 운영체제는 제어 프로그램(Control program)으로, 입출력 장치의 제어와 작동에 깊이 관여한다.
운영체제의 정의 🔗
일반적으로, 운영체제에 대한 완벽한 정의는 없다. 운영체제가 존재하는 이유는 운영체제가 유용한 컴퓨터 시스템을 만드는 과정에서 발생하는 문제점을 해결하기 위한 적절한 방법이기 때문이다.
컴퓨터 시스템의 근본 목적은 사용자 프로그램을 실행하고, 사용자의 문제의 해결을 보다 쉽게 해주는 데 있다. 이러한 목적을 위해 컴퓨터 하드웨어가 제작되며, 순수 하드웨어만으로는 사용이 쉽지 않아 응용 프로그램이 개발되었다. 다양한 프로그램들은 입출력 장치의 통제와 같이 공통적인 연산을 필요로 한다. 여기에 자원을 제어하고 할당하는 공통 기능을 하나의 소프트웨어로 통합한 것이 운영체제이다.
보다 일반적인 정의로 운영체제는 컴퓨터에서 항상 수행되는 프로그램으로 일반적으로 커널(Kernel)이라 불린다.
1.2 컴퓨터 시스템의 구성(Computer-System Organization)
현대의 범용 컴퓨터 시스템은 공유 메모리에 대한 접근을 제공하는 공통 버스에 의해 연결된 여러 개의 장치 제어기(디스크 드라이브, 오디오 장치, 비디오 디스플레이)와 하나 이상의 CPU로 구성되어 있다.
컴퓨터 시스템 연산(Computer-System Operation) 🔗
컴퓨터를 구동하면 부트스트랩 프로그램(bootstrap program)이라는 초기화 프로그램이 실행된다 이 프로그램은 컴퓨터 내의 ROM(Read-Only Memory)이나 EEPROM(Electrically Erasable Programmable Read-Only Memory)에 저장되어 있으며, 주로 펌웨어라고 불린다. 부트스트랩 프로그램은 CPU 레지스터, 장치 제어기, 메모리 내용 등을 포함한 시스템을 초기화하고, 운영체제의 커널을 찾아 메모리에 적재해야 한다.
커널이 적재되고 실행되면 시스템과 사용자에게 서비스를 제공해야 한다. 일부 서비스는 커널이 아닌 시스템 프로그램에 의해 제공되며 이들은 부팅 시 메모리에 적재되는 시스템 프로세스(System processes)나 시스템 데몬(System daemons)이다. UNIX의 경우 첫 시스템 프로세스는 init
이며, 이 프로세스는 또 다른 데몬을 실행시킨다. 이 단계가 끝나면 시스템이 완전히 부팅된 상태이며 시스템은 이벤트가 발생하기를 기다린다.
이벤트가 발생하면 하드웨어 또는 소프트웨어로부터 발생한 인터럽트(Interrupt)에 의해 신호가 보내진다. 하드웨어는 시스템 버스를 통해 CPU에 신호를 보내 인터럽트를 발생시키고 소프트웨어는 시스템 호출(System Call)이라 불리는 특별한 연산을 실행하여 인터럽트를 발생시킨다.
CPU가 인터럽트 되면, CPU는 하던 일을 멈추고, 즉시 고정된 위치로 실행을 옮긴다. 이러한 고정 위치는 일반적으로 인터럽트를 위한 서비스 루틴이 위치한 시작 주소를 가지고 있다. 그리고 인터럽트 서비스 루틴이 실행된다. 인터럽트 서비스 루틴의 실행이 완료되면, CPU는 인터럽트 되었던 연산을 재개한다.
인터럽트는 매우 빠르게 처리되어야 하므로 인터럽트 루틴에 대한 포인터들의 테이블을 이용한다. 일반적으로 포인터들의 테이블은 하위 메모리(첫 100개 정도의 위치)에 저장된다. 이들 위치에는 여러 장치에 대한 인터럽트 서비스 루틴의 주소가 들어가 있다. 인터럽트가 요청되면, 인터럽트를 유발한 장치를 위한 인터럽트 서비스 루틴의 주소를 제공하기 위해 인터럽트 벡터(Interrupt Vector)가 인터럽트 요청과 함께 주어진 고유의 유일한 장치 번호로 색인된다.
인터럽트 구조는 인터럽트된 명령의 주소를 반드시 저장해야 하며, 복귀하기 전에 상태를 복원해야 한다. 인터럽트를 실행한 후 저장되었던 복귀 주소를 프로그램 카운터에 적재하고, 인터럽트에 의해 중단되었던 연산이 인터럽트가 발생되지 않았던 것처럼 다시 시작된다.
저장 장치 구조(Storage Structure) 🔗
CPU는 명령어를 메모리에서만 가져올 수 있으므로 프로그램을 수행하려면 프로그램이 반드시 메모리에 있어야 한다.
범용 컴퓨터는 대부분의 프로그램을 메인 메모리(Random-Access Memory, RAM)라 불리는 재기록 가능한 메모리에서 가져온다. 또한 ROM과 같은 다른 형태의 메모리도 사용한다.
ROM은 변경할 수 없으므로 bootstrap 프로그램과 같은 정적 프로그램을 저장한다.
모든 형태의 메모리는 바이트의 배열을 제공한다. 각 바이트는 자신의 주소를 가지고 있다. 상호 작용은 특정 메모리 주소들에 대한 일련의 적재(load) 또는 저장(store) 명령을 통하여 이루어진다.
- Load : RAM으로부터 CPU 내부의 레지스터로 한 바이트 또는 한 워드를 옮김
- Store : 레지스터의 내용을 RAM으로 옮김
RAM은 모든 프로그램을 담기엔 너무 작고 비싸다. 그리고 전원이 꺼지면 저장된 데이터들이 사라지는 휘발성(Volatile) 저장 장치이다. 그래서 컴퓨터 시스템은 메인 메모리의 확장으로 보조 저장 장치를 제공한다. 보조 저장 장치의 주요 요건은 대량의 데이터를 영구히 보존할 수 있어야 한다는 점이다. 자기 디스크(Magnetic Disk), 광학 디스크(Optical Disk), SSD(Soli-State Disk)는 비휘발성(Non-volatile) 기억 장치다. 반면 메인 메모리, 캐시(Cache), 레지스터(Registers)는 휘발성 기억장치다.
입출력 구조(I/O Structure) 🔗
저장 장치는 컴퓨터 내의 여러 형태의 입출력 장치 중의 하나이다. 시스템의 신뢰성과 성능에 미치는 중요성 때문에 운영체제의 코드의 많은 부분들은 I/O 관리에 할애된다.
인터럽트 구동 방식의 I/O는 적은 양의 데이터를 전송하는 데에는 문제가 없으나 디스크 I/O와 같은 대량의 데이터를 전송하는 데에는 높은 Overhead를 초래한다. 이 문제를 해결하기 위하여 직접 메모리 접근(Direct Memory Access, DMA) 장치가 사용된다.
장치에 대한 버퍼 및 포인터, I/O 카운트를 설정한 후 장치 제어기는 CPU의 개입 없이 메모리로부터 자신의 버퍼 장치 또는 버퍼로부터 메모리로 데이터 블록 전체를 전송한다. 이 경우 블록 전송이 완료될 때마다 인터럽트가 발생한다.
몇몇 고가의 시스템은 버스 대신에 스위치 구조를 사용한다. 이 시스템은 공유 버스를 사용하기 위한 사이클을 경쟁하지 않고 다수의 구성요소들이 다른 구성요소들과 동시에 통신하는 것이 가능하다. 이 경우 DMA의 사용은 더욱 효과적이다.
1.3 컴퓨터 시스템 구조(Computer-System Architecture)
컴퓨터 시스템은 사용된 범용 처리기의 수에 따라 분류 가능한 다양한 방식으로 구성될 수 있다.
Single-Processor Systems 🔗
싱글 프로세서 시스템은 사용자 프로세스의 명령어를 포함하여 범용 명령어 집합을 수행할 수 있는 하나의 주 CPU를 가지고 있고, 대부분의 시스템들이 특수 목적의 전용 처리기를 가지고 있다. 이 전용 처리기는 디스크나 키보드 또는 그래픽 제어기와 같은 특정 장치 처리기의 형태로 제공되거나 메인프레임에서와 같이 시스템의 구성요소들 간의 데이터를 빠르게 전송할 수 있는 I/O 처리기와 같은 범용 처리기에 가까운 형태로 제공된다.
Multiprocessor Systems 🔗
멀티 프로세서 시스템(병렬 시스템 또는 멀티코어 시스템)은 하나 이상의 처리기를 가지며, 컴퓨터 버스, Clock, Memory와 주변 장치를 공유한다.
멀티 프로세서 시스템은 세 가지 주요 장점을 가지고 있다.
- 증가된 처리량(Throughput) : 처리기 수를 증가하여 짧은 시간에 더욱 많은 일을 수행할 수 있다. 그러나 N개의 처리기를 사용할 경우 속도 증가율이 N배가 되지 않고, N보다 작다. 즉, 다수의 처리기가 하나의 task를 위해 협력할 경우, 모든 부분이 정확히 동작하도록 유지하기 위해 약간의 오버헤드가 유발된다.
- 규모의 경제 : 프로세서가 주변 장치, 대용량 저장 장치, 전원 공급 장치를 공유하고 있기 때문에 멀티 프로세서는 여러 개의 싱글 프로세서에 비해 비용을 절약할 수 있다.
- 증가된 신뢰성 : 만약 기능들이 여러 개의 프로세서에 분산된다면, 한 프로세서가 고장 나더라도 시스템이 멈추는 것이 아니라, 단지 속도만 느려지게 된다. 하드웨어의 수준에 비례해 계속적인 서비스를 제공하는 능력을 우아한 퇴보(Graceful degradation)라 부른다. 이렇게 성능을 저하함으로써 작업을 계속 유지하는 시스템을 장애 허용 시스템(Fault tolerant)이라고 부른다.
현재 사용되고 있는 멀티 프로세서 시스템은 비대칭 멀티 프로세싱(Asymmetric Multiprocessing)과 대칭 멀티 프로세싱(Symmetric Multiprocessing) 두 가지 형태를 가진다.
- 비대칭 멀티 프로세싱
- 각 프로세서에 특정 태스크가 할당되는 방식
- 하나의 메인 프로세서가 시스템을 제어한다. 다른 프로세서들은 메인 프로세서의 명령을 수행하거나 미리 정의된 태스크를 수행한다. 이러한 기법은 주종 관계를 정의한다. 메인 프로세서는 자겁을 스케줄 하고 종속 프로세서에 작업을 할당한다.
- 대칭 멀티 프로세싱
- 각 프로세서가 운영체제 내의 모든 작업을 수행하는 방식
- SMP(Symmetric multiprocessing)은 모든 프로세서가 대등하다는 것을 의미한다. 각 프로세서는 Register와 Cache를 가지지만, 모든 프로세서는 메모리를 공유한다.
- 이 모델의 장점은 성능을 저하를 일으키지 않고 많은 프로세스들이 동시에 실행할 수 있다. 그러나 CPU가 독립적이기 때문에 하나는 유휴 상태이고 다른 하나는 과부가 걸려서 비효율적일 수 있다. ➞ 신중하게 설계를 해야 한다.
멀티 프로세싱에서는 계산 능력을 늘리기 위해 CPU를 추가한다. 그리고 메모리 접근 모델을 UMA(Uniform Memory Access)에서 NUMA(Non-Uniform Memory Access)로변경하게 만들 수도 있다.
UMA는 임의의 CPU로부터 임의의 RAM을 같은 시간에 접근할 수 있는 상태를 말한다.
NUMA는 일부 메모리는 다른 위치의 메모리보다 접근 시간이 오래 걸려 성능 저하를 유발한다.
최근 CPU를 설계하는 트렌드는 하나의 칩에 여러 개의 코어(core)를 포함시키는 것이다. 이러한 멀티 프로세서 시스템은 멀티 코어라 불린다. 이 방식은 칩 내의 통신이 칩 사이의 통신보다 빠르기 때문에 싱글 코어를 가진 여러 개의 칩보다 효율적이고 전력도 덜 소모한다. 멀티 코어 시스템은 멀티 프로세서 시스템인 반면 모든 멀티 프로세서 시스템은 멀티 코어인 것은 아니다.
💡 컴퓨터 시스템 구성요소 정의
- CPU : 명령을 실행하는 하드웨어
- Processor : 하나 이상의 CPU를 포함하는 물리적 칩
- Core : CPU의 기본 계산 단위
- MultiCore : 동일한 CPU가 여러 컴퓨팅 코어를 포함하는 구조
- MultiProcessor : 여러 프로세서를 포함하는 시스템
마지막으로 블레이드 서버는 다수의 Processor Board, I/O Board, Networking Board들이 하나의 chassis 안에 장착되는 형태를 가진다. 블레이드 서버와 전통적인 멀티 프로세서 시스템과의 차이점은 각 블레이드-프로세서 보드는 독립적으로 부팅될 수 있고 자기 자신의 운영체제를 수행한다는 것이다.
클러스터형 시스템 (Clusterd Systems) 🔗
여러 CPU를 가진 시스템의 또 다른 유형은 클러스터형 시스템이다. 클러스터 시스템은 둘 이상의 독자적 시스템 또는 노드들을 연결하여 구성한다는 점에서 멀티 프로세서 시스템과 차이가 난다. 각 노드는 통상 싱글 프로세서 시스템 또는 멀티코어 시스템이고, 그러한 시스템은 약 결합(Loosely Coupled)이라 부른다.
클러스터형( clustered )의 정의는 딱 정해져 있지는 않다. 일반적으로 저장 장치를 공유하고 있는 LAN(Local Area Network)과 같은 네트워크로 연결한 시스템을 클러시스터 시스템이라고 부른다.
클러스터링은 통상 고가용성(Hig-Availability)을 제공하기 위해 사용된다. 즉, 클러스터 내 하나 이상의 컴퓨터 시스템이 고장 나더라도 서비스는 계속 제공된다.
클러스터링은 비대칭형 클러스터링(Asymmetric Clustering) 또는 대칭형 클러스터링(Symmetric Clustering)으로 구성된다.
- 비대칭형 클러스터링 : 다른 컴퓨터들이 응용 프로그램을 실행하는 동안 한 컴퓨터는 상시 대기 모드(hot-standby mode) 상태를 유지한다. 이 상시 대기 모드의 호스트는 활성 서버들을 감시하는 작업만을 수행한다. 만약 서버가 고장 난다면 상시 대기 모드의 호스트가 활성 서버가 된다.
- 대칭형 클러스터링 : 둘 이상의 호스트들이 응용 프로그램을 실행하고 서로를 감시한다. 가용한 하드웨어를 모두 사용하기 때문에 대칭형 구성이 더 효율적이다.
한 클러스터가 네트워크로 연결된 다수의 컴퓨터 시스템으로 구성되므로 클러스터는 고성능 컴퓨팅 환경(High-performence Computing Environments)을 제공할 수 있다. 이러한 시스템은 클러스터 내의 모든 컴퓨터에서 Application을 병렬로 수행할 수 있으므로 싱글 프로세서나 SMP 시스템보다 훨씬 큰 컴퓨팅 능력을 제공할 수 있다.
다른 형태의 클러스터로 병렬 클러스터(Parallel Cluster)와 WAN을 이용한 클러스터링이 있다.
1.4 운영체제의 구조 (Operating System Structure)
운영체제의 가장 중요한 부분은 멀티 프로그램(Multi-program) 능력이다. 멀티 프로그래밍(Multi-programming)은 CPU가 수행할 작업을 항상 하나 가지도록 작업을 구성함으로써 CPU 이용률을 증가시킨다.
💡 멀티 프로그래밍의 아이디어
1. 운영체제는 한 번에 여러 작업을 메모리에 적재하며, 이들 작업은 처음에 디스크의 작업 풀(Pool) 내에 유지된다.
2. 메모리에 있는 작업 중에서 하나를 선택해 실행을 시작한다.
3. non-multi programming 시스템에서는 CPU가 쉬게 되지만 멀티 프로그래밍은 운영체제가 다른 작업으로 전환해 그 작업을 수행한다.※ 멀티 프로그래밍 시스템은 여러 가지 시스템 자원을 효율적으로 이용할 수 있는 환경을 제공하지만, 사용자를 위해 컴퓨터 시스템과 상호 작용은 제공하지 않는다.
여기서 더 확장된 시스템이 시분할(Time Sharing) 시스템 또는 멀티태스킹(Multi-Tasking)이다. 시분할 시스템은 CPU가 여러 프로세스를 전환하며 프로세스를 실행하지만 전환이 매우 빈번하여 사용자에게 빠른 응답 시간(Response Time)을 제공하게 된다.
시분할 시스템과 멀티 프로그래밍 시스템은 여러 작업이 메모리에 동시에 올리는 방식이다. 만약 몇몇 작업이 메모리로 적재될 준비가 되었고, 그들 전부를 메모리에 보관할만한 공간이 불충분하다면, 시스템은 그들 중 몇 개를 선택해야 한다. 이러한 과정을 잡 스케줄링(Job Scheduling)이라 한다. 그리고 여러 개의 작업이 동시에 실행 준비가 되어 있으면, 시스템은 그 둘 중 하나를 선택하는 과정을 CPU 스케줄링(CPU Scheduling)이라 한다.
시분할 시스템에서 운영체제는 적절한 응답 시간을 보장해야 한다. 이는 스와핑(Swapping)이 보장해준다. 스와핑은 프로세스를 메인 메모리에서 디스크로 Swap-in 또는 Swap-out시킨다.
합리적인 응답 시간을 보장하는 더 일반적인 방법은 가상 메모리(Virtual Memory)인데, 이것은 일부만 메모리에 있는 작업의 수행을 허용하는 기법이다. 가상 메모리는 물리 메모리(Physical Memory)보다 더 큰 프로그램을 구동할 수 있도록 해준다.
1.5 운영체제 연산 (Operating-System Operations)
앞에서 언급한 것처럼 운영체제는 Interrupt Driven 방식이다. 인터럽트가 없다면 운영체제는 이벤트가 발생하기를 기다린다.
Trap 또는 Exception(0으로 나누기 또는 유효하지 않은 메모리 접근) 혹은 사용자 프로그램의 운영체제 서비스 수행 요청에 의해 발생되는 소프트웨어의 생성된 인터럽트이다.
이중 연산 모드(Dual-mode and Multi-mode Operations) 🔗
운영체제는 적어도 두 개의 독립된 연산 모드, 즉 사용자 모드와 커널 모드를 필요로 한다. 모드 비트(mode bit)는 하나의 비트가 현재의 모드를 나타내기 위해 컴퓨터의 하드웨어에 추가되었다. 모드 비트의 사용으로 운영체제를 위하여 실행되는 작업과 사용자를 위해 실행되는 작업을 구분할 수 있다. 사용자가 Application을 위하여 실행될 때는 시스템은 사용자 모드있게 되고, 사용자 Application이 운영체제로부터 서비스를 요청(시스템 콜)하면 이 요청을 수행하기 위해서는 사용자 모드(1)에서 커널 모드(0)로 전환해야 한다.
이러한 이중 모드(Dual-mode)는 잘못된 사용자로부터 운영체제, 하드웨어를 비롯한 시스템과 사용자를 보호할 수 있다. 하드웨어는 특권 명령(Privileged Instruction)이 커널 모드에서만 수행되도록 허용한다. 사용자 모드에서 특권 명령을 수행하려고 시도하면, 하드웨어는 이를 실행하지 않고, 잘못된 명령으로 간주해 운영체제에게 트랩을 보낸다.
가상화를 지원하는 CPU는 VMM(Virtual Machin Manger)이 제어하고 있는지를 나타내기 위해 별도의 모드 비트를 사용한다. 이 모드에서 VMM이 커널보다는 작지만 사용자 프로세스보다는 큰 권한을 가진다.
시스템 콜은 하드웨어에 의해 하나의 소프트웨어 인터럽트로 취급된다. 제어가 Interrupt Vector를 통해 운영체제 내의 서비스 루틴으로 전달되고, 모드 비트가 커널모드로 설정된다. 커널은 인터럽트를 발생시킨 명령을 검사하여 어떤 시스템 콜이 발생했는지를 결정한다. 이때 전달된 인수가 사용자 프로그램 요청하는 서비스 타입을 표시한다.
타이머(Timer) 🔗
사용자 프로그램이 무한 루프에 빠지거나 시스템 서비스 호출에 실패하여, 제어권을 운영체제에게 넘겨주지 않는 상황을 방지해야 한다. 이러한 문제를 해결하기 위해 타이머(Timer)를 사용한다. 타이머는 운영체제에게 제어권을 보장하기 위해 특정 주기에 인터럽트를 발생시킨다. 이 시간은 고정 혹은 가변일 수 있으며, 가변 타이머는 일반적으로 고정률 클락(fixed-rate clock)과 카운터로 구현된다. 운영체제는 카운터를 설정하고 매 틱(Tick)할 때마다 카운터가 감소시킨다. 카운터가 0이 되면 인터럽트가 발생한다.
사용자에게 제어권을 넘겨주기 전에, 운영체제는 타이머가 인터럽트를 할 수 있도록 설정되었는지 확인한다. 타이머가 인터럽트를 발생시키면, 제어권은 자동적으로 운영체제에게 넘어가며, 운영체제는 인터럽트를 치명적인 오류로 취급하거나 프로그램에게 더 많은 시간을 줄 수 있다. 타이머의 값을 변경하는 명령은 특권 명령이다.
1.6 프로세스 관리 (Process Management)
디스크에 있으면 프로그램, 메모리에 로드되면 프로세스이다. 프로그램은 해당 명령이 CPU에 의해 수행되지 않으면 아무 일도 할 수 없다.
프로세스는 자신의 일을 수행하기 위해 CPU 시간, 메모리, 파일 그리고 I/O 장치를 포함한 여러 가지 자원을 필요로 한다. 이러한 자원은 프로세스가 생성될 때 제공될 수도 있고 실행되는 동안 할당될 수도 있다.
프로그램 그 자체는 프로세스가 아님을 강조한다. 즉, 하나의 프로그램은 디스크에 저장된 파일의 내용과 같이 수동적(passive) 개체인 반면, 프로세스는 다음 수행할 명령을 지정하는 프로그램 카운터(Program Counter)를 가진 능동적(active)인 개체이다. CPU는 한 프로세스의 작업이 끝날 때까지 프로세스의 명령들을 차례대로 수행한다. 싱글 스레드 프로세스는 하나의 프로그램 카운터를 가지고 있으며, 멀티 스레드 프로세스는 여러 개의 프로그램 카운터를 가지고 있다.
한 프로세스는 한 시스템 내 작업의 단위이다. 이러한 시스템은 프로세스의 집합으로 구성되는데, 프로세스들 중 일부는 운영체제 프로세스들이며, 나머지는 사용자 프로세스들이다. 이들 모든 프로세스는 그들 간의 하나의 CPU를 멀티플렉싱(Multi-plexing)함으로써 병행 수행될 수 있다.
운영체제는 프로세스 관리와 연관해 다음과 같은 활동에 대한 책임을 진다.
- CPU에 프로세스와 스레드 스케줄 하기
- 사용자 프로세스와 시스템 프로세스의 생성과 제거
- 프로세스의 일시 중지와 재수행
- 프로세스 동기화를 위한 기법 제공
- 프로세스 통신을 위한 기법 제공
1.7 메모리 관리
메인 메모리는 현대 컴퓨터 시스템의 핵심이며, 방대한 범위를 갖는 바이트(각 바이트는 자신의 주소를 가짐)의 대용량 배열이다. 그리고 CPU와 입출력 장치에 의하여 공유되는, 빠른 접근이 가능한 데이터의 저장소이다.
프로그램이 수행되기 위해서는 반드시 절대 주소로 매핑(mapping)되고 메모리에 적재되어야 한다. CPU 이용률과 사용자에 대한 컴퓨터의 응답 속도를 개선하기 위해, 메모리에 여러 개의 프로그램을 유지해야 하며 이를 위해서 메모리 관리 기법이 필요하다.
운영체제는 메모리 관리와 관련하여 다음과 같은 일을 담당해야 한다.
- 메모리의 어느 부분이 현재 사용되고 있으며 누구에 의해 사용되고 있는지를 추적해야 한다.
- 어떤 프로세스(또는 그 일부)들을 메모리에 적재하고 제거할 것인가를 결정해야 한다.
- 필요에 따라 메모리 공간을 할당하고 회수해야 한다.
1.8 저장장치 관리(Storage Management)
운영체제는 저장 장치의 물리적 특성을 추상화하여 논리적인 저장 단위인 파일을 정의한다. 운영체제는 파일을 물리적 매체로 매핑하며, 저장 장치를 통해 파일에 접근한다.
파일 시스템 관리 (File System Management)🔗
파일 관리는 가장 눈에 띄는 운영체제의 구성 요소 중의 하나이다. 컴퓨터는 여러 타입의 물리적 매체에 정보를 저장할 수 있다.
파일은 파일 생성자에 의해 정의된 관련 정보의 집합체이다. 일반적으로 파일은 프로그램(소스와 목적 프로그램 형태)과 데이터를 나타낸다.
운영체제는 대용량 저장 매체와 그것을 제어하는 장치를 관리함으로써 파일의 추상적인 개념을 구현한다. 또한 파일은 사용을 쉽게 하기 위해서 통상 디렉터리들로 구성된다. 마지막으로, 다수의 사용자가 파일에 접근하려고 할 때는 누구에 의해서, 그리고 어떤 방법으로 파일이 접근되어야 하는가를 통제하는 것이 바람직하다.
운영체제가 파일 관리를 위하여 담당하는 기능
- 파일의 생성 및 제거
- 디렉터리 생성 및 제거
- 파일과 디렉터리를 조작하기 위한 프리미티브(이용 가능한 가장 단순한 요소)의 제공
- 파일을 보조 저장 장치로 매핑
- 안정적인(비휘발성) 저장 매체에 파일을 백업
대용량 저장장치 관리(Mass Storage Management)🔗
메인 메모리는 모든 데이터와 프로그램을 수용하기에 용량이 너무 적다. 또한 전원이 꺼질 경우 데이터가 사라지기 때문에, 컴퓨터 시스템은 반드시 메인 메모리 내용을 저장하기 위해 보조 저장 장치를 제공해야 한다.
운영체제가 디스크 관리를 위하여 담당하는 기능
- 자유 공간(free-space)의 관리
- 저장 장소 할당
- 디스크 스케줄링
캐싱(Caching) 🔗
캐싱은 컴퓨터 시스템의 중요한 원리이다. 데이터는 어떤 저장 장치에 보관되고 정보가 사용됨에 따라 보다 빠른 장치인 캐시에 일시적으로 복사된다. 만약 캐시에 데이터가 없다면 메인 메모리 시스템으로부터 데이트를 가져와서 사용해야 하며, 이때 이 정보가 다음에 곧 다시 사용될 확률이 높다는 가정 하에 캐시에 넣는다.
캐시의 크기는 한계가 있기 때문에, 캐시 관리가 설계의 중요한 문제가 된다. 캐시 크기와 교체 정책을 잘 선택하면 성능이 크게 향상된다.
CPU가 내부 레지스터를 유지할 뿐만 아니라, 로컬 캐시도 갖고 있는 멀티 프로세서 환경 하에서는 상황이 복잡해진다. 이런 환경에서는, A의 복사본이 동시에 여러 캐시에 존재할 수 있다. 여러 개의 CPU가 모두 동시에 실행될 수 있으므로, 한 캐시에 있는 A값이 경신될 경우 A가 존재하는 모든 캐시에 즉각적으로 반영되어야 한다. 이런 상황을 캐시 일관성(Cache Coherecy) 문제라고 하며, 이는 일반적으로 하드웨어 문제이다.
입출력 시스템 관리(I/O Systems Management) 🔗
운영체제의 목적 중의 하나는 사용자에게 특정 하드웨어 장치의 특성을 숨기는 것이다. 단지 장치 드라이버만이 자신에게 지정된 특정 장치의 특석을 알고 있다.
입출력 시스템(I/O Systems)
- 버퍼링, 캐싱, 스풀링을 포함한 메모리 관리 구성 요소
- 일반적인 장치 드라이버 인터페이스
- 특정 하드웨어 장치들을 위한 드라이버
1.9 보호와 보안(Protection and Security)
보호(Protection)란 컴퓨터 시스템이 정의한 자원에 대해 프로그램, 프로세스 또는 사용자들의 접근을 제어하는 기법이다. 이 기법은 시행될 제어에 대한 명세와 이들을 강제 시행하기 위한 방법을 규정하는 수단을 반드시 제공해야 한다.
보안 기능은 외부 또는 내부의 공격을 방어하는 것이다.
보호와 보안을 제공하기 위해서는 시스템의 모든 사용자들을 구분을 할 수 있어야 한다. 사용자들을 구분하기 위해 사용자 식별자, 그룹 식별자, 유효 사용자 식별자를 이용한다.
1.10 커널 자료 구조(Kernel Data Structures)
커널 구현에는 배열(Array), 스택(Stack), 큐(Queue), 연결리스트(Linked List), 트리(Tree), 해시함수(Hash)와 맵(Map), 비트맵(Bitmap) 등의 자료구조가 사용된다.
1.11 컴퓨팅 환경(Computing Environments)
모바일 컴퓨팅(Mobile Computing) 🔗
모바일 컴퓨팅은 휴대용 스마트폰과 태플릿 컴퓨터의 컴퓨팅 환경을 말하는데, 이동 가능하고 가볍다는 물리적 특징을 공유한다. 다양한 센서를 통해 사용자 인터페이스를 확장시켰다.
온라인 서비스에 접근을 허용하기 위해 휴대장치는 전형적으로 IEEE 표준 8.0.2.11 무선 또는 휴대전화 데이터 망을 사용한다.
클라이언트 서버 컴퓨팅(Client-Server Computing) 🔗
현대의 시스템은 클라이언트 시스템에 의해 생성되는 요구를 만족시키기 위한 서버 시스템으로 동작한다. 이런 분산 시스템을 Client-Server 시스템이라고 부른다.
서버 시스템은 넓게 컴퓨팅 서버와 파일 서버로 분류할 수 있다.
- 컴퓨팅-서버 시스템은 클라이언트가 어떤 작업을 요청할 수 있는 인터페이스를 제공한다. 그 결과 서버는 그 작업을 수행하고 결과를 클라이언트에게 돌려보낸다.
- 파일-서버 시스템은 클라이언트가 파일을 생성, 수정, 읽기 및 제거할 수 있는 파일 시스템 인터페이스를 제공한다.
피어간 컴퓨팅(Peer-to-Peer Computing) 🔗
클라이언트와 서버가 서로 구별되지 않고, 시스템 상의 모든 노드가 피어로 간주되고 각 피어는 서비스를 요청하느냐 제공하느냐에 따라 클라이언트 및 서버로 동작한다.
가상화(Virtualization) 🔗
가상화는 운영체제가 다른 운영체제 내에서 하나의 응용처럼 수행될 수 있게 한다.
클라우드 컴퓨팅(Cloud Computing) 🔗
클라우드 컴퓨팅은 컴퓨팅, 저장장치는 물론 애플리케이션조차도 네트워크를 통한 서비스로 제공하는 컴퓨팅 유형이다. 어떤 면에서 클라우드 컴퓨팅은 가상화를 그 기능의 기반으로 사용하기 때문에 가상화의 논리적 확장이다.
여러 유형의 클라우드 컴퓨팅
- Public cloud - 서비스를 위해 지불 가능한 사람은 누구나 인터넷을 통해 사용 가능한 클라우드
- Private cloud - 한 회사가 사용하기 위해 운영하는 클라우드
- Hybrid cloud - public과 private 부분을 모두 포함하는 클라우드
- Software as a Service(SaaS) - 인터넷을 통해 사용 가능한 하나 이상의 애플리케이션
- Platform as a Service(PasS) - 인터넷을 통해 사용하도록 애플리케이션에 맞게 준비된 소프트웨어 스택
- Infrastructure as a Service(IaaS) - 인터넷을 통해 사용 가능한 서버나 저장장치
클라우드 컴퓨팅 환경은 다수 유형의 조합을 제공하기 때문에 이들 클라우트 컴퓨팅의 유형들은 서로 독립적이 아니다.
실시간 내장형 시스템(Real-Time Embedded Systems) 🔗
내장형 시스템은 현재 가장 유행하는 컴퓨터의 형태이다. 이 장치들은 아주 특정한 작업만 수행하는 경향이 있다. 그리고 항상 실시간 운영체제는 수행한다. 실시간 시스템은 프로세서의 작동이나 데이터의 흐름에 엄격한 시간 제약이 있을 때 사용된다.
1.12 오픈소스 운영체제(Open-Source Operating Systems)
오픈소스 운영체제는 컴파일된 이진 형태보다는 소스 코드 형태로 받을 수 있는 운영체제를 의미한다. Linux는 가장 유명한 오픈소스 운영체제이다.