1. 운영체제 구조 (OS Structure)
1.1 Multiprogramming
단일 사용자가 CPU와 I/O 장치를 항상 바쁘게 유지할 수는 없다. Multiprogramming은 이 문제를 해결한다.
- 시스템에 있는 전체 Job 중 일부를 메모리에 적재
- Job scheduling을 통해 실행할 Job을 선택
- 해당 Job이 I/O 등으로 대기해야 하면, OS가 다른 Job으로 전환
1.2 Timesharing (Multitasking)
Multiprogramming의 논리적 확장으로, CPU가 Job을 매우 빠르게 전환하여 각 사용자가 자신의 프로그램과 대화식(interactive)으로 상호작용할 수 있게 한다.
- Response time이 충분히 짧아야 한다
- 각 사용자는 메모리에 최소 하나의 프로그램(Process)을 갖는다
- 여러 Job이 동시에 실행 준비 상태면 - CPU scheduling 필요
- 메모리에 다 못 올리면 - Swapping으로 프로세스를 메모리에 넣었다 빼었다 한다
- Virtual memory를 통해 프로세스 전체가 메모리에 없어도 실행 가능
2. 운영체제 동작 (OS Operations)
2.1 Event 처리
| 유형 | 분류 | 설명 |
|---|---|---|
| Interrupt | Asynchronous | 하드웨어가 발생. 언제 어떤 이벤트가 올지 모른다 |
| Trap | Synchronous | 의도적인 예외. 예: System call |
| Fault | Synchronous | 복구 가능한 오류. 예: Page fault, Division by zero. 처리 후 프로그램 실행을 계속할 수 있다 |
| Abort | Synchronous | 복구 불가능한 오류. 예: 메모리 비트 손상. 프로그램을 중단해야 한다 |
Interrupt와 Exception 모두 정상적인 프로그램 실행을 가로채는 것은 동일하다.
2.2 Dual-Mode Operation
OS가 자기 자신과 다른 시스템 구성 요소를 보호하기 위해 두 가지 실행 모드를 제공한다.

| 모드 | Mode Bit | 설명 |
|---|---|---|
| User Mode | 1 | 일반 사용자 프로그램 실행. Privileged instruction 사용 불가 |
| Kernel Mode | 0 | OS 코드 실행. 모든 명령어 사용 가능 |
- Mode bit는 하드웨어가 제공
- System call 시 User mode → Kernel mode로 전환 (trap 발생)
- System call 처리 완료 후 Kernel mode → User mode로 복귀
3. Process Management
3.1 Process란?
- 실행 중인 프로그램(A program in execution)
- 시스템 내에서 작업의 단위(Unit of work)
- Program은 수동적(passive) 개체, Process는 능동적(active) 개체
- Process는 작업 수행을 위해 자원(resource)이 필요: CPU, Memory, I/O, Files, 초기화 데이터
- Process 종료 시 재사용 가능한 자원은 회수(reclaim)
3.2 Thread
- Single-threaded process: Program counter 하나 - 다음 실행할 명령어 위치를 하나만 추적
- Multi-threaded process: Thread마다 Program counter가 하나씩 존재
3.3 OS의 Process Management 활동
- Process의 생성(Creating)과 삭제(Deleting) - User process, System process 모두
- Process의 일시 중단(Suspending)과 재개(Resuming)
- Process 동기화(Synchronization) 메커니즘 제공
- Process 간 통신(Communication) 메커니즘 제공
- Deadlock 처리 메커니즘 제공
4. Memory Management
- 모든 데이터는 처리 전후로 메모리에 존재해야 한다
- 모든 명령어는 실행을 위해 메모리에 있어야 한다
- Memory management는 언제 무엇이 메모리에 있을지 결정하여, CPU 활용률과 사용자 응답 시간을 최적화한다
주요 활동:
- 메모리의 어떤 부분이 현재 사용 중인지, 누가 사용하는지 추적
- 어떤 Process(또는 그 일부)와 데이터를 메모리에 넣고 뺄지 결정
- 필요에 따라 메모리 공간을 할당(Allocating) 및 해제(Deallocating)
5. Storage Management
5.1 File System
OS는 물리적 저장 장치의 속성을 추상화하여 논리적 저장 단위인 File을 제공한다.
- 각 매체는 Device(Disk drive, Tape drive 등)가 제어
- 매체마다 접근 속도, 용량, 전송률, 접근 방식(Sequential/Random)이 다르다
- 파일은 보통 Directory 구조로 관리
- 대부분의 시스템에서 Access control을 통해 접근 권한 관리
OS 활동: 파일/디렉토리 생성/삭제, 조작을 위한 Primitive 제공, Secondary storage에 매핑, 안정적(Non-volatile) 매체에 백업
5.2 Mass Storage
- Main memory에 안 들어가거나 장기 보관이 필요한 데이터를 저장하는 Disk
- 컴퓨터 전체 성능이 Disk 서브시스템과 그 알고리즘에 크게 의존
OS 활동: Free-space management, Storage allocation, Disk scheduling
5.3 Data Migration과 Cache Coherency

