Computer Sience/OperatingSystem

XV6와 QEMU에 대한 설명과Linux Ubuntu에서 git check out을 써서 Makefile을 변경했을때 오류 해결. 2022-09-15

최동훈1 2022. 9. 15. 17:31

우선 용어 설명을 하자면, 교수님께서 깔으라고 했던 XV6가 무엇인지 이해 할 필요가 있다.

xv6는 한줄로 정의하면, 시스템 콜을 기존의 linux 리아브러리를 사용하지 않고, 직접 사용자가 만들어서 OS에서 커널모드, 유저모드로 시스템콜로 OS를 사용하는것을 연습할수 있도록 설계된 "모방된 OS"이다. (실제로는 OS가 아니고, 비슷하게 흉내만 낸 것이다.) 나는 실습을 위해서 이것을 내 UBUNTU에 깔았다.

 

또한 QEMU(Quick EMUlater)는 이름이 생소하지만, 이 XV6를 리눅스 OS에서 실행하기 위한 에뮬레이터이다. 

 

에뮬레이터라는 말을 처음 들어 볼 수는 있는데, 나는 이미 에뮬레이터를 사용해본 적이 있다. 바로 JVM 같은 가상머신이 바로 에뮬레이터 이다. 즉, JAVA는 모든 OS에서 호환하기 위해 "자바 가상머신"이라는 에뮬레이터를 통해, JAVA 프로그램을 해당 OS에서 실행시킨다.

즉, QEMU는 LINUX 라는 OS 위에서 XV6라는 프로그램을 돌리기 위한 에뮬레이터이다.

에뮬레이터에 대한 부가 설명을 하자면, 

 

Emulator.원래는 '경쟁자', '모방자'라는 뜻의 영단어다. 컴퓨터 과학용어로써의 '에뮬레이터'는 다른 프로그램이나 장치를 모방하는 컴퓨터 프로그램 또는 전자기기를 가리키는 말. 다시 말해서, 에뮬레이터는 하드웨어 기반일 수도, 소프트웨어 기반일 수도 있다. 지원되지 않는 하드웨어에서 소프트웨어 를 실행하기 위하는 목적으로 널리 쓰인다.

QEMU 자체가 Quick Emulator의 약자인것을 알면 이해가 쉬울 것이다.

 

qemu를 이용해 ubuntu(linux)에서 xv6를 구동하는 과정.

 

그다음 make 라는 명령어에 대해서 설명하겠다.

 

우선적으로 Makefile 은 각각의 c 파일을 하나하나 컴파일 할 필요 없이, Makefile의 형식에 맞춰서 넣으면, 한꺼번에 컴파일을 해 줄수 있는 방법이다. 

 

또한 git checkout 명령어에 대해서 설명하겠다.

 git checkout -b <브랜치이름> 브랜치 생성 & 이동

위의 표와 같이 새로운 브랜치를 만들고 이동하는 것이다.

그런데 내가 아래와 같은 오류가 난 이유는 내가 git checkout util 이라는 명령어를 쓰지 않은체, Makefile을 변경했고, 이로인해, 변경된 사항을 커밋하거나 이전의 상태로 되돌리라는 오류가 난 것이다.

또 git status 명령어를 통해 현재 git의 상태를 확인해 보면,

$ git status 파일 상태 확인
  $ git branch 브랜치 목록

이렇게 쓰면 된다.

현재 git의 상태를 확인해 보면 "init" 이라는 상태이다.

 

init 상태이란, 아무런 git 명령어를 사용하지 않은채, 파일을 변경했을시, 해당 파일을 로컬 폴더로 사용한다는 뜻이다.

git init

git init의 init은 "initialize(초기화)"를 뜻합니다. 이 명령어를 입력하기 전까지는 일반 디렉토리였지만, git init으로 초기화를 시키면 해당 디렉토리를 로컬 깃 저장소로 등록해줍니다. 이제 깃 명령어를 사용할 수 있습니다. 얼핏보면 차이가 없지만, '.git' 파일이 생성되어 숨어있습니다.

즉 아래의 git status 오류를 읽어보면 현재 변경된 Makefile이 add 나 commit되지 않았다는 뜻이다.

git checkout util 을 하지않은채, sleep.c를 Makefile에 추가했을때 오류.

 

 

즉, 나는 이 오류를 내가 만든 sleep.c 파일과 Makefile을 변경 전 상태로 되돌리고, 다시 git checout util을 수행하여서, 새로운 "utill"이라는 branch를 만들었다. 그러니 위와같은 오류가 사라졌다.

 

 

현재 작업하려는 내용을 util이란 브랜치에 작업함.

그리고 실행하면, exit() 를 써도 오류가 나지 않을까??-->그건 아닌거 같다. 다른 user/의 .c 파일들을 봐도 exit(0)으로 다 되어있다.

 

reference : [GitHub] Git 명령어 모음 (velog.io)

lab0-Tools.pdf
0.14MB
OS-5-xv6-interfaces.pdf
0.51MB

 

'Computer Sience > OperatingSystem' 카테고리의 다른 글

ubuntu에서 xv6 설치 및 실행.  (0) 2022.09.03