[fusion_text]
Introduction to Operating System and System Programming (ITE 2032): Fall 2016
- 강사
- 조교
- 시간 및 장소
- 운영 체제
- 강의(Lecture) : 화요일 10:00~12:00, 서울 정보통신관 510 강의실
- 실습(Lab) : 화요일 13:00~15:00, 서울 정보통신관 510 강의실
- Offiece Hour : 금요일 19:00~21:00, FTC 804호
- 시스템 프로그래밍
- 수요일 10:00~12:00, 13:00~15:00, 서울 정보통신관 510 강의실
- 운영 체제
강의 개요
The objective of this class is to provide the student the basic concepts in operating systems and implementation details. Operating System consists of several key concepts: process management, memory management, file system management and I/O subsystem. In this class, we will examine the details of each topic. Student will get exposed to implementation aspect of individual concepts via homeworks and course projects.
운영체제는 컴퓨터 및 정보가전(핸드폰, PDA, TV…), 각종 기기(자동차, 비행기, 발전소)등을 구동하는데 가장 근간이 되는 소프트웨어이다. 최근 각종 하드웨어 기술이 발달되고, 다양한 기기들이 마이크로 프로세서, 메모리, 저장장치, 네트웍 장치를 가지고 있음에 따라, 이들 하드웨어를 구동하고 상위응용프로그램에게 연동서비스를 제공하는 운영체제의 역할이 매우 강조되고 있다. 최근 기업체의 운영체제 기술 핵심인력에 대한 수요가 매우 급격히 증가하는 것도 이와 맥락을 같이 한다 하겠다. 본 과목에서는 운영체제의 개념과 실제 내용에 대해서 학습한다. 프로세스와 쓰레드의 구조 및 작동방법, 메모리 관리기법, CPU 스케쥴링 기법, 저장장치, 입출력장치 주제들에 대해서 학습한다. 본 과목에서는 개념에 대한 학습과 더불어 다양한 프로그램들을 실제 작성함으로써 관련 주제에 대한 실용지식 함양을 목적으로 한다.
- 운영체제에서 학습한 내용을 실습용 운영체제인 PintOS 상에서 실제 구현해 본다. 효율적인 실습을 위해 필요한 소스코드와 환경을 모아서 VDI이미지로 패키지 해놓았다. 실습을 위해 다음 파일을 설치하기 바란다. pintos_ova.vdi
- 운영체제 실습 강의 자료 파일은 다음링크를 참고하기 바란다: 운영체제_실습_강의자료.pdf
본과목은 운영체제 이론과 코딩을 통한 실습을 병행하는 수업이다. 커널 개발자들에게는 프로그램 개발시 현란한 편집기가 주어지지 않는다. 작은 텍스트 기반 터미널, 그리고 텍스트 기반 에디터의 사용부터 시작하기 바란다. 이를 위한 기초 도구들에 대한 학습은 시스템 프로그래밍 초기에 다룬다. 에디터, 디버거, 소스 관리도구등의 사용 역량에 따라 개발 효율이 천차만별이다. 수학문제를 풀때, 난잡하게 풀어나가는 것과 차곡차곡 한줄씩 풀어나가는 것은 문제푸는 속도에 영향을 미친다. 제대로된 툴 사용법을 익히는 것은 아무리 강조해도 지나치지 않다. 도구 사용에 대한 간단한 자료는 다음을 참고하기 바란다.
- 도구 사용법 (vi, emacs, ctags, etags, cscope, svn/git) : 도구_사용법
- 교재
- 주 교재
- Operating Systems: Three Easy Pieces, Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau
- 서울 공업센터 4층 제본소에서 한글 번역본 판매중 ( 2016년 말 정식 발매 예정)
- Operating Systems: Three Easy Pieces, Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau
- 보조 교재
- Beginning Linux Programming by Neil Matthew and Richard Stones, Nov, 2007
- Understanding the Linux Kernel, 3rd Ed.,Daniel Bovet and Marco Cesati
- Linux Kernel Development, 2nd Ed., Robert Love, Jan. 2005
- UNIX Internals: The New Frontiers by Uresh Vahalia, Oct. 1995
- 주 교재
운영체제와 관련된 질문과 코드등은 피아자를 통해서 공지된다. piazza는 온라인 강의용 사이트로서 전세계 유수대학에서 강의진행을 위해 사용되고 있다. piazza.com에 한양대학교 도메인의 이메일로 가입한 후 ITE2032 과목에 등록하면 된다. 기 수간신청한 학생들은 이미 등록이 되었을 것이며, 추가 등록한 학생들은 개별적으로 피아자 사이트에서 본 과목에 등록하면 된다. piazza는 영어로는 plaza라고 하면 ‘광장’을 뜻한다. 로마의 저 유명한 스페인 광장의 이름은 Piazza D’Espagna 이다. (Plaza Of Splain)이라는 뜻이다. 본 과목의 피아짜 사이트 주소는 아래와 같다.
일정
- 1 주차
- Operating System
- 강의(lecture) (9/6 화): Introduction to Operating Systems ( Piazza 가입하기 )
- 실습(Lab) (9/6 화): Introduction to PintOS ( 핀토스 팀 배정, 팀별 주제 배정, PintOS 이미지 설치하기)
- System Programming
- Activity/Subject(9/7 수): Introduction to system programming & Shell Survival Kit
- Introduction, UNIX history, UNIX Programming Basics
- Working with Text Editor – Vi and Emacs (Level Test)
- Regular Expression
- Activity/Subject(9/7 수): Introduction to system programming & Shell Survival Kit
- Operating System
- 2 주차
- Operating System
- 강의(lecture) (9/13 화): The Process, Limited Direct Execution, Scheduling-Introduction
- 실습(Lab) (9/13 화): Command Line Parsing, System Call
- 기존 Pintos에서는 사용자 프로그램 실행 시 인자값을 구분하지 못하고 Command Line을 하나의 문자열로 인식
- 본 과제에서는, 띄어쓰기 기준으로 인자값을 파싱하여 사용자 프로그램의 main함수로 전달 할 수 있도록 구현
- 기존 Pintos에서는 시스템 콜 핸들러가 구현되어 있지 않아 시스템 콜이 수행되지 않음
- 본 과제에서는 시스템 콜과 시스템 콜 핸들러를 구현
- 기존 Pintos에서는 사용자 프로그램 실행 시 인자값을 구분하지 못하고 Command Line을 하나의 문자열로 인식
- System Programming
- (9/14 화): 추석
- Operating System
- 3 주차
- Operating System
- 강의(lecture) (9/20 화): Multi-Level Feedback Queue, Scheduling – Proportion Share, Multiprocessor Scheduling
- 실습(Lab) (9/20 화): Hierarchical Process Structure, File Description
- 기존 Pintos에서는 프로세스의 계층구조가 존재하지 않아 부모 프로세스가 자식 프로세스의 정보를 알지 못하기 때문에 사용자 프로그램이 실행되기 전에 Pintos가 종료
- 본 과제에서는 프로세스 계층구조를 설계하고 사용자 프로그램이 실행 될 수 있도록 구현, exec, wait 시스템 콜을 구현
- 기존 Pintos에서는 파일 디스크립터가 존재하지 않으므로 파일 디스크립터를 사용하도록 설계된 시스템콜들이 동작하지 않음
- 본 과제에서는 파일의 접근이 가능하도록 파일 디스크립터를 설계하고 이를 사용하는 시스템 콜을 구현
- 기존 Pintos에서는 프로세스의 계층구조가 존재하지 않아 부모 프로세스가 자식 프로세스의 정보를 알지 못하기 때문에 사용자 프로그램이 실행되기 전에 Pintos가 종료
- System Programming
- Activity/Subject(9/21 수): Files IO & ctag/etag
- File related operations
- Text editor with ctag/etag)
- Activity/Subject(9/21 수): Files IO & ctag/etag
- Operating System
- 4 주차
- Operating System
- 강의(lecture) (9/27 화): Address Spaces, Memory API
- 실습(Lab) (9/27 화): Denying Write to Executable, Alarm System Call, Priority Scheduling
- 실행 중인 파일에 데이터를 기록하는 것을 방지하도록 구현
- 기존 Pintos에서는 Alarm 기능이 Busy waiting을 이용하여 구현되어 있음
- 본 과제에서는 Alarm 기능을 sleep/wake up 방식으로 수정
- System Programming
- Activity/Subject(9/28 수): Files and Directories
- On struct stat
- Device special files
- Related operations
- Activity/Subject(9/28 수): Files and Directories
- Operating System
- 5 주차
- Operating System
- 강의(lecture) (10/4 화): Address Translation, Segmentation, Free-Space Management
- 실습(Lab) (10/4 화): Multi-level feedback queue Scheduler, Virtual Memory(1)
- 현재 비 선점형 라운드 로빈 방식으로 구현되어 있는 Pintos의 스케줄링 방식을 우선순위가 고려된 선점형 스케줄링 방식으로 수정
- 현재 Pintos는 가상 메모리 시스템을 사용하지 않으며, 논리페이지와 물리페이지가 항상 1:1로 매핑
-
- 본 과제에서는 가상메모리 시스템을 구현
- 요구 페이징을 위한 페이지 폴트 핸들러 구현
-
- System Programming
- Activity/Subject(10/05 수): Standard I/O Library
- Standard Input, output, and error
- Buffering
- Positioning a stream
- Activity/Subject(10/05 수): Standard I/O Library
- Operating System
- 6 주차
- Operating System
- 강의(lecture) (10/11 화): Paging Introduction, Paging – Faster Translations (TLBs)
- 실습(Lab) (10/11 화): Virtual Memory(2), Memory Mapped File
- 파일을 메모리에 맵핑하는 시스템 콜(mmap(), munmap()) 구현
- System Programming
- Activity/Subject(10/12 수): Process Environment
- Program Execution and Termination
- Memory Layout of a C program
- Activity/Subject(10/12 수): Process Environment
- Operating System
- 7 주차
- Operating System
- 강의(lecture) (10/18 화): Smaller Tables, Beyond Physical Memory – Mechanisms, Beyond Physical Memory – Policies
- 실습(Lab) (10/18 화): Swapping
- 요구페이징에 의해 파일 데이터를 메모리로 로드 하도록 구현
- Swap in/out 함수를 구현
- 페이지 교체 방식은 클록 알고리즘을 이용하여 동작하도록 구현
- System Programming
- Activity/Subject(10/19 수): Process Control
- Process identifiers
- Process control operations
- Activity/Subject(10/19 수): Process Control
- Operating System
- 8 주차
- Operating System
- 강의(lecture) (10/25 화): Concurrency, Thread API
- 실습(Lab) (10/25 화): 중간고사
- System Programming
- Activity/Subject(10/26 수): 중간고사
- Operating System
- 9 주차
- Operating System
- 강의(lecture) (11/1 화): Locks, Lock-based Concurrent Data Structures
- 실습(Lab) (11/1 화): Stack
- 기존 Pintos에서는 스택의 크기를 4KByte로 고정
- 본 과제에서는 스택이 최대 8MByte까지 확장 가능하도록 구현
- 기존 Pintos에서는 스택의 크기를 4KByte로 고정
- System Programming
- Activity/Subject(11/02 수): Signals
- Concepts
- Interrupted system calls
- Related Functions
- Activity/Subject(11/02 수): Signals
- Operating System
- 10 주차
- Operating System
- 강의(lecture) (11/8 화):Condition Variables, Semaphores,
- 실습(Lab) (11/8 화): Prirority Scheduling and Synchronization
- 여러 스레드가 lock, semaphore, condition variable 을 얻기 위해 기다릴 경우 우선순위가 가장 높은 스레드가 CPU를 점유 하도록 구현
- System Programming
- Activity/Subject(11/09 수): Threads
- Thread concepts
- Creation and termination
- Activity/Subject(11/09 수): Threads
- Operating System
- 11 주차
- Operating System
- 강의(lecture) (11/15 화): Common Concurrency Problems, Event-based Concurrency
- 실습(Lab) (11/15 화): Priority Inversion Problem
- 우선순위 역전 현상이란 우선순위가 높은 스레드가 우선순위 낮은 스레드를 기다리는 현상
- System Programming
- Activity/Subject(11/16 수): Threads Control
- Thread synchronization
- Locks
- Activity/Subject(11/16 수): Threads Control
- Operating System
- 12 주차
- Operating System
- 강의(lecture) (11/22 화): I/O Devices, Hard Disk Drives
- 실습(Lab) (11/22 화): Buffer Cache(1)
- 기존 Pintos에서는 Buffer Cache가 존재하지 않아, 파일 입출력 시 바로 디스크 입출력 동작을 수행
- 본 과제에서는, Buffer Cache를 추가하여, 파일 입출력 시 Buffer Cache를 통해 I/O를 수행하도록 구현
- 기존 Pintos에서는 Buffer Cache가 존재하지 않아, 파일 입출력 시 바로 디스크 입출력 동작을 수행
- System Programming
- Activity/Subject(11/23 수): Advanced I/O
- Non blocking I/O
- Memory mapped I/O
- Activity/Subject(11/23 수): Advanced I/O
- Operating System
- 13 주차
- Operating System
- 강의(lecture) (11/29 화): RAIDs, File and Directories, File System Implementation
- 실습(Lab) (11/29 화): Buffer Cache(2)
- System Programming
- Activity/Subject(11/30 수): Interprocess
- Pipes
- Message queues
- Activity/Subject(11/30 수): Interprocess
- Operating System
- 14 주차
- Operating System
- 강의(lecture) (12/6 화): Locality and The Fast File System, Crash Consistency, Log-structured File Systems
- 실습(Lab) (12/6 화): Extensible File
- 기존 Pintos에서는 파일 생성 시 파일의 크기가 결정되고, 추후 변경이 불가능
- 본 과제에서는 파일에 쓰기 동작을 수행할 때에 디스크 블록을 할당 받아 사용하도록 구현
- 기존 Pintos에서는 파일 생성 시 파일의 크기가 결정되고, 추후 변경이 불가능
- System Programming
- Activity/Subject(12/07 수): Interprocess
- Semaphores
- Shared memory
- Activity/Subject(12/07 수): Interprocess
- Operating System
- 15 주차
- Operating System
- 강의(lecture) (12/13 화): Data Integrity and Protection, Summary
- 실습(Lab) (12/13 화): Subdirectory
- 기존 Pintos에서는 루트 디렉터리 내에 파일만을 생성할 수 있음
- 본 과제에서는 루트 디렉터리 내에 디렉터리를 생성할 수 있도록 하여 디렉터리 계층 구조를 구성할 수 있도록 수정
- 기존 Pintos에서는 루트 디렉터리 내에 파일만을 생성할 수 있음
- System Programming
- Activity/Subject(12/14 수): Network IPC
- Vi and emacs (Level Test)
- Sockets
- Activity/Subject(12/14 수): Network IPC
- Operating System
- 16 주차
- Operating System
- 강의(lecture) (12/20 화): 기말고사
- 실습(Lab) :
- System Programming
- Activity/Subject(12/21 수): 기말고사
- Operating System
[/fusion_text]