# 수업계획서

## 수업 설명

이 수업에서는 컴퓨터 시스템의 작동에 필수적인 운영체제의 설계, 기능, 관리에 대해 포괄적으로 다룹니다. 프로세스 관리, 메모리 관리, 파일 시스템 등 운영체제의 이론적・실질적 측면과 리눅스 운영체제에 대한 깊은 이해를 얻게 됩니다. 강의, 실습, 프로젝트를 통해 운영체제의 작동 방식, 하드웨어 및 소프트웨어와의 상호 작용, 운영체제 리소스의 효율적인 관리 방법을 배울 것입니다.

## 학습 목표

이 수업을 성공적으로 마치면 학생들은 다음을 할 수 있습니다:

- 운영체제의 기본 구성 요소와 상호 작용에 대한 이해.
- 프로세스 관리, 메모리 관리, 교착 상태 (deadlock) 관리 정책의 선택 및 적용.
- 파일, 장치, 디스크 저장소 관리의 기초 이해.
- 기본 명령어, 프로세스 관리, 시스템 호출 등 리눅스 운영체제를 활용한 실질적인 경험.

## 전제 조건

- 컴퓨터 시스템의 기초
- 프로그래밍 입문

## 수업 개요

### 1주차: 운영체제 소개

**개요**:

- 운영체제 개념, 구성 요소, 작업에 대한 개요.
- 운영체제에서의 보호와 보안.
- 컴퓨팅 환경과 운영체제의 추상적 관점.

**주요 학습 성과**:

- 운영체제의 역할 및 목적 이해.
- 운영체제의 구성 요소와 작동 파악.
- 컴퓨팅 환경에서 보호 및 보안의 필요성 인식.

### 2주차: 운영체제 아키텍처

**개요**:

- 컴퓨터 시스템 아키텍처: 단일 프로세서 및 멀티 프로세서 시스템.
- 운영체제 유형: 배치, 다중 프로그램, 시분할, 실시간, 분산.

**주요 학습 성과**:

- 다양한 컴퓨터 시스템 아키텍처 이해.
- 다양한 유형의 운영체제와 그 응용 분야 구분.

### 3주차: 프로세스 관리

**개요**:

- 프로세스 개념, 프로세스 연산, 협력 프로세스, 프로세스 간 통신, 스레드.
- Linux OS 소개 및 기본 명령어.

**주요 학습 성과**:

- 운영체제에서 프로세스의 개념 및 관리 이해
- Linux OS 명령어 활용한 초기 실습 경험.

### 4주차: 프로세스 동기화

**개요**:

- 임계 영역 문제, 동기화 하드웨어, 세마포어, 고전적인 동기화 문제.
- 기본 Linux 프로세스 관리 명령어 및 시스템 호출.

**주요 학습 성과**:

- 프로세스 동기화 및 임계 영역 문제에 대한 해결책 이해.
- 프로세스 관리를 위한 Linux 명령어 적용.

### 5주차: CPU 스케줄링

**개요**:

- 스케줄링 기준, 스케줄링 알고리즘, 다단계 큐 스케줄링, 다단계 피드백 큐 스케줄링.

**주요 학습 성과**:

- CPU 스케줄링의 원리 이해.
- 다양한 CPU 스케줄링 알고리즘 평가.

### 6주차: 교착 상태 (Deadlock)

**개요**:

- 교착 상태의 특징, 예방, 회피, 감지 및 복구.
- 은행가 알고리즘 (Banker’s algorithm) 소개.

**주요 학습 성과**:

- 교착 상태와 이를 처리하는 방법 이해.
- 교착 상태 회피를 위한 은행가 알고리즘 적용.

### 7주차: 메모리 관리

**개요**:

- 연속 메모리 할당, 단편화, 페이징, 세그먼테이션.
- 가상 메모리 개념 소개.

**주요 학습 성과**:

- 메모리 관리 전략의 이해.
- 페이징 및 세그먼테이션의 개념 이해.

### 8주차: 가상 메모리

**개요**:

- 요구 페이징, 페이지 교체 알고리즘, 프레임 할당, 스래싱(thrashing).

**주요 학습 성과**:

- 가상 메모리의 작동 방식 이해.
- 페이지 교체 알고리즘 평가.

### 9주차: 파일 시스템 인터페이스

**개요**:

- 파일 시스템 인터페이스의 개념, 접근 방법, 디렉터리 및 디스크 구조.

**주요 학습 성과**:

- 파일 시스템 인터페이스와 접근 방법 이해.
- 디렉터리 및 디스크 구조 인식.

### 10주차: 파일 시스템 구현

**개요**:

- 파일 시스템 구조, 구현, 디렉토리 구현, 할당 방법, 여유 공간 관리.

**주요 학습 성과**:

- 파일 시스템의 구현 이해.
- 할당 방법 및 여유 공간 관리 기술 이해.

### 11주차: 보조 저장소 관리

**개요**:

- 대용량 저장소 구조, 디스크 구조, 디스크 스케줄링 알고리즘, 디스크 관리, RAID 구조.

**주요 학습 성과**:

- 보조 저장소 관리의 원리 이해.
- 다양한 디스크 스케줄링 알고리즘 평가.

### 12주차: 장치 및 I/O 시스템

**개요**:

- 장치의 종류, 채널 및 제어 장치, 다중 경로, 블록 멀티플렉싱.

**주요 학습 성과**:

- 장치 및 I/O 시스템의 관리 이해.
- 채널, 제어 장치, 블록 멀티플렉싱의 개념 이해.

### 13주차: 심화 Linux 시스템 관리

**개요**:

- Linux의 메모리 관리 명령어 및 시스템 호출.
- Linux의 파일 관리 명령어 및 시스템 호출.

**주요 학습 성과**:

- Linux 시스템 관리에 대한 고급 기술 습득.
- 메모리 및 파일 관리를 위한 Linux 명령어 적용.

### 14주차: 사례 연구 및 실제 적용

**개요**:

- 실제 운영체제 사례 연구 분석.
- 실제 시나리오에서 운영체제 개념의 적용에 대한 논의.

**주요 학습 성과**:

- 실제 운영체제 구성 및 관리 전략 분석.
- 이론적 개념을 실제 운영체제 문제에 적용.

### 15주차: 복습 및 최종 프로젝트

**개요**:

- 강의에서 다룬 핵심 개념 복습.
- 운영체제 관리 및 적용에 중점을 둔 기말 프로젝트 완료 및 발표.

**주요 학습 성과**:

- 수업을 통해 습득한 지식 강화.
- 포괄적인 기말 프로젝트를 통해 운영체제 관리에 대한 실질적인 기술 입증.

## 성적 평가

- 수업 참여: 20%
- 과제: 40%
- 기말 프로젝트: 40%

## 교재 및 참고 자료

이 수업에 필수 교재는 없지만, 추가 자료를 원할 경우 다음 책을 권장합니다:

[Operating Systems: Three Easy Pieces by Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau (University of Wisconsin-Madison)](https://pages.cs.wisc.edu/~remzi/OSTEP/)
