Geek-OS Project 정영진 cyj4369@gmail.com
Geek-OS Geek-OS project # 0~5 Project # 0 : 프로젝트 작업환경 구축 Project # 1 : Loading Executable Files Project # 2 : Process Project # 3 : Scheduling & Semaphore Project # 4 : Virtual Memory Project # 5 : File System
Geek-OS project User process Text Stack User process 생성 과정 구현 Load_User_Process() 구현 읽은 ELF 정보를 통해 process segment를 구성 Create_User_Context() 구현 User context 구조체 초기화 및 LDT 할당 ELF Header Program Header Table Segment 1 ... Section Header Table (optional) Segment n <ELF> <GDT> <User Context> ... Kernel Code Segment Kernel Data Segment LDT Descriptor struct Segment_Descriptor ldt[0] struct Segment_Descriptor ldt[1] struct Segment_Descriptor *ldtDescriptor ... unsigned short ldtSelector unsigned short csSelector unsigned short dsSelector ulong_t argBlockAddr ulong_t stackPointerAddr LDT Text Data Argu- ment Stack User Context memory space
Geek-OS project Scheduler Multi Level Feedback 스케줄러 구현 Get_Next_Runnable() 구현 Round-Robin 스케줄러에 Multi Level Feedback 스케줄러를 추가 Time quantum이 서로 다른 4개의 우선순위 큐 사용 Multi Level Feedback에서 발생하는 starvation 방지 Ready Queue 0 process A process B Ready Queue 1 Ready Queue 2 Ready Queue 3
Geek-OS project Semaphore 동시성 제어를 위한 세마포어 구현 Sys_CreateSemaphore() 구현 Sys_DestroySemaphore() 구현 사용이 끝난 semaphore 삭제 Sys_P() 구현 Critical section에 다른 process가 있을 때 semaphore의 count 감소 Sys_V() 구현 Critical section에서 process가 빠져나올 때 semaphore의 count 증가 process Critical Section process Semaphore waitQueue process
Geek-OS project Paging 2단계 paging을 구성 Init_VM() 구현 Page directory 및 page table 초기화 Find_Space_On_Paging_File() 구현 Paging file로부터 비어있는 page를 탐색 Read_From_Paging_File() 구현 디스크에 page read request를 발생 Write_To_Paging_File() 구현 디스크에 page write request를 발생 Page Directory Table in Virtual Memory
Running snapshot Running snapshot
Geek-OS directory tree project0 build src scripts include geekos user libc … geekos libc geekos user libc …
Geek-OS source Geek-OS kernel source src/geekos/ include/geekos/ main.c userseg.c kthread.c syscall.c paging.c include/geekos/ user.h kthread.h syscall.h paging.h
ctags ctrl + ] ctrl + t ctags What is ctags? Install How to use? 큰 규모의 소스 분석을 위한 유틸리티 소스 파일에서 선언부로 쉽게 이동 Install $sudo apt-get install ctags How to use? 프로젝트 상위 디렉토리에 데이터베이스 생성 $ctags -R 선언된 부분으로 이동 ctrl + ] 원위치로 복귀 ctrl + t ctrl + ] ctrl + t
cscope cscope What is cscope? Install 큰 규모의 소스 분석을 위한 유틸리티 ctags의 부족한 기능을 보완 변수, 함수가 사용된 곳을 찾을 수 있다 Install $sudo apt-get install cscope mkcscope.sh 스크립트 생성 $vi mkcscope.sh $chmod 755 mkcscope.sh $mv mkcscope.sh /usr/local/bin #!/bin/sh rm -rf cscope.files cscope.files find . \( -name '*.c' -o -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.s' -o -name '*.S' \) -print > cscope.files cscope -i cscope.files
cscope vim install vim 설정파일에 내용 추가 vi보다 풍부한 기능을 제공하는 편집기 $sudo apt-get install vim vim 설정파일에 내용 추가 $~/.vimrc set csprg=/usr/bin/cscope set csto=0 set cst set nocsverb if filereadable("./cscope.out") cs add cscope.out else cs add /usr/src/geek-os/project0/cscope.out endif set csverb
cscope ctrl + d tap How to use? 프로젝트 상위 디렉토리에 데이터베이스 생성 $cd /usr/src/geek-os/project0 $mkcscope.sh How to use? mkcscope.sh 명령으로 나타난 화면에서 질의 vim 편집기상에서 직접 사용 명령행 모드에서 질의 :cs find {질의 종류} {심볼} ex) :cs find s main ctrl + d tap cscope 의 질의 종류 0 or s - > Find this C symbol 1 or g - > Find this definition 2 or d - > Find functions called by this function 3 or c - > Find functions calling this function 7 or f - > Find this File 8 or i - > Find files #including this file
grep grep What is grep? How to use? 원하는 텍스트를 검색하기 위한 shell 명령 별도의 설치 없이 사용 가능 How to use? 찾으려는 텍스트를 명령과 함께 입력 grep [option] <string> <target file name> $grep hello * 옵션 사용 -r : 하위 디렉토리까지 검색 -i : 대소문자를 구별하지 않음 -n : 파일 내 행 번호를 함께 출력 -v : 텍스트를 제외하고 검색 ex) $grep -inr hello *
make make What is make? What is Makefile? How to use? 일반적으로 큰 규모의 소스코드를 컴파일 하는데 사용 별도의 설치 없이 사용 가능 What is Makefile? 컴파일 과정의 반복적 명령을 자동화하여 기술한 파일 make 명령을 위해 반드시 필요 How to use? 컴파일하려는 프로젝트 디렉토리 내 Makefile이 존재하는 경로에서 실행 $make Makefile에 기술된 대로 컴파일 과정을 수행
Project User Process Scheduler Semaphore Paging Screen을 공유자원으로 활용하여 서로 다른 텍스트를 출력하는 두 개의 process의 동시성 제어 Paging 많은 페이지를 요구하는 프로세스를 수행하여 paging을 통해 정상적으로 실행되는 것을 보인다
Project 프로젝트 그룹 프로젝트 수행관련 그 외 기타 질문사항 : e-mail 또는 미디어센터 509호 각 팀은 5명으로 구성 4가지 프로젝트 주제 중 1개 선택 주제 선정 : 중간고사 이후 팀 구성 완료 기간 : 1주(팀을 정하여 e-mail로 제출) (e-mail : cyj4369@gmail.com) 프로젝트 수행관련 원본 Geek-OS에서 구현해야 하는 부분이지만 현재 수업 프로젝트에서 구현에 포함되지 않는 함수 -> 구현된 소스코드 사용 다른 팀에서 구현해야 하는 소스에 대한 종속문제 -> 오브젝트파일 사용 그 외 기타 질문사항 : e-mail 또는 미디어센터 509호
Homework Homework Ubuntu 10.04 설치(가상머신 or 직접설치 둘 다 가능) Geek-OS 0.3.0 설치 Geek-OS를 실행하여 “hello Geek-OS! 팀원의 학번” 메시지 출력 제출기간 : 2주 제출방법 : 팀별로 e-mail을 통해 제출(수업시간에 제출 인정x) (e-mail : cyj4369@gmail.com)