운영체제및실습 1주차 정리
운영체제 개요, 멀티프로그래밍, 타임쉐어링, 운영체제 구성
운영체제 개요
운영체제의 정의와 역할
운영체제(Operating System)는 컴퓨터 하드웨어와 사용자(또는 응용 프로그램) 사이에서 인터페이스 역할을 하는 소프트웨어입니다. 컴퓨터의 두뇌에 해당하는 운영체제는 하드웨어를 제어하고 컴퓨터 내부 동작을 관리하는 역할을 담당합니다.
운영체제의 주요 역할은 다음과 같습니다:
- 프로그램의 실행 제어
- 컴퓨터 하드웨어 자원 관리
- 입출력 장치 제어
- 오류 및 예외상황 감지와 처리
- 시스템 자원 사용 현황 모니터링 및 통계 제공
컴퓨터 사용 시나리오와 운영체제의 역할
일반적인 컴퓨터 사용 시나리오를 통해 운영체제의 역할을 살펴보면:
부팅(Booting): 컴퓨터 전원을 켜면 운영체제가 보조기억장치에서 메인 메모리로 로드되는 과정입니다. 이 과정에서 운영체제는 컴퓨터가 사용 가능한 상태가 되도록 준비합니다.
프로그램 실행: 사용자가 프로그램을 선택하면 운영체제의 프로세스 관리 기능이 이를 실행시킵니다.
입출력 관리: 키보드, 마우스와 같은 입력장치나 모니터, 프린터와 같은 출력장치를 통해 정보를 주고받을 때 운영체제가 이를 관리합니다.
다중 프로그램 관리: 여러 프로그램이 동시에 실행될 때 (예: 문서 편집하면서 음악 듣기, 메신저 사용하기) 운영체제가 이들을 스케줄링하고 자원을 할당합니다.
종료(Shutdown): 컴퓨터 사용이 끝나면 안전하게 시스템을 종료하는 과정도 운영체제가 담당합니다. 이 과정에서 메모리에 있는 정보를 저장하고 시스템을 안전하게 종료합니다.
컴퓨터를 종료할 때는 항상 운영체제의 종료 기능을 사용하세요. 강제로 전원을 끄면 데이터가 손실될 수 있습니다.
운영체제의 서비스
운영체제는 상위 계층(사용자나 응용 프로그램)에게 다양한 서비스를 제공합니다:
- 프로그램 실행 서비스
- 시스템 자원(리소스) 접근 및 관리 서비스
- 오류 감지 및 처리 서비스
- 시스템 자원 사용 통계 제공 서비스
대표적인 사례로 Windows의 작업관리자가 있습니다. 작업관리자는 운영체제가 수집한 CPU, 메모리, 디스크 사용량 등의 통계 데이터를 사용자에게 보여주는 응용 프로그램입니다.
Windows에서 작업관리자는
Ctrl+Alt+Del
키를 누른 후 선택하거나,Ctrl+Shift+Esc
키를 눌러 바로 실행할 수 있습니다.
컴퓨터 시스템 구조와 운영체제
컴퓨터 시스템은 다음과 같은 구성요소로 이루어져 있습니다:
- 하나 이상의 프로세서(CPU)
- 메인 메모리
- I/O 컨트롤러
- 버스(데이터 이동 통로)
운영체제는 보조기억장치에 파일 형태로 저장되어 있다가, 컴퓨터 부팅 과정에서 메인 메모리로 로드됩니다. 폰 노이만 컴퓨터 구조에서는 소프트웨어가 실행되기 위해서는 반드시 메인 메모리에 로드되어 있어야 합니다.
커널(Kernel)
운영체제 중에서도 핵심적이고 자주 이용되는 기능을 커널이라고 합니다. 커널은 항상 메인 메모리에 상주하는 운영체제의 핵심 부분입니다. 운영체제와 커널은 일반적으로 같은 의미로 사용됩니다.
운영체제의 기능 중 일부는 필요할 때만 메모리에 로드되어 실행되지만, 커널은 항상 메모리에 상주합니다.
멀티프로그래밍 (Multiprogramming)
초기 컴퓨터와 단일 프로그래밍 방식
초기 컴퓨터(ENIAC)는 운영체제 없이 사람이 수동으로 조작했습니다. 이후 등장한 ‘모니터’라는 초기 형태의 운영체제는 프로그램을 순차적으로 메모리에 로드하고 실행하는 역할을 담당했습니다. 이러한 초기 방식을 ‘심플 배치 시스템(Simple Batch System)’이라고 합니다.
단일 프로그래밍(Uniprogramming) 방식에서는 한 번에 하나의 프로그램만 메모리에 올라가 실행됩니다. 이 방식에서 CPU는 다음과 같은 패턴으로 동작합니다:
- 프로그램 실행(Run)
- 입출력 대기(Wait)
- 다시 실행(Run)
- 다시 대기(Wait)
이러한 방식의 가장 큰 문제점은 CPU 활용도가 매우 낮다는 것입니다. 예를 들어:
- 데이터 입력: 15마이크로초
- 100개 명령어 처리: 1마이크로초
- 결과 출력: 15마이크로초
이 경우 총 31마이크로초 중 실제 CPU가 일하는 시간은 1마이크로초에 불과하므로, CPU 활용도는 약 3.2%에 그칩니다.
컴퓨터 성능을 이해할 때 CPU 활용도(CPU Utilization)는 중요한 지표입니다. 이는 전체 시간 중 CPU가 실제로 작업을 처리하는 시간의 비율을 의미합니다.
멀티프로그래밍의 개념
멀티프로그래밍은 메모리에 여러 프로그램을 동시에 올려놓고, 한 프로그램이 입출력 작업으로 CPU를 사용하지 않을 때 다른 프로그램이 CPU를 사용할 수 있도록 하는 방식입니다.
우체국 비유를 통해 이해해 보면:
- 단일 프로그래밍: 한 명의 직원(CPU)이 한 명의 고객(프로그램)만 응대합니다. 고객이 서류 작성(입출력)하는 동안 직원은 아무것도 하지 않고 기다립니다.
- 멀티프로그래밍: 한 명의 직원(CPU)이 여러 명의 고객(프로그램)을 번갈아가며 응대합니다. 한 고객이 서류 작성하는 동안 다른 고객을 응대합니다.
멀티프로그래밍의 작동 방식은 다음과 같습니다:
- 프로그램 A 실행
- A가 입출력 작업을 요청하면, A는 대기 상태로 전환
- CPU는 프로그램 B 실행
- B가 입출력 작업을 요청하면, B는 대기 상태로 전환
- CPU는 프로그램 C 실행
- C가 입출력 작업을 요청하면, C는 대기 상태로 전환
- A의 입출력 작업이 완료되면, 다시 A 실행
- 이런 식으로 반복
멀티프로그래밍의 이점과 요구사항
이점
- CPU 활용도 증가: 한 프로그램이 입출력을 기다리는 동안 다른 프로그램이 CPU를 사용할 수 있음
- 전체 시스템 처리량(throughput) 향상
요구사항
- 하드웨어 요구사항:
- 메모리 용량 증가: 여러 프로그램을 동시에 메모리에 로드하기 위해 더 큰 메모리 필요
- 소프트웨어 요구사항:
- 프로세스 스케줄링 기능: 어떤 프로그램을 다음에 실행할지 결정하는 알고리즘 필요
- CPU 스케줄링 또는 작업 스케줄링이라고도 함
스케줄링 알고리즘에는 선입선출(FIFO), 우선순위 기반 등 다양한 방식이 있으며, 시스템의 용도에 따라 적절한 알고리즘을 선택해야 합니다.
타임쉐어링 (Time-Sharing)
타임쉐어링의 개념
타임쉐어링은 멀티프로그래밍을 확장한 개념으로, CPU 시간을 여러 프로그램이 일정한 시간 단위(타임슬라이스)로 나누어 사용하는 방식입니다. 현대 컴퓨터에서는 타임슬라이스의 길이가 보통 0.1초(100ms) 정도입니다.
타임쉐어링의 작동 방식:
- 프로그램 A에게 타임슬라이스(0.1초) 동안 CPU 할당
- 타임슬라이스가 끝나면 프로그램 A를 잠시 중단
- 프로그램 B에게 타임슬라이스(0.1초) 동안 CPU 할당
- 타임슬라이스가 끝나면 프로그램 B를 잠시 중단
- 프로그램 C에게 타임슬라이스(0.1초) 동안 CPU 할당
- 타임슬라이스가 끝나면 다시 프로그램 A로 돌아가서 반복
이 방식으로 각 프로그램은 짧은 시간 간격으로 CPU를 번갈아 사용하기 때문에, 사용자 입장에서는 마치 CPU가 자신의 프로그램만 실행하는 것처럼 느낍니다.
멀티프로그래밍과 타임쉐어링의 차이점
멀티프로그래밍과 타임쉐어링의 주요 차이점은 CPU 할당 시간에 있습니다:
- 멀티프로그래밍:
- 프로그램이 입출력 작업을 요청하거나 종료할 때까지 CPU 사용
- 각 프로그램의 CPU 사용 시간이 서로 다름 (10분, 1분, 4분 등)
- 타임쉐어링:
- 정해진 시간(타임슬라이스) 동안만 CPU 사용
- 모든 프로그램의 CPU 사용 시간이 동일 (예: 모두 0.1초)
타임쉐어링의 장단점
장점
- 짧은 응답 시간(Response Time): 사용자 입력에 빠르게 반응할 수 있음
- 대화형 작업에 적합: 사용자가 실시간으로 프로그램과 상호작용하는 작업에 적합
단점
- 컨텍스트 스위칭(Context Switching) 오버헤드 증가: 프로그램 전환이 자주 발생하므로 시스템 부담 증가
- 처리량(Throughput) 감소: 컨텍스트 스위칭으로 인해 실제 작업 처리량이 멀티프로그래밍보다 낮을 수 있음
응답 시간(Response Time)은 사용자가 명령을 입력한 순간부터 시스템이 반응을 시작할 때까지의 시간을 의미합니다. 대화형 시스템에서는 이 시간이 짧을수록 사용자 경험이 향상됩니다.
실제 활용 사례
현대 컴퓨터 시스템에서는 작업 특성에 따라 멀티프로그래밍과 타임쉐어링을 모두 활용합니다:
- 배치 처리(Batch Processing) - 멀티프로그래밍 활용:
- 오래 실행되는 프로그램들을 묶어서 차례로 실행
- 사용자는 실행 결과를 나중에 확인
- 백그라운드 프로세싱(Background Processing)이라고도 함
- 처리량(Throughput)이 높음
- 예: 대규모 데이터 처리, 장시간 계산 작업
- 대화형 작업(Interactive Processing) - 타임쉐어링 활용:
- 사용자가 실시간으로 프로그램과 상호작용
- 응답 시간(Response Time)이 중요
- 포그라운드 프로세싱(Foreground Processing)이라고도 함
- 예: 문서 편집, 웹 브라우징, 메시징 등
현대 운영체제는 배치 처리와 대화형 작업을 동시에 지원합니다. Windows에서 백그라운드 작업을 실행할 때 ‘우선 순위’를 낮게 설정하면, 포그라운드 응용 프로그램의 응답성을 유지하면서 CPU 자원을 효율적으로 활용할 수 있습니다.
멀티프로세싱 (Multiprocessing)
대칭형 멀티프로세싱(SMP)
대칭형 멀티프로세싱(Symmetric MultiProcessing, SMP)은 여러 개의 프로세서(CPU)가 같은 메모리와 I/O 버스를 공유하는 컴퓨터 구조를 말합니다. ‘대칭형’이라는 의미는 모든 프로세서가 동등한 역할을 한다는 뜻입니다.
SMP 시스템의 특징:
- 하나의 운영체제가 모든 프로세서를 제어
- 모든 프로세서가 메모리와 I/O 장치를 공유
- 각 프로세서는 사용자 프로그램을 실행하는 동일한 역할 수행
대칭형 멀티프로세싱에서는 모든 프로세서가 동등하기 때문에, 한 프로세서가 고장나도 시스템이 계속 작동할 수 있는 내결함성(fault tolerance)을 제공합니다.
비대칭형 멀티프로세싱(ASMP)
비대칭형 멀티프로세싱(Asymmetric MultiProcessing, ASMP)은 프로세서들이 서로 다른 역할을 수행하는 시스템입니다. 특정 프로세서가 특수한 작업(예: 통신, 그래픽 처리 등)을 전담하는 구조입니다.
멀티프로그래밍과 멀티프로세싱의 차이
이 두 용어는 비슷하지만 중요한 차이가 있습니다:
- 멀티프로그래밍(Multiprogramming):
- CPU가 한 개인 시스템에서 여러 프로그램을 번갈아가며 실행
- 한 시점에 하나의 프로그램만 실행됨 (시분할)
- 동시성(Concurrency)을 제공
- 멀티프로세싱(Multiprocessing):
- 여러 CPU가 동시에 각각 다른 프로그램 실행
- 여러 프로그램이 실제로 동시에 실행됨
- 병렬성(Parallelism)을 제공
아래 그림으로 비교하면:
- 멀티프로그래밍: 프로그램 A → 프로그램 B → 프로그램 C → 프로그램 A (번갈아가며 실행)
- 멀티프로세싱: 프로그램 A와 프로그램 B가 실제로 같은 시간에 실행
동시성(Concurrency)과 병렬성(Parallelism)은 다른 개념입니다. 동시성은 여러 작업을 번갈아가며 처리하는 것이고, 병렬성은 여러 작업을 실제로 동시에 처리하는 것입니다.
운영체제 내부 기능
운영체제는 다양한 기능을 수행하며, 이러한 기능들은 비슷한 성격에 따라 그룹화할 수 있습니다. 각 기능 그룹은 여러 함수(함수)들로 구성되어 있습니다.
운영체제 주요 기능 분류
프로세스 관리(Process Management)
프로세스(실행 중인 프로그램)를 생성, 실행, 제어하는 기능을 담당합니다. 프로그램이 컴퓨터 내에서 실행될 때 프로세스라고 부르며, 프로세스 관리는 이러한 프로세스의 생명 주기를 관리합니다.
메인 메모리 관리(Main Memory Management)
컴퓨터가 프로그램을 실행하기 위해서는 프로그램을 메인 메모리에 로드해야 합니다. 메모리 관리 기능은 메모리 공간을 프로그램에 할당하고 회수하는 작업을 담당합니다.
파일 관리(File Management)
파일을 보조기억장치(Secondary Storage)에 저장하고, 파일 시스템을 운영하는 기능을 담당합니다. 파일 생성, 삭제, 수정, 검색 등의 작업을 수행합니다.
입출력 관리(I/O Management)
컴퓨터 시스템이 입력과 출력을 수행할 때 이를 제어하고 관리합니다. 키보드, 마우스, 모니터, 프린터 등의 장치를 통한 데이터 흐름을 제어합니다.
보조기억장치 관리(Secondary Storage Management)
하드 디스크와 같은 보조기억장치의 공간을 할당, 회수, 관리하는 기능을 담당합니다.
보호 및 보안 관리(Protection and Security Management)
다중 사용자 환경에서 각 사용자의 정보를 보호하고, 시스템 자원에 대한 접근을 제어합니다.
네트워킹(Networking)
컴퓨터 통신에 필요한 제어 기능을 제공합니다. 네트워크를 통한 데이터 전송 및 수신을 관리합니다.
운영체제의 핵심 기능인 프로세스 관리, 메모리 관리, 파일 관리, 입출력 관리는 거의 모든 운영체제에 구현되어 있지만, 세부 구현 방식은 운영체제마다 다를 수 있습니다.
분산 시스템(Distributed System)
분산 시스템은 독립적인 컴퓨터들이 네트워크로 연결되어 하나의 시스템처럼 동작하는 구조입니다. 각 컴퓨터는 자체 운영체제와 하드웨어를 갖추고 있지만, 분산 처리 소프트웨어를 통해 통합된 서비스를 제공합니다.
분산 시스템의 특징:
- 여러 대의 독립적인 컴퓨터로 구성
- 서로 다른 제조사나 운영체제를 가진 컴퓨터들도 호환 가능
- 작업을 분담하여 처리 속도 향상
- 서비스의 연속성과 신뢰성 제공
분산 시스템의 장점:
- 처리 속도 향상 및 시간 단축
- 자원 공유 가능
- 데이터 가용성(Availability) 향상: 한 컴퓨터가 고장나도 다른 컴퓨터에서 동일한 데이터 사용 가능
- 시스템 신뢰성 강화
은행 ATM은 분산 시스템의 좋은 예입니다. ATM(클라이언트)과 은행 서버가 네트워크로 연결되어 은행 업무를 분담 처리합니다.
명령 해석 시스템(Command Interpreter System)
명령 해석 시스템은 사용자의 명령을 해석하고 실행하는 기능을 담당합니다. 사용자가 내린 명령이 올바른지 확인하고, 적절한 운영체제 내부 함수에 전달하는 역할을 수행합니다.
명령 해석 시스템의 두 가지 형태:
- 명령줄 인터페이스(Command Line Interface, CLI):
- 텍스트 기반 인터페이스
- 프롬프트에 명령어를 직접 타이핑하여 실행
- 예: Windows의 CMD, Unix/Linux의 쉘(Shell)
- 그래픽 사용자 인터페이스(Graphical User Interface, GUI):
- 그래픽 기반 인터페이스
- 마우스로 아이콘을 클릭하여 명령 실행
- 예: Windows 탐색기, macOS Finder
CLI는 명령어를 정확히 알고 있을 때 더 효율적인 반면, GUI는 직관적이고 사용하기 쉽습니다. 시스템 관리자나 개발자들은 복잡한 작업을 자동화하기 위해 CLI를 선호하는 경우가 많습니다.
시스템 콜(System Call)
시스템 콜은 응용 프로그램이 운영체제의 서비스를 요청하기 위한 인터페이스입니다. 운영체제와 응용 프로그램 사이의 다리 역할을 하는 함수들의 집합입니다.
시스템 콜의 특징:
- 운영체제가 제공하는 서비스를 사용할 수 있는 API
- 응용 프로그램이 하드웨어 자원을 사용하기 위한 유일한 방법
- 명령 해석 시스템(CLI, GUI)도 내부적으로 시스템 콜을 사용
일반 사용자는 CLI나 GUI를 통해 간접적으로 시스템 콜을 사용하지만, 프로그래머는 직접 시스템 콜을 사용하여 운영체제 서비스에 접근할 수 있습니다.