- Multitasking 환경: Storage hierarchy에서 가장 최신 값을 사용해야 한다
- Multiprocessor 환경: 모든 CPU의 Cache에 최신 값이 있도록 Cache coherency를 하드웨어가 보장해야 한다
- Distributed 환경: 데이터의 복사본이 여러 곳에 존재할 수 있어 더 복잡하다
6. I/O Subsystem
OS의 목적 중 하나는 하드웨어 장치의 세부 사항을 사용자에게 숨기는 것이다.
I/O 서브시스템이 담당하는 것:
- Buffering: 전송 중인 데이터를 임시 저장
- Caching: 자주 쓰는 데이터를 더 빠른 저장소에 보관
- Spooling: 한 Job의 출력과 다른 Job의 입력을 겹쳐서(overlapping) 처리
- 일반적인 Device-driver interface 제공
- 특정 하드웨어 장치를 위한 개별 Driver 제공
7. Protection과 Security
| 개념 | 설명 |
|---|---|
| Protection | OS가 정의한 자원에 대해 Process/User의 접근을 제어하는 메커니즘 |
| Security | 내부/외부 공격(DoS, Worm, Virus, Identity theft 등)에 대한 시스템 방어 |
사용자 식별 체계:
- User ID (UID): 이름 + 번호. 해당 사용자의 모든 파일/프로세스에 연결되어 접근 제어에 사용
- Group ID (GID): 사용자 집합을 정의하여 그룹 단위 권한 관리
- Privilege escalation: 사용자가 일시적으로 더 높은 권한의 ID로 전환 (예:
setuid)
8. Operating System Services
OS가 사용자에게 제공하는 서비스 계층 구조:

사용자 편의 기능
- User Interface: CLI, GUI, Batch interface
- Program Execution: 프로그램을 메모리에 로드하고 실행/종료
- I/O Operations: 파일 또는 I/O 장치에 대한 입출력
- File-System Manipulation: 파일/디렉토리의 생성/삭제/검색/권한 관리
- Communications: Process 간 정보 교환 (Shared memory 또는 Message passing)
- Error Detection: CPU, 메모리, I/O, 사용자 프로그램에서 발생하는 오류 감지 및 처리
시스템 효율성 기능
- Resource Allocation: 여러 사용자/Job이 동시에 실행될 때 자원을 배분
- Accounting: 사용자별 자원 사용량 추적
- Protection & Security: 자원 접근 제어 및 외부 공격 방어
9. System Call
9.1 개념
OS가 제공하는 서비스에 대한 프로그래밍 인터페이스이다.
- 보통 C/C++ 같은 고급 언어로 작성
- 프로그램은 직접 System call을 호출하기보다 API를 통해 접근한다
open()- System call (직접 호출)fopen()- API (C Library 함수, 내부적으로open()호출)
주요 API:
- Win32 API - Windows
- POSIX API - Unix, Linux, macOS
- Java API - JVM
API를 쓰는 이유: Portability(이식성)와 Ease of use(사용 편의성)
9.2 System Call 동작 방식


- 각 System call에는 번호가 할당됨
- System call interface가 번호로 인덱싱된 테이블을 유지
- 호출자는 System call이 어떻게 구현되었는지 알 필요 없음 - API만 따르고, OS가 무엇을 하는지만 이해하면 됨
9.3 Standard C Library 예제

C 프로그램에서 printf() 라이브러리 함수를 호출하면, 내부적으로 write() System call이 실행된다.
9.4 System Call의 종류

| 분류 | 설명 |
|---|---|
| Process Control | 프로세스 생성/종료/대기 (fork, exit, wait) |
| File Management | 파일 열기/읽기/쓰기/닫기 (open, read, write, close) |
| Device Management | 장치 제어 (ioctl, read, write) |
| Information Maintenance | 시스템 정보 조회 (getpid, alarm, sleep) |
| Communications | 프로세스 간 통신 (pipe, shmget, mmap) |
| Protection | 권한 관리 (chmod, umask, chown) |
10. Virtual Machine
10.1 개념
Virtual Machine은 Layered approach의 논리적 극한으로, 하드웨어와 OS 커널 전체를 하나의 하드웨어처럼 취급한다.
- 실제 하드웨어와 동일한 인터페이스를 제공
- OS Host가 각 프로세스에게 자신만의 Processor와 Virtual memory가 있다는 환상(illusion)을 만들어 줌
- 각 Guest에게 하부 컴퓨터의 (가상) 복사본을 제공

10.2 Java Virtual Machine (JVM)

“Write (Compile) once, run anywhere”
.java파일을 컴파일하면 Machine-independent한 Java Bytecode(.class파일)가 생성- JVM이 Bytecode를 해당 플랫폼의 Machine instruction으로 변환(Interpret)
- JVM 자체는 플랫폼마다 다르지만, Bytecode는 동일 - 플랫폼 독립적 실행