운영체제란, Introduction to Operating Systems
Last updated
Last updated
운영체제는 컴퓨터 하드웨어 바로 위에 설치되어 컴퓨터의 하드웨어와 사용자 및 다른 모든 소프트웨어를 연결하는 소프트웨어 계층이다.
좁은 의미 : 커널
운영체제의 핵심부분으로 메모리에 상주하는 부분
넓은 의미
커널을 포함하여 각종 주변 시스템 유틸리티를 포함한 개념
운영체제는 그 정의에서 알 수 있듯, 컴퓨터 하드웨어 ←→ 다른 소프트웨어/사용자
사이에서 중간자 역할을 수행한다. 따라서 운영체제는 다음의 두 가지 역할을 수행한다.
프로세서, 기억장치, 입출력 장치 등의 효율적 관리 (하드웨어 자원을 관리)
사용자 간의 형평성 있는 자원 분배
주어진 자원으로 최대한의 성능을 내도록
실행중인 프로그램들에게 짧은 시간씩 CPU 를 번갈아 할당한다.
실행중인 프로그램들에 메모리 공간을 적절히 분배한다.
프로세스, 파일, 메시지 등을 관리 (소프트웨어 자원 관리)
사용자 및 운영체제 자신을 보호
동시에 접속한 사용자 혹은 동시에 실행되고 있는 프로그램들이 각자 자신의 컴퓨터에서 독자적으로 수행되는 것 같은 착각을 제공한다.
= 실제로는 중앙의 큰 하나의 컴퓨터에서 실행되지만 이 곳에 접속한 서로 다른 사용자들은 마치 동시에 독자적으로 수행되는 것 같이 착각을 하게 된다.
하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행한다.
운영체제는 1) 동시작업가능여부, 2) 사용자 수, 3) 처리방식 등을 기준으로 분류될 수 있다.
단일작업 : 한번에 하나의 작업만 처리
MS-DOS 프롬프트 상에서는 한 명령의 수행을 끝내기 전에 다른 명령을 수행시킬 수 없다.
다중작업 : 동시에 두 개 이상의 작업 처리
UNIX, MS Windows 등 에서는 한 명령의 수행이 끝나기 전에 다른 명령이나 프로그램을 수행할 수 있다.
단일 사용자 : MS-DOS, MS Windows
다중 사용자 : UNIX, NT server
시분할 방식
여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용한다.
일괄처리 시스템에 비해 짧은 응답 시간을 가진다. - 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를 주고 뺃는 것이 가능하다.
일반 세상에서는 빨리 온 사람에게 먼저주는 것이 관례이다. 하지만 컴퓨터 세계에서는 그렇게 하는 것이 반드시 가장 좋은 방법은 아니다.
예를 들어서 은행에서 먼저 온 사람을 먼저 봐주는 방식으로 일을 처리한다고 생각해보자. 만약에 1시간이 걸리는 업무를 처리하고 있는 사람이 중간에 있다면 그 이후의 사람들은 업무를 처리하지 못하는 병목현상이 발생하게 된다.
한정된 메모리를 어떻게 쪼개어 쓰지?
공평하게 일정 구간씩 메모리를 나누면 될 것 같지만, 실제로는 그렇지 않다.
실행하는 프로그램 많아질수록 한 프로그램 당 차지하는 메모리가 지나치게 작아지면서 프로그램 자체를 실행할 수 없게 되어버리기 때문이다.
지금 실행하고 있는 프로그램에게 메모리를 몰빵해주면 더 수월하게 진행될 수 있다.
메모리가 꽉차서 안쓰는 프로그램을 내보내야할 때, 어떤 기준으로 내보낼까?
미래에 잘 안쓸 프로그램부터 먼저 내보내면 된다.
메모리에 올려진 뒤, 오랫동안 사용되지 않은 데이터가 있다면 내보내면 된다.
디스크에 파일을 어떻게 보관하지? 파일관리 (디스크 스케줄링)
Head 를 어떻게 하면 적게 움직이고 빠르게 처리할 수 있을까
각기 다른 입출력 장치와 컴퓨터 간에 어떻게 정보를 주고 받게 할까? (입출력 관리)
I/O Device 는 인터럽트를 이용하여 이를 수행한다. 입출력이 감지되면, CPU에게 인터럽트를 걸어서 작업을 수행한다.
프로세스 생성과 삭제
자원할당 및 반환
프로세스 간 협력
보호 시스템
네트워킹
명령어 해석기 (command line interpreter)
운영체제는 사실 직접 뭔가를 만져보고 조작하면서 공부할 수 없기에 다소 어렵고 딱딱하게 느껴질 수 있다. 내가 사용자가 아니라 직접 운영체제가 되어 무엇을 해야하는지 생각하면서 강의를 수강하면 한결 재미있게 공부할 수 있을 것이다.