GeekOS 1. Introduction March, 2015 Dept. of Software, Dankook University E-mail : sonn2@daum.net
Introduction Who is Class Assistant..? 실습 조교 : 손대연 (대학원 컴퓨터학과 석사과정) 연구실 : 자연과학관 515호 (임베디드 연구실) 이메일 : sonn2@daum.net 카톡 아이디 : sonn2 GeekOS 실습은 소스 구현에 있어서 다소 힘든 점이 많습니다. 그러한 관계로 모르는 것이 있으시면 바로 물어보시는 것이 가장 좋습니다. 이메일은 가급적 실시간으로 살펴보고 있으니 일반적인 질문은 이메일을 통해서 물어보셔도 빠른 시간 내에 답장을 받아보실 수 있습니다. 연구실 방문시간은 '오후 2시 ~ 오후 6시' 정도이며 긴급하게 질문을 할 경우에는 카카오톡으로 메시지를 보내주셔도 괜찮습니다. (늦은 시간에도 답장해드립니다.) 2
GeekOS Course 1. Introduction Software와 Hardware간의 관계와 OS를 왜 배워야 하는 지에 대한 이유를 생각해본다. GeekOS에 대한 내용을 숙지하고 ubuntu에 bochs를 설치하여 OS에 대한 개발 환경을 설정해본다. 2. ELF, User Process ELF File Format에 대한 내용을 숙지하고 Header Parsing에 관하여 GeekOS에서 구현해본다. User Process를 구성하는 Segment, GDT, LDT 등과 Context Switching에 대한 내용을 숙지하여 GeekOS에서 구현해본다. 3. Paging, Scheduling Process의 Segment를 Memory상에 Paging 기법으로 할당하는 방법을 알아보고 실제 OS에서는 어떻게 구현되는지 살펴본다. Process의 실행 순서를 설정하는 Scheduling에 대한 기본적인 내용을 알아보고 Round-Robin Scheduling을 비롯한 다양한 Scheduling 기법을 배워가며 관련 알고리즘을 직접 GeekOS에서 구현해본다. 4. Semaphore, Mutex CPU상에서 Data에 접근할 때 발생하는 Synchronization 관련 내용을 알아보고 Semaphore, Mutex에 대한 필요성에 대해서 살펴본다.
What is the GeekOS? GeekOS University of Maryland(2001)에서 제작된 교육용 운영체제 User Process, Virtual Memory, Scheduler 등의 내용 포함 부팅 과정 및 기본 자원 초기화에 대한 내용 구현 여러 개의 Project를 통해 단계별로 OS를 구현할 수 있도록 소스 제공 http://geekos.sourceforge.net/index.php 참고
What is the GeekOS? 우리는 어떤 생각을 가지고 GeekOS에 접근해야 하는가? 기존의 C 프로그래밍 수업(선행 필수)에서는 C언어를 사용하기 위한 방법론을 배우게 된다. 우리는 Program을 만드는 방법을 처음 접하게 되지만, 실제로 어떻게 Program이 생성이 되고 작동되는 지에 대한 이론은 자세히 모른다. 우리가 OS를 직접 Programming 하기 위해서는 다음과 같은 질문에 대한 대답을 먼저 찾아야 한다. CPU, Memory, Disk를 비롯한 Hardware는 각각 무슨 역할을 가지는가? Software는 어떠한 과정을 거쳐서 만들어지는가? 우리가 사용하는 Software는 어떠한 과정을 거쳐서 실행되는가? Device에 있어서 OS가 차지하는 역할은 무엇인가? OS의 기본적인 설계 구조와 그에 따른 자료 구조는 Hardware의 어떤 자료를 근거로 하여 만들어졌는가? 우리는 왜 OS를 사용해야 하며, 왜 배워야 하는가? GeekOS 수업은 암기보다는 이해가 필요합니다.
GeekOS 설치 순서 ① ② ③ ④ ⑤ ⑥
GeekOS 실행환경 ① VirtualBox VirtualBox는 Oracle에서 제작된 가상화 소프트웨어 http://www.virtualbox.org/wiki/downloads
GeekOS 실행환경 ① VirtualBox 1. 좌측상단에 '새로 만들기' 클릭
GeekOS 실행환경 ① VirtualBox 2. Memory 크기 할당
GeekOS 실행환경 ① VirtualBox 3. HDD 크기 할당
GeekOS 실행환경 ① VirtualBox 3. HDD 크기 할당
GeekOS 실행환경 ① VirtualBox 4. 가상 디스크 생성
GeekOS 실행환경 ② ubuntu 1. ubuntu 10.04 image 다운받기 http://old-releases.ubuntu.com/releases/lucid/ubuntu-10.04-desktop-i386.iso
GeekOS 실행환경 ② ubuntu 2. Virtualbox에서 새로 생성한 OS의 설정에서 ubuntu iso 파일 선택
GeekOS 실행환경 ② ubuntu 2. Virtualbox에서 새로 생성한 OS의 설정에서 ubuntu iso 파일 선택
GeekOS 실행환경 ② ubuntu 3. ubuntu iso 파일을 선택한 이후 OS를 부팅한 뒤 설치 시작 여기 클릭
GeekOS 실행환경 ② ubuntu 3. ubuntu iso 파일을 선택한 이후 OS를 부팅한 뒤 설치 시작 여기 클릭
GeekOS 실행환경 ② ubuntu 3. ubuntu iso 파일을 선택한 이후 OS를 부팅한 뒤 설치 시작 ① ③ ② ④
GeekOS 실행환경 ② ubuntu 3. ubuntu iso 파일을 선택한 이후 OS를 부팅한 뒤 설치 시작 여기 클릭
GeekOS 실행환경 ② ubuntu 3. ubuntu iso 파일을 선택한 이후 OS를 부팅한 뒤 설치 시작 ① ② ③ ④ ⑤
GeekOS 실행환경 ② ubuntu 3. ubuntu iso 파일을 선택한 이후 OS를 부팅한 뒤 설치 시작 여기 클릭
GeekOS 실행환경 ② ubuntu 3. ubuntu iso 파일을 선택한 이후 OS를 부팅한 뒤 설치 시작
GeekOS 실행환경 ② ubuntu 3. ubuntu iso 파일을 선택한 이후 OS를 부팅한 뒤 설치 시작 여기 클릭
GeekOS 실행환경 ② ubuntu 4. 설치 종료한 뒤 Enter키 눌러서 시스템 재 시작
GeekOS 실행환경 ③ bochs 1. 재 부팅 이후 ubuntu 로그인 하기 여기 클릭
GeekOS 실행환경 ③ bochs 1. 재 부팅 이후 ubuntu 로그인 하기 ① ②
GeekOS 실행환경 ③ bochs 2. '프로그램' '보조 프로그램' '터미널' 열기
GeekOS 실행환경 ③ bochs 3. bochs 설치에 앞서 기본적인 개발 관련 package 설치하기 sudo apt-get update && sudo apt-get upgrade && sudo apt-get install build-essential && sudo apt-get install vim 명령어 입력 후 자신의 아이디의 암호 입력한 뒤 Enter
GeekOS 실행환경 ③ bochs 3. bochs package 설치 sudo apt-get install bochs bochs-x
GeekOS 실행환경 ③ bochs 3. bochs package 설치 bochs 입력한 뒤 다음과 같은 화면 나타날 시 package 설치 완료
GeekOS 실행환경 ④ nasm 1. Intel x86 Architecture Assembler인 nasm의 rpm 파일 다운 wget http://www.nasm.us/pub/nasm/releasebuilds/2.08/linux/nasm-2.08-1.i386.rpm 다운 받은 파일은 /home/(자신의 아이디) 경로에 존재함.
GeekOS 실행환경 ④ nasm 2. alien package 설치 sudo apt-get install alien
GeekOS 실행환경 ④ nasm 3. nasm의 rpm 파일을 deb 파일로 변환 sudo alien -k nasm-2.08-1.i386.rpm
GeekOS 실행환경 ④ nasm 3. nasm의 deb 파일을 설치함으로서 package 설치 종료 sudo dpkg -i nasm_2.08-1_i386.deb 해당 명령어로 nasm package 설치 완료 한 뒤에 nasm -version nasm의 버전을 확인하는 명령어를 실행하여 버전 체크
GeekOS 실행환경 ⑤ GeekOS 1. GeekOS의 공식 사이트에서 Source를 다운 받는다. ② ① ③ ④
GeekOS 실행환경 ⑤ GeekOS 1. GeekOS의 공식 사이트에서 Source를 다운 받는다. ① ②
GeekOS 실행환경 ⑤ GeekOS 2. 다운 받은 파일을 압축 해제하여 홈 디렉토리에 옮겨놓는다. Home Directory Path : /home/(자신의 아이디) ① ③ 마우스 오른쪽 버튼 클릭 ④ ②
GeekOS 실행환경 ⑤ GeekOS 2. 다운 받은 파일을 압축 해제하여 홈 디렉토리에 옮겨놓는다. Home Directory Path : /home/(자신의 아이디) ③ ① 마우스 오른쪽 버튼 클릭 빈 곳에 마우스 오른쪽 버튼 클릭 ② ④
GeekOS 실행환경 ⑤ GeekOS 3. ~/.bashrc 파일에 환경변수 추가 터미널을 열고 vi ~/.bashrc 실행하여 파일을 vim 편집기로 열도록 한다. ② ① 방향키 또는 Page Down키를 이용하여 커서를 파일의 맨 마지막 줄로 이동
GeekOS 실행환경 ⑤ GeekOS 3. ~/.bashrc 파일에 환경변수 추가 터미널을 열고 vi ~/.bashrc 실행하여 파일을 vim 편집기로 열도록 한다. ① ② a키를 눌러서 입력상태로 바꾼다. 하단의 내용을 그대로 입력한 뒤 Esc를 누른 후에 :wq! 라는 문자를 입력하여 저장한 뒤 종료시킨다. GEEKOS_HOME=/home/(자신의 아이디)/geekos-0.3.0 export GEEKOS_HOME PATH=$GEEKOS_HOME/scripts:$PATH export PATH
GeekOS 실행환경 ⑤ GeekOS 4. 저장 이후 터미널에서 source ~/.bashrc 입력하여 환경변수 적용 5. Project Directory 생성하기 startproject project0 /home/(자신의 아이디)/geekos-0.3.0/src 입력하여 생성
GeekOS 실행환경 ⑤ GeekOS 5. cd project0/build/ 실행하여 Project의 Build 디렉토리로 들어간다. 6. Project의 Compile option을 수정하도록 한다. vi Makefile ① ②
GeekOS 실행환경 ⑤ GeekOS 6. Project의 Compile option을 수정하도록 한다. Makefile이 vim 편집기에서 열린 상태에서 /GENERAL_OPTS 입력하여 해당 옵션이 포함되어 있는 Line 검색 ① ② 기존의 옵션에서 수정 없이 Compile한 후 실행을 하게 되면 정상적으로 작동 되지 않는다. 이로 인하여 Compile을 담당하는 Makefile의 일부 옵션을 수정하여야 한다.
GeekOS 실행환경 ⑤ GeekOS 6. Project의 Compile option을 수정하도록 한다. ① ② a키를 눌러서 입력상태로 바꾼다. 하단의 내용으로 기존의 내용을 변경한 뒤 Esc를 누른 후에 :wq! 라는 문자를 입력하여 저장한 뒤 종료시킨다. GENERAL_OPTS := -O -Wall $(EXTRA_C_OPTS) -fno-stack-protector CC_GENERAL_OPTS := $(GENERAL_OPTS)
GeekOS 실행환경 ⑤ GeekOS 7. 터미널로 돌아와서 project0/build 디렉토리에서 make 입력 ② ① make 실행 이후 fd.img가 만들어지면 정상적으로 Compile이 된 것이다. 만약 make가 제대로 실행되지 않고 Compile error가 발생할 시에는.. makefile 파일의 수정한 부분을 자세히 살펴보고 다시 고치던지.. project 디렉토리를 만드는 과정부터 다시 시작하자.
GeekOS 실행환경 ⑤ GeekOS 8. bochs의 정상적인 실행을 위하여 build 디렉토리 내의.bochsrc 파일을 수정하도록 한다. vi.bochsrc ① ②
GeekOS 실행환경 ⑤ GeekOS 8. bochs의 정상적인 실행을 위하여 build 디렉토리 내의.bochsrc 파일을 수정하도록 한다. vgaromimage: file=/usr/share/bochs/vgabios-lgpl-latest romimage: file=/usr/share/bochs/bios-bochs-latest megs: 8 boot: floppy floppy_bootsig_check: disabled=0 floppya: 1_44=fd.img, status=inserted log:./bochs.out keyboard_serial_delay: 250 keyboard_paste_delay: 100000 vga: extension=vbe mouse: enabled=0 private_colormap: enabled=0
GeekOS 실행환경 ⑤ GeekOS ① 9..bochsrc 파일을 수정하고 저장한 이후 터미널에서 bochs 입력하여 정상적으로 수행 되는지 확인한다. ②
실습 수행 조 편성 최종 과제 수행 방법 조 편성 인원은 4~5명으로 정하도록 한다. 2번째 실습 시간 전까지 조장 및 조원들의 명단을 이메일로 제출해주세요. 시간 내에 조를 편성하지 못한 사람들은 Random으로 정해진다. 마지막 실습 수업을 종료한 이후에 3~4개의 주어진 과제 중에서 1개를 선택하여 주어진 시간 내에 Source를 작성하여 제출하도록 한다. 수행 프로젝트는 선택 과제에 대한 구현 과정의 보고서를 작성하도록 한다. PPT, HWP, PDF 등 보고서 양식은 자유 참고자료를 사용하는 경우 무조건 출처 표기가 되어있어야 함 보고서에는 Source가 필수적으로 포함이 되어 있어야 한다. Source없이 보고서를 작성 할 경우 0점 처리 각 Source는 구현 과정을 알 수 있도록 주석이 포함되어 있어야 한다. 미 완성 상태라도 무조건 제출하도록 한다. 주어진 일정 내에 보고서를 제출하지 못한 조는 감점 처리된다.
실습 수행 조 편성 최종 과제 수행 방법 또한, 최종 과제 제출과 더불어 발표 자료를 준비하여 정해진 일정에 교수님, 실습조교에게 Presentation 형식으로 발표를 실시한다. PT 발표 시간 : 20분 내외 PT 제출 양식은 자유 최종 과제 보고서와 동일하게 제작 과정에 대한 내용을 필히 작성 최종 과제의 주제 공개 및 보고서 제출, 발표 일자는 추후 공지 예정
1번째 과제 GeekOS 설치한 뒤 문자 출력하기 본 과제는 조 별로 진행한다. PT에 적힌 설치 과정을 참고하여 직접 GeekOS를 설치한 뒤 다음과 같이 Screenshot을 찍어서 교수님과 실습조교에게 E-mail을 보내도록 한다. 첨부 내용 : 작성한 Source (Project 단위로 보낼 것), Screenshot