Introduction to System Programming (CSE 4009): Fall 2017

  • 강사
    • 원유집 교수님 : 교수님_메일, 공업센터 별관 505-1, 컴퓨터 공학부
  • 조교
    • 오준택 : 오준택_메일, 공업센터 별관 507-1호
    • 노연진 : noh_mail_addr, FTC 804호
  • 시간 및 장소
    • 시스템 프로그래밍
      • 화요일, 목요일: 10:00~12:00
        • 화요일: 서울정보통신관 501호
        • 목요일: 서울정보통신관 509호
      • 수요일, 금요일: 15:00~17:00
        • 수요일: 서울정보통신관 501호
        • 금요일: 서울정보통신관 509호

강의 개요


This course provides system programming skills. Topics include the UNIX system calls such as POSIX and MS Window systems-calls such as WIN32 and other middle-ware APIs. Students are required to write system programs using system-calls. Students can gain hands-on experience I using and modifying a small operating system.

본 강의의 목표는 수강생들로 하여금 컴퓨터 시스템 프로그래밍을 수행하는 데 필요한 기본적인 소양을 함양토록 하는데 있다.  C언어에 대한 기본적인 지식은 가지고 있는 것을 가정하고 강의를 진행한다. 본강의는 매주 2시간의 이론 강의와 2시간의 실습강의로 진행된다. 실습강의는 이론시간에 배운 내용들을 강사의 지도로 실습하는 형태로 진행된다. 프로그램을 개발하는 데 필요한 기본적인 도구들, 에디터, 컴파일러, 디버거등을 학습한다. 그리고, 다수의 개발자가 동시에 프로그램을 개발할 경우 필수적인 도구인 형상관리도구(version management tool) 그리고 에티터, 컴파일러, 링커, 디버거등을 통합한 통합개발도구(integrated development environment)에 대해서 학습한다. 프로세스, 쓰레드, 파일 입출력, 네트웍 입출력 관련 시스템 컬에 대해서 학습한다. 본 강의의 목표는 수강생들로 하여금 컴퓨터 시스템 프로그래밍을 수행하는 데 필요한 기본적인 소양을 함양토록 하는데 있다. C언어에 대한 기본적인 지식은 가지고 있는 것을 가정한다.

  • 교재
    • 주교재: “Advanced Programming in the UNIX Environment”, by W.Richard Stevens, Stephen A. Rago (3rd Edition)
    • 부교재: “운영체제 아주 쉬운 세 가지 이야기”, by Remzi H. Arpaci-Desseau 저, 원유집 역
  • 점수 배분
    • 중간 고사: 35%
    • 기말 고사: 35%
    • 과제: 25%
    • 출석: 5%

수업과 관련된 질문과 코드등은 피아자를 통해서 공지된다. piazza는 온라인 강의용 사이트로서 전세계 유수대학에서 강의진행을 위해 사용되고 있다. piazza.com에 한양대학교 도메인의 이메일로 가입한 후CSE4009 과목에 등록하면 된다. 수rkd신청한 학생들은 이미 등록이 되었을 것이며, 추가 등록한 학생들은 개별적으로 피아자 사이트에서 본 과목에 등록하면 된다. piazza는 영어로는 plaza라고 하면 ‘광장’을 뜻한다. 로마의 저 유명한 스페인 광장의 이름은 Piazza D’Espagna 이다. (Plaza Of Splain)이라는 뜻이다. 본 과목의 피아짜 사이트 주소는 아래와 같다.

일정


  • 1 주차
  • 2 주차
    • 이론 (9/12, 9/13)
      • Files IO: 파일과 관련괸 각종 시스템 함수의 동작을 학습한다.
        • open(), close(), lseek(), read(), write(), pread(), pwrite(), dup(), dup2(), fsync(), fdatasync(), fcntl(), ioctl()
    • 실습 (9/14, 9/15)
  • 3 주차
  • 4 주차
    • 이론 (9/26, 9/27)
      • System Data Files and Process Environment: 각종 시스템 파일과 해당 파일과 관련된 시스템 API에 대해서 학습하고, 시스템 시간 관련 API의 동작을 학습한다.
        • /etc/passwd, /etc/group/, time(), clock_gettime(), clock_getres(), clock_settime(), gettimeofday()
    • 실습 (9/28, 9/29)
    • 과제
  • 5 주차
    • 추석
  • 6 주차
    • 이론 (10/10, 10/11)
      • Process Environment: 프로세스가 무엇인지 알아보고, 프로세스 종료 API와 프로세스가 실행될 때, 사용될 수 있는 환경변수, 그리고, 프로세스 메모리 주소 공간에 대해서 학습한다.
        • exit(), atexit(), getenv(), putenv(), setenv(), unsetenv(), malloc(), calloc(), realloc(), free()
    • 실습 (10/12, 10/13)
  • 7 주차
    • 이론 (10/17, 10/18)
      • Process Control: 프로세스의 동작 및 pid와 관련된 시스템 API의 동작에 대해서 학습한다.
        • getpid(), getppid(), getuid(), geteuid(), getgid(), getegid(), fork(), wait(), waitpid(), exec(), setuid(), setgid(), system(), getlogin(), nice(), getpriority(), setpriority()
    • 실습 (10/19, 10/20)
  • 8 주차
    • 중간고사 (10/23)
  • 9 주차
    • 이론 (10/31, 11/1)
      • Signal: 시그널의 개념에 대해 알아보고, 시그널 관련 시스템 API 함수를 학습한다.
        • signal(), kill(), raise(), alarm(), pause()
    • 실습 (11/2, 11/3)
    • 과제
  • 10 주차
    • 이론 (11/7, 11/8)
      • Threads: 쓰레드의 개념에 대해 알아보고, 쓰레드 관련 API의 사용법에 대해서 학습한다.
        • pthread_create(), pthread_exit(), pthread_join(), pthread_cancel(), pthread_cleanup_push(), pthread_cleanup_pop(), pthread_detach()
    • 실습 (11/9, 11/10)
  • 11 주차
    • 이론 (11/14, 11/15)
      • Thread Control: 쓰레드간의 동기화에 사용되는 락의 종류와 개념을 학습하고, 실제 락 API의 사용법을 익힌다.
        • Mutex, Deadlock problem, rwLock, Condition Variable, Spin lock, Barrier
    • 실습 (11/16, 11/17)
    • 과제
  • 12 주차
    • 이론 (11/21, 11/22)
      • Advanced I/O: 일반적인 I/O가 아닌 특수한 각종 I/O에 대해서 학습한다.
        • Non-blocking I/o, Record locking, Asynchronous I/O, Memory Mapped I/O
    • 실습 (11/23, 11/24)
  • 13 주차
    • 이론 (11/28, 11/29)
      • Interprocess Communication 1: 프로세스간의 통신을 가능케 하는 각종 표준 POSIX 시스템 기법에 대해 학습한다.
        • pipe, FIFO
    • 실습 (11/30, 12/1)
  • 14 주차
  • 15 주차
    • 이론 (12/12, 12/13)
      • Network IPC: 네트워크 통신에 필요한 소켓 라이브러리 API에 대해 학습한다.
        • socket(), bind(), listen(), accept(), connect()
    • 실습 (12/14, 12/15)
  • 16 주차
    • 기말고사 (12/18 19:30-21:30)