운영체제란, Introduction to Operating Systems
운영체제란
•
운영체제는 컴퓨터 하드웨어 바로 위에 설치되어 컴퓨터의 하드웨어와 사용자 및 다른 모든 소프트웨어를 연결하는 소프트웨어 계층이다.
좁은 의미의 운영체제 vs. 넓은 의미의 운영체제
•
좁은 의미 : 커널
◦
운영체제의 핵심부분으로 메모리에 상주하는 부분
•
넓은 의미
◦
커널을 포함하여 각종 주변 시스템 유틸리티를 포함한 개념
운영체제의 기능
운영체제는 그 정의에서 알 수 있듯, 컴퓨터 하드웨어 ←→ 다른 소프트웨어/사용자 사이에서 중간자 역할을 수행한다. 따라서 운영체제는 다음의 두 가지 역할을 수행한다.
역할 1. 컴퓨터 시스템의 자원을 효율적으로 관리한다. (컴퓨터 하드웨어와의 인터렉션)
•
프로세서, 기억장치, 입출력 장치 등의 효율적 관리 (하드웨어 자원을 관리)
◦
사용자 간의 형평성 있는 자원 분배
◦
주어진 자원으로 최대한의 성능을 내도록
▪
실행중인 프로그램들에게 짧은 시간씩 CPU 를 번갈아 할당한다.
▪
실행중인 프로그램들에 메모리 공간을 적절히 분배한다.
•
프로세스, 파일, 메시지 등을 관리 (소프트웨어 자원 관리)
•
사용자 및 운영체제 자신을 보호
역할 2. 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공한다. (다른 소프트웨어 및 사용자와의 인터렉션)
•
동시에 접속한 사용자 혹은 동시에 실행되고 있는 프로그램들이 각자 자신의 컴퓨터에서 독자적으로 수행되는 것 같은 착각을 제공한다.
◦
= 실제로는 중앙의 큰 하나의 컴퓨터에서 실행되지만 이 곳에 접속한 서로 다른 사용자들은 마치 동시에 독자적으로 수행되는 것 같이 착각을 하게 된다.
•
하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행한다.
운영체제 분류
운영체제는 1) 동시작업가능여부, 2) 사용자 수, 3) 처리방식 등을 기준으로 분류될 수 있다.
기준 1. 동시작업가능여부에 따른 분류
•
단일작업 : 한번에 하나의 작업만 처리
◦
MS-DOS 프롬프트 상에서는 한 명령의 수행을 끝내기 전에 다른 명령을 수행시킬 수 없다.
•
다중작업 : 동시에 두 개 이상의 작업 처리
◦
UNIX, MS Windows 등 에서는 한 명령의 수행이 끝나기 전에 다른 명령이나 프로그램을 수행할 수 있다.
기준 2. 사용자의 수에 따른 분류 - 한 대의 컴퓨터를 여러 사람이 원격으로 동시에 접속하여 사용할 수 있는가?
•
단일 사용자 : MS-DOS, MS Windows
•
다중 사용자 : UNIX, NT server
기준 3. 처리방식에 따른 분류 (시분할, 실시간, 일괄처리)
•
시분할 방식
◦
여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용한다.
◦
일괄처리 시스템에 비해 짧은 응답 시간을 가진다. - UNIX
◦
interactive 한 방식
◦
보통 우리가 사용하는 컴퓨터에 사용되는 방식이다.
•
실시간(Realtime OS)
◦
정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 실시간 시스템을 위한 OS
◦
특수한 목적을 가진 시스템에서 주로 이용된다.
▪
원자로/공장제어, 미사일 제어, 반도체 장비, 로보트 제어 등
▪
예시) 반도체는 하루에 1개씩 만들어지는데, 중간에 정전 등으로 시스템이 멈추게 되면 하루에 한 개 만들어지던 반도체는 30일동안 한 개도 못만들어지게 된다.
◦
경성 실시간 시스템 (hard realtime system)
▪
중간에 중단될 경우, 영향도가 심각한 시스템
▪
예) 반도체 공정
◦
연성 실시간 시스템 (soft realtime system)
▪
중간에 중단되어도 영향도가 치명적이지는 않은 시스템
▪
예) 영화상영
•
일괄처리
◦
batch processing
◦
interactive 하지 않다.
◦
작업 요청 건들을 일정량 모아서 한꺼번에 처리하는 방식이다.
◦
작업이 완전히 종료될 때까지 기다려야 한다.
◦
예시) 초기 punch card 처리 시스템
몇 가지 용어
운영체제를 공부하다보면, 몇 가지 용어를 자주 만나게 된다.
•
multitasking
•
multi programming : 여러 프로그램이 메모리에 동시에 올라가 수행이 되는 것
•
time sharing : CPU 의 시간 분할하여 나눠쓴다는 의미를 강조
•
muliti process
위의 용어는 모두 하나의 CPU 에서 여러개의 프로그램을 처리할 때 쓰는 용어이다. 하지만 아래의 용어는 하나의 컴퓨터에 여러개의 CPU가 붙어있는 상태에서 쓰인다.
•
multiprocessor : 하나의 컴퓨터에 CPU (processor)가 여러개 붙어있음을 의미하다.
운영체제의 예
•
UNIX 계열
◦
대형 컴퓨터를 위해서 만들어진 운영체제
◦
코드의 대부분이 C언어로 작성되어있고
◦
다중 사용자를 지원하며, 동시 처리가 가능하다.
◦
높은 이식성을 가지고 있어서 하나의 컴퓨터에서 다른 컴퓨터로 운영체제를 이식하기 쉽다.
◦
최소한의 커널 구조를 가지고 있어서 웬만한 기능들은 제외하고 최소한의 핵심적인 부분만 커널에 담겨있으며
◦
복잡한 시스템에 맞춰 확장하기가 쉽다.
◦
소스코드가 대중에 공개되어있고 (Linux 를 제외하고는 이제 거의 공개되어있지 않다)
◦
프로그램 개발도 용이하다.
◦
다양한 버전
▪
System V, freeBSD, SunOS, Solaris
▪
Linux : 공개 소프트웨어 정신에 입각하여 아직까지도 소스코드가 공개되어있다.
•
안드로이드도 커널은 리눅스 커널을 쓰고 있음
•
DOS(Disk Operating System)
◦
MS 사에서 1981년 IBM-PC를 위해 개발한 단일 사용자용 운영체제이나
◦
제작할 당시 메모리를 지나치게 적게 산정하여 추후 관리가 어려워지게 되었다.
◦
메모리 관리능력의 한계(주 기억장치 : 640KB)로 점차 사라지게 되었다.
•
MS WINDOWS
◦
개인용 컴퓨터 PC를 위해서 만들어진 운영체제
◦
MS 사의 다중 작업용 GUI 기반 운영 체제
◦
Plug and play, 네트워크 환경 강화
◦
초창기에는 다소 불안정하다는 평이 많았지만, 요즘에는 전혀 그렇지 않다.
◦
DOS 용 응용 프로그램과 호환성을 제공한다.
◦
풍부한 지원 소프트웨어
•
운영체제의 다양한 형태
◦
초기만해도 UNIX vs. MS Windows 처럼 두 가지로 운영체제를 설명하곤 했는데, 요즘은 아래와 같이 다양한 형태의 OS들이 나오고 있다.
◦
Apple 의 Mac OS
◦
스마트폰 용 Android OS, IOS 등
◦
Handheld device 를 위한 OS
▪
PalmOS, Pocket PC, Tiny OS
운영체제의 구조
운영체제는 크게 보자면, CPU, Memory, Disk, I/O device 로 구성되어있다. 각 단계별로 운영체제가 고민해야하는 지점들이 존재한다.
CPU
•
누구한테 CPU를 줄까? = CPU 스케줄링
•
아주 빠른 장치이므로 짧은 주기로 CPU를 주고 뺃는 것이 가능하다.
•
일반 세상에서는 빨리 온 사람에게 먼저주는 것이 관례이다. 하지만 컴퓨터 세계에서는 그렇게 하는 것이 반드시 가장 좋은 방법은 아니다.
◦
예를 들어서 은행에서 먼저 온 사람을 먼저 봐주는 방식으로 일을 처리한다고 생각해보자. 만약에 1시간이 걸리는 업무를 처리하고 있는 사람이 중간에 있다면 그 이후의 사람들은 업무를 처리하지 못하는 병목현상이 발생하게 된다.
메모리
•
한정된 메모리를 어떻게 쪼개어 쓰지?
◦
공평하게 일정 구간씩 메모리를 나누면 될 것 같지만, 실제로는 그렇지 않다.
◦
실행하는 프로그램 많아질수록 한 프로그램 당 차지하는 메모리가 지나치게 작아지면서 프로그램 자체를 실행할 수 없게 되어버리기 때문이다.
◦
지금 실행하고 있는 프로그램에게 메모리를 몰빵해주면 더 수월하게 진행될 수 있다.
•
메모리가 꽉차서 안쓰는 프로그램을 내보내야할 때, 어떤 기준으로 내보낼까?
◦
미래에 잘 안쓸 프로그램부터 먼저 내보내면 된다.
◦
메모리에 올려진 뒤, 오랫동안 사용되지 않은 데이터가 있다면 내보내면 된다.
Disk
•
디스크에 파일을 어떻게 보관하지? 파일관리 (디스크 스케줄링)
◦
Head 를 어떻게 하면 적게 움직이고 빠르게 처리할 수 있을까
I/O Device
•
각기 다른 입출력 장치와 컴퓨터 간에 어떻게 정보를 주고 받게 할까? (입출력 관리)
•
I/O Device 는 인터럽트를 이용하여 이를 수행한다. 입출력이 감지되면, CPU에게 인터럽트를 걸어서 작업을 수행한다.
프로세스 관리
•
프로세스 생성과 삭제
•
자원할당 및 반환
•
프로세스 간 협력
그 외
•
보호 시스템
•
네트워킹
•
명령어 해석기 (command line interpreter)
공부하는 태도
운영체제는 사실 직접 뭔가를 만져보고 조작하면서 공부할 수 없기에 다소 어렵고 딱딱하게 느껴질 수 있다. 내가 사용자가 아니라 직접 운영체제가 되어 무엇을 해야하는지 생각하면서 강의를 수강하면 한결 재미있게 공부할 수 있을 것이다.