728x90

학교 운영체제 과목을 수강하며 진행했던 nachos os 설치및 컴파일 과정입니다. 프로젝트 진행당시 제대로된 레퍼런스가 없어 고생한 기억이 있어 참고용으로 업로드하였습니다.

1) ThreadedKernel, UserProgKernel class는 어떤 관련이 있는가? (코드 분석 설명)

ThreadedKernel
UserProgKernel

-> c++에서

..

class 클래스명 {

// ..

}

class (상속받을)클래스명 : 접근제한자 (상속할) 클래스명 {

// ..

}

..
이러한 구조를 띠는 것은 상속(Inheritance)을 의미합니다.  상속이란 한 클래스가 다른 클래스에서 정의된 속성(자료,함수)를 이어받아 그대로 사용하는 것이며, 이미 정의된 클래스를 바탕으로 필요한 기능을 추가하여 정의할 수 있는 것입니다. UserProgKernel함수와 ThreadedKernel함수는

이러한 구조를 가지고 있기 때문에 UserProgKernel이 상속받는 관계로써 상속받는 UserProgkernel은 자식, ThreadedKernel은 부모의 관계입니다. 즉 객체지향의 상속 관계에서 보았을 때 is a 관계라고 할 수 있다.

그림으로 표현한다면 다음과 같습니다.

2) thread/nachos, userprog/nachos 두 실행 파일을 실행할 때의 main 함수가 수행하는 작업의 차이점은 무엇인가? (main.h, main.cc)

main.cc
main.h

우선 main.h에서 표시한 부분을 분석해보자면

1. 첫 줄의 #ifdef만약 ~가 정의되어 있다면 실행하는 것을 뜻하며 if문과는 달리 이 값이 True인지 False인지 상관하지 않습니다. 그렇기 때문에

2-1. USER_PROGRAM이 정의되어 있다면 아래의 코드를 실행합니다.

- #define은 메크로 함수이다. 메크로 함수란 함수처럼 인자를 설정할 수 있는 매크로를 의미합니다형식은 [#define (메크로 함수 이름) (메크로 함수 기능)]으로 작성한다.

-, userprog/nachos main.h에서 KernelType UserProgKernel로 정의된다.

2-2. 만약 - USER_PROGRAM이 정의되어 있지 않다면 아래의 코드를 실행합니다.

-, thread/nachos main.h에서 KernelType ThreadedKernel로 정의가 된다.

 

3. main.cc의 표시한 부분을 보면 Kernel KernelType에 따라서 객체가 생성되고,

각각 KernelType에 따라서 Initialize, Run, SelfTest 함수를 실행하는 것을 알 수 있다. 이는 각각의 thread/nachos userprog/nachos의 세 함수의 내용이 KernelType에 의해 서로 다른 실행 결과를 나타내는 것을 의미한다.

-, 2-1일 경우 (USER_PROGRAM이 정의되어 있다면) main.cc에서 UserProgKernel class의 멤버함수들이 수행되고, 2-2일경우 (USER_PROGRAM이 정의되어 있지 않다면) main.cc에서 ThreadedKernel class의 멤버함수들이 수행된다.

 

3. 고찰

사실 학교 팀프로젝트 과제로 nachos설치를 받았을땐 별로 어려운 과정이 아닐꺼라 생각하고 있었지만 정말 3일동안 밤을 새며 진행한 기억이있다. 애초에 낯설기만 했던 우분투환경에서 익숙치 않은 c++을 다뤄보게 되었고 난생 처음보는 에러들이 눈앞에 뜰때마다 스트레스를 장난아니게 받았다. 사실 nachos자체를 컴파일하는 과정은 운영체제 학습에 도움이 되었나?라는 질문을 던진다면 그렇지 않다라고 말할것 같다. 하지만 이프로젝트에서 얻은 것은 소프트웨어 상에서 문제가 생겼을때 이것을 해결하는 능력에 대한 소양을 기를 수 있다는 점에 있다. 낯선 언어에 대한 마음의 장벽을 허물수 있었고 에러에 대한 스트레스를 받는것이 아닌 해결할수 있다는 자신감을 키워준 프로젝트 였다. 또한 어려움을극복 해냈을때 거기서 멈추는게 아닌 문제 해결방법을 공유하는 것에 대해 중요함을 느끼게 된 계기가 되었다.

728x90
728x90

학교 운영체제 과목을 수강하며 진행했던 nachos os 설치및 컴파일 과정입니다. 프로젝트 진행당시 제대로된 레퍼런스가 없어 고생한 기억이 있어 참고용으로 업로드하였습니다.

1. Nachos 설치 과정

# tar xzvf nachos-4.0.tar.gz

~ 위치에서(중요) 압축해제 기존에 작업 하던 / 위치에서 나초스 설치시 계속된 오류가 떠서 ~ 위치에서 작업을 하니 오류가 해결되었다. 이유는 아무래도 크로스 컴파일러 적용이나 configure할 때 문제였던 것 같다.

# ln -s ports/x86.linux Makefile.dep

x86플랫폼 의존성 파일을 Makefile.dep로 심볼릭 링크로 만들어줌

# make depend

# make -i LANGUAGE=c

threads디렉터리에서 make depend, make -i LANGUAGE=c 명령어를 차례로 시행 후 nachos파일이 생성됨을 확인

2. Nachos test application 컴파일 및 실행결과

code/bin 디렉터리에서 make실행후 coff2noff파일 생성됨을 확인(cross compile시에 coff형식으로 생성된 실행파일을 nachos에서 지원하는 noff형식으로 바꾸어주는 프로그램)

make depend, make -I LANGUAGE=c명령어로 nachos파일이 userprog디렉터리에 생성됨을 확인

 

728x90

+ Recent posts