현대 운영체제 (Modern Operating Systems)

1. 서버 및 데스크톱용 운영체제 (Operating systems for servers and desktops)
- Windows 10, Mac OS, Linux(펭귄 마스코트 Tux), Sun Microsystems의 Solaris 등
- 일반 사용자의 PC나 기업 서버에서 이용된다 .
2. 모바일 운영체제 및 임베디드 시스템 (Mobile OS & Embedded systems)
- 스마트폰(iPhone 등), 웨어러블 기기, 화성 탐사 로봇 같은 임베디드 시스템
- iOS, Android 등이 대표적이다.
- 임베디드 시스템(embedded system)이란 특정 목적을 위해 설계된 컴퓨터 시스템으로,
가전제품, 자동차, 의료기기 등에 내장된다.
- 대규모 서버 랙(rack)에서 동작하는 OS
- 웹 서비스, 스트리밍, 데이터 센터 등에 사용된다.
컴퓨터 시스템의 4가지 구성 요소 (Four Components of a Computer System)


1. 하드웨어 (Hardware) — 최하위 계층
- 하드웨어는 기본적인 컴퓨팅 자원을 제공한다. CPU(중앙처리장치), 메모리(RAM), I/O 장치(키보드, 마우스, 디스크, 모니터 등)가 포함된다.
CPU는 실제 연산을 수행하고, 메모리는 데이터를 임시 저장하며, I/O 장치는 외부와의 입출력을 담당한다.
2. 운영체제 (Operating System) — 하드웨어 바로 위
- 다양한 응용 프로그램과 사용자 사이에서 하드웨어의 사용을 제어하고 조율한다.
ex : 두 프로그램이 동시에 프린터를 사용하려 할 때, OS가 순서를 정해준다.
3. 시스템 및 응용 프로그램 (System and Application Programs)
- 시스템 자원을 사용하여 사용자의 컴퓨팅 문제를 해결하는 방법을 정의한다.
ex : 워드프로세서(Word processors), 컴파일러(compilers), 웹 브라우저(web browsers), 데이터베이스 시스템(database systems), 비디오 게임(video games)
이 프로그램들은 OS가 제공하는 서비스(시스템 콜)를 사용하여 하드웨어에 접근한다.
4. 사용자 (Users) — 최상위 계층
- 사람뿐 아니라 기계나 다른 컴퓨터도 사용자가 될 수 있다.
ex : 사람이 키보드로 입력하는 것, 다른 서버가 네트워크로 요청을 보내는 것 모두 "사용자"에 해당한다.
운영체제가 없다면? (What if we didn't have an Operating System?)

운영체제 없이 프로그램을 실행하는 과정을 생각해보자.
- 소스 코드(Source Code)를 작성한다.
- 컴파일러(Compiler)로 소스 코드를 컴파일하여 오브젝트 코드(Object Code, 기계어)를 만든다. 이 오브젝트 코드를 하드웨어에서 실행해야 한다.
그런데 문제가 생긴다:
- 오브젝트 코드를 하드웨어에 어떻게 올리나? — 파일 시스템이 없으니 디스크에서 메모리로 코드를 로드하는 것 자체가 불가능하다.
- 결과를 어떻게 출력하나? — 프린터나 모니터를 제어하는 드라이버가 없으니 출력할 수 없다.
운영체제란? (What is Operating System?)

운영체제의 목표
- 사용자 프로그램을 실행한다
- 표준 서비스 라이브러리를 제공하여 사용자 문제 해결을 쉽게 한다
- 컴퓨터 시스템을 편리하게 사용할 수 있도록 한다
- 컴퓨터 하드웨어를 효율적으로 사용한다
운영체제의 정의
- 컴퓨터 사용자와 컴퓨터 하드웨어 사이의 중재자(intermediary) 역할을 하는 프로그램이다.
- 자원을 제어하고 할당하는 공통 기능이 하나의 소프트웨어로 통합된 것이다.
- 컴퓨터에서 항상 실행 중인 하나의 프로그램으로, 보통 커널(kernel)이라고 부른다.
- 커널은 OS의 핵심 부분으로, 컴퓨터가 켜져 있는 동안 메모리에 항상 상주하면서 프로세스 관리, 메모리 관리 등 핵심 기능을 수행한다.
- 커널 위에 셸(shell), GUI 등 다른 OS 구성 요소들이 올라간다.
- 보편적으로 합의된 정의는 없다.
"운영체제를 주문할 때 판매자가 제공하는 모든 것"이 좋은 근사치이지만, 실제로는 천차만별이다.
운영체제의 역할 (Operating System Roles)

사용자 관점 (User View)
사용자가 수행하는 작업(또는 놀이)을 극대화한다. 이 경우, 운영체제는 주로 사용 편의성(ease of use)을 위해 설계된다.
사용자는 OS의 내부 동작을 알 필요 없이, 마우스 클릭이나 키보드 입력으로 프로그램을 실행하고 파일을 관리할 수 있어야 한다.
시스템 관점 (System View)
- OS는 자원 할당자 (Resource Allocator)
- 모든 자원을 관리한다
- 충돌하는 요청들 사이에서 효율적이고 공정한 자원 사용을 결정한다
- 프로세스 관리, 메모리 관리 등
- ex : 프로세스 A와 프로세스 B가 동시에 CPU를 원할 때, OS가 누구에게 먼저 CPU를 줄지 결정한다.
- OS는 제어 프로그램 (Control Program)
- 프로그램의 실행을 제어하여 오류(errors)와 컴퓨터의 부적절한 사용(improper use)을 방지한다.
- ex : 어떤 프로그램이 다른 프로그램의 메모리 영역에 접근하려 하면 OS가 이를 차단한다.
운영체제 구조 (Operating System Structure)

하드웨어 계층 (최하위)
- Keyboard(키보드), Disk(디스크), Monitor(모니터), Network card(네트워크 카드)
물리적 장치들이 위치한다.
I/O Management (I/O 관리)
- 하드웨어 바로 위에서 장치들과의 입출력을 관리한다.
커널 핵심 서브시스템들 (Operating System / Kernel)
- Process Management (프로세스 관리 서브시스템): 프로세스의 생성, 삭제, 스케줄링 등을 담당
- Memory Management (메모리 관리): RAM의 할당/해제, 가상 메모리 등을 관리
- File Management (파일 관리): 파일의 생성, 삭제, 읽기, 쓰기 등을 관리
- Network Management (네트워크 관리): 네트워크 통신을 관리
- Security System Mgmt (보안/시스템 관리): 시스템 보안과 접근 제어를 담당
- Storage Core (저장소 코어): 저장소의 핵심 기능
System Call Interface (시스템 콜 인터페이스)
- 커널과 응용 프로그램 사이의 경계이다.
응용 프로그램은 시스템 콜을 통해 커널 서비스를 요청한다.
응용 프로그램 (최상위)
- Shell(셸): 명령어 해석기. 사용자가 입력한 명령을 OS에 전달한다.
- Word(워드): 워드프로세서 응용 프로그램
- Internet Explorer(인터넷 익스플로러): 웹 브라우저
핵심 포인트: 응용 프로그램은 직접 하드웨어에 접근하지 않고, 반드시 시스템 콜 인터페이스를 통해 커널에 요청한다. 커널 내부에는 프로세스, 메모리, 파일, 네트워크, I/O 등의 서브시스템이 있다.

다중 프로그래밍/다중 작업 (Multiprogramming/Multitasking)
-
단일 사용자나 단일 작업은 CPU와 I/O 장치를 항상 바쁘게 유지할 수 없다.
- ex : 프로그램이 디스크에서 파일을 읽는 동안(I/O 대기), CPU는 아무것도 하지 않고 놀고 있다. 이것은 CPU 자원의 낭비이다.
-
시스템 내 전체 작업의 일부를 메모리에 유지한다.
-
한 작업이 대기해야 할 때(예: I/O를 기다릴 때), OS가 다른 작업으로 전환한다.
다중 프로그래밍을 지원하기 위해 필요한 서브시스템
다중 프로그래밍을 지원하기 위해 필요한 서브시스템
- 메모리에서 실행 중인 프로그램 → 프로세스
- 여러 작업이 동시에 실행 준비되면 → CPU 스케줄링
- 프로세스가 메모리에 다 안 들어가면, 스와핑으로 넣었다 뺐다 한다
- 가상 메모리로 메모리에 완전히 올라가지 않은 프로세스도 실행 가능
(Process Management)

What is process ?
- 프로세스란 실행 중인 프로그램이다.
- (program)은 디스크에 저장된 정적인 코드이고, (process)는 그 코드가 메모리에 올라가서 실행되고 있는 동적인 상태이다.
- 프로세스는 여러 자원을 가진다: CPU 시간, 메모리 공간, I/O 장치, 파일, 데이터
시스템에는 많은 프로세스가 있으며, 일부는 사용자 프로세스, 일부는 운영체제 프로세스이다. 이들이 하나 이상의 CPU에서 동시에(concurrently) 실행된다.
- CPU를 프로세스/스레드 사이에서 다중화(multiplexing)하여 동시성을 달성한다.
- 즉, CPU 하나가 매우 빠르게 여러 프로세스를 번갈아 실행하여 동시에 실행되는 것처럼 보이게 한다.
프로세스 관리의 주요 활동
- 사용자 프로세스와 시스템 프로세스의 생성과 삭제
- 프로세스의 일시 중단(suspend)과 재개(resume)
- 프로세스 동기화(synchronization) 메커니즘 제공
- 프로세스 통신(communication) 메커니즘 제공
프로세스 = 실행 중인 프로그램. OS는 프로세스의 생성부터 삭제까지 전체 생명주기를 관리한다.
Memory Management

메인 메모리의 용도 — CPU와 I/O 장치가 공유하는 빠르게 접근 가능한 데이터 저장소이다.
- 메인 메모리(RAM)는 디스크보다 훨씬 빠르지만, 용량이 제한적이고 전원이 꺼지면 데이터가 사라진다(휘발성).
- CPU는 직접 디스크에 접근하지 못하고, 반드시 메인 메모리를 거쳐야 한다.
메모리 관리는 CPU 활용률과 사용자에 대한 컴퓨터 응답 속도에 중요한 영향을 미친다.
- 메모리 관리가 비효율적이면 → 프로세스가 메모리에 올라가지 못하고 대기 → CPU가 놀게 됨 → 전체 성능 저하
핵심 포인트: 메모리는 CPU와 I/O 장치 사이의 다리 역할을 하며, 효율적인 메모리 관리가 시스템 전체 성능을 좌우한다.
파일 및 저장소 관리 (File and Storage Management)

파일 시스템 관리 (File-System Management)
- 물리적 속성을 논리적 저장 단위인 파일(file)로 추상화한다
- 파일은 보통 디렉토리(directory, 폴더)로 조직화된다
- 파일과 디렉토리의 생성 및 삭제
- 파일과 디렉토리를 조작하기 위한 기본 연산(primitives) 제공
"추상화"란 복잡한 하드웨어(디스크의 실린더, 트랙, 섹터)를 사용자가 이해하기 쉬운 개념(파일, 폴더)으로 바꾸는 것이다.
저장소 관리 (Storage Management)
- 디스크와 SSD는 메인 메모리에 맞지 않는 데이터나 장기간 보관해야 하는 데이터를 저장하는 데 사용된다.
- Free-space management (빈 공간 관리): 디스크에서 사용 가능한 빈 공간을 추적한다.
- Storage allocation (저장 공간 할당): 파일에 디스크 공간을 할당한다.
- Disk scheduling (디스크 스케줄링): 디스크 접근 요청의 순서를 최적화한다.
I/O 서브시스템 (I/O Subsystem)

OS의 목적 중 하나는 하드웨어 장치의 특이한 점(peculiarities)을 사용자에게 숨기는 것이다.
- ex : 사용자는 "파일을 저장한다"라고만 하면 되지, 디스크 헤드가 어느 실린더에 있고 어느 섹터에 기록해야 하는지 알 필요가 없다. 이것이 OS의 추상화이다.
I/O 서브시스템의 역할
- 캐싱 (Caching)
- 자주 접근하는 데이터를 더 빠른 저장소에 저장하여 성능을 향상시킨다
- 일반적인 장치 드라이버 인터페이스 (General device-driver interface)
- 모든 장치에 대해 통일된 인터페이스를 제공한다
- 특정 하드웨어 장치를 위한 드라이버(Drivers for specific hardware devices)
- 각 장치에 맞는 전용 드라이버가 실제 장치를 제어한다
핵심 포인트: OS의 I/O 서브시스템은 다양한 하드웨어 장치의 차이를 숨기고, 응용 프로그램에게 통일된 인터페이스를 제공한다.
이중 모드 동작 (Dual-mode Operation)

왜 이중 모드가 필요한가?
- 이중 모드 동작은 OS가 자기 자신과 다른 시스템 구성 요소를 보호할 수 있게 한다.
- ex : 만약 모든 프로그램이 하드웨어에 직접 접근할 수 있다면, 악성 프로그램이나 버그가 있는 프로그램이 시스템 전체를 망가뜨릴 수 있다.
두 가지 모드
- 커널 모드 (Kernel Mode) — "supervisor" 또는 "protected" 모드라고도 한다.
- OS 커널이 실행되는 모드
- 모든 명령어를 실행할 수 있고, 하드웨어에 직접 접근할 수 있다.
- 사용자 모드 (User Mode)
- 일반 프로그램이 실행되는 모드
- 일부 명령어/연산이 금지(prohibited)된다.
구체적 예시
- 사용자 모드에서는 페이지 테이블(page table)을 수정할 수 없다. 수정을 시도하면 → 예외(Exception)가 발생한다.
- 페이지 테이블은 가상 메모리와 물리 메모리의 매핑 정보를 담고 있다. 만약 일반 프로그램이 이것을 마음대로 수정할 수 있다면, 다른 프로세스의 메모리에 접근하거나 시스템을 파괴할 수 있다.
핵심 포인트: 사용자 모드에서는 제한된 명령만 실행 가능하고, 위험한 명령(특권 명령)은 커널 모드에서만 실행된다. 이것이 OS의 보호 메커니즘의 기초이다.

예외와 인터럽트 (Exceptions/Interrupts)
-
정의
- 프로세서의 정상적인 실행을 방해하고, 프로세서가 특수 명령(special instructions)을 실행하도록 하는 모든 이벤트이다.
-
예외 (Exceptions) — 내부 이벤트
- 프로세서 명령어의 실행에 의해 발생하는 내부 이벤트이다.
- 예외 종류
- 정렬 예외 (Alignment exception)
프로세서가 홀수 메모리 주소에서 읽기/쓰기를 시도할 때 발생
- 산술 연산 예외 (Arithmetic operation)
Division by zero0으로 나누기를 시도할 때 발생
- TRAP
1. TRAP 소프트웨어 인터럽트. 시스템 콜을 호출할 때 의도적으로 발생시킨다
2. TRAP은 특별한 예외로, 프로그램이 의도적으로 발생시킨다. 시스템 콜을 호출할 때 TRAP 명령을 사용하여 커널 모드로 전환한다.
-
인터럽트 (Interrupts) — 외부 이벤트
- 프로세서 명령어의 실행과 관련 없는 외부 이벤트에 의해 발생하는 전기 신호이다.
외부 이벤트의 출처는 일반적으로 외부 하드웨어 장치이다.
-
인터럽트 예시
- 임베디드 보드의 리셋 버튼을 누를 때장치에서 생성되는 전기 신호 (예: 키보드 키를 누를 때, 디스크 읽기가 완료될 때)
핵심 포인트: 예외(Exception)는 CPU 내부에서 발생하고(소프트웨어 원인), 인터럽트(Interrupt)는 외부 하드웨어에서 발생한다. 둘 다 프로세서의 정상 흐름을 중단시키고 특수 처리 루틴으로 이동시킨다.
사용자에서 커널 모드로의 전환 (Transition from User to Kernel Mode)

그림에는 시간축(Time)을 따라 다음과 같은 흐름이 나타난다:
- Process 1 (사용자 모드에서 실행) → System call 발생 → 커널 모드의 System call handler가 처리 → 다시 사용자 모드로 돌아옴
- Process 1 (사용자 모드에서 실행) → Timer interrupt 발생 → 커널 모드의 Scheduler(스케줄러)가 다음 프로세스를 선택 → Process 2가 사용자 모드에서 실행
- Process 2 (사용자 모드에서 실행) → Device interrupt 발생 → 커널 모드의 Interrupt handler가 처리 → 다시 사용자 모드로 돌아옴
그리고 오른쪽에 Exception(예외) 화살표가 아래로 향하고 있어, 예외 발생 시에도 커널 모드로 전환됨을 보여준다.
사용자 모드에서 커널 모드로 전환되는 3가지 경우:
- 시스템 콜(System call): 프로그램이 OS 서비스를 요청할 때
- 타이머 인터럽트(Timer interrupt): 타임 슬라이스(time slice)가 만료되어 스케줄러가 개입할 때
- 장치 인터럽트(Device interrupt): 하드웨어 장치가 작업 완료를 알릴 때

implementation
- 모드 비트(Mode bit)가 하드웨어에 의해 제공된다.
1. 모드 비트 = 0 → 커널 모드 (kernel mode)
2. 모드 비트 = 1 → 사용자 모드 (user mode)
- 시스템이 사용자 코드를 실행 중인지 커널 코드를 실행 중인지 구분하는 능력을 제공한다.
- 일부 명령어는 특권 명령(privileged instruction)으로 지정되어, 커널 모드에서만 실행 가능하다.
특권 명령의 예: I/O 장치 직접 제어, 인터럽트 비활성화, 메모리 관리 테이블 수정, 시스템 정지 명령 등
- 사용자 프로세스가 실행 중이다 (mode bit = 1, 사용자 모드).
시스템 콜을 호출한다.
- TRAP 발생 → mode bit가 0으로 변경 → 커널 모드 진입
- 커널에서 시스템 콜을 실행한다.
- 실행 완료 후 return → mode bit가 1로 변경 → 사용자 모드 복귀
사용자 프로세스가 계속 실행된다.
핵심 포인트: 모드 전환의 핵심은 하드웨어가 제공하는 모드 비트(mode bit)이다. 시스템 콜 시 TRAP으로 커널 모드(mode bit=0)에 진입하고, 처리 후 반환하면 사용자 모드(mode bit=1)로 돌아온다. 이 메커니즘이 OS 보호의 기초이며, 사용자 프로그램이 하드웨어를 직접 조작하지 못하도록 막는다.