CS/OS

[OS] NachOS 환경 설정

햄스타배 2025. 5. 21. 20:05

Oracle VM으로 Ubuntu 18을 사용하여 NachOS 환경을 설정해볼것이다

 

NachOS란?

NachOS는 Berkeley에서 만들어진 교육용 OS다.

교수님 말을 빌리자면 OS위의 OS로 어플처럼 돌게하면서 스케줄링, 세마포어 등 HW와 OS의 작용을 살펴보는 도구라 할 수 있다.

NachOS는 OS부분과 Machine emulator로 나눌 수 있는데 OS부분은 threads, userprog, and filesys 폴더에 있는 코드들으로 세마포어, 스케줄링 등이 구현되어 있다. Machine emulator는 machine 폴더에 있는 코드로 MIPS, COU, 레지스터, 메모리, 타이머, 콘솔, disk drive, network 등이 구현되어있다. (이 부분은 수정하지 않는다!!)

 

환경설정 단계

1. ubuntu 설치 + VM에 새로운 환경 만들기

2. 루트 계정 로그인

3. 기본적 패키지 설치

4. 32-bit kernel 환경 세팅 및 gcc, g++, 컴파일러 설치

5. nachos 디렉토리 생성 + 소스코드 다운로드

6. zip 파일 추출 및 Maefiles 패치

7. NachOS 컴파일 및 실행

8. NachOS 환경에서 유저 프로그램을 실행하기 위해 COFF → NOFF 포맷 변환

9. test application 실행

 

orcale vm 설치 과정은 다음 블로그를 참고하면 된다

https://phantom.tistory.com/6

 

오라클 버추얼박스(VirtualBox) 다운로드 및 설치 방법

버추얼박스(VirtualBox)는 본래 이노테크(InnoTek)가 개발한 뒤, 현재는 오라클이 개발 중인 가상화 소프트웨어로 여러가지 운영체제(리눅스, MacOS, 솔라리스, 윈도우 등)를 가상화 하여 운영해 볼 수

phantom.tistory.com

 

설치 후 VM에 우분투 환경을 만들어주자 NachOS는 32bit 환경을 사용하기 때문에 오류 없이 실행하기 위해서는 Ubuntu 18버전을 설치하는 것을 추천..!! 

https://changun516.tistory.com/143

 

[INSTALL] Virtual BOX를 통한 우분투 18.04설치

Outline : Yocto Project 사용을 위해 Virtual BOX를 통해 우분투 18.04를 설치해보자 참고 : 2020.11.30 - [프로그래밍 - 환경설정/Linux] - [INSTALL] Virtual BOX를 통한 우분투 16.04설치 [INSTALL] Virtual BOX를 통한 우분투

changun516.tistory.com

 

 

초반부터 2가지 이슈가 있었는데 

1. VM Ubuntu 터미널 안켜짐 

https://code-lab1.tistory.com/309

 

[Linux] 버츄얼박스(VirtualBox) 우분투 터미널 안 열림 해결 방법

우분투 터미널 안 열림 현상 해결 방법은? 얼마 전 버츄얼박스에 우분투를 설치했는데 터미널(Terminal)이 열리지 않는 현상이 발생했다. 이러한 현상은 무인 설치(Unattended Install)를 진행하면 발생

code-lab1.tistory.com

 

2. Authentication failure

sudo password root

를 사용하여 root의 비밀번호를 설정해주면 해결된다 >.<

 

3. 기본적 패키지 설치

sudo apt install build-essential
sudo apt-get update
sudo apt-get upgrade

 

4. 32-bit kernel 환경 세팅 및 gcc, g++ 컴파일러 설치

dpkg --print-architecture  ## 64bit인지 확인 
sudo dpkg --add-architecture i386 ## 32에 점속
apt-get install gcc-multilib g++-multilib ## gcc, g++ 설치
apt-get install lib32ncurses5 lib32z1 
apt-get install gcc-4.8 gcc-4.8-multilib g++-4.8 g++-4.8-multilib

 

만약 gcc —version, g++ —version으로 확인해봤을 때 버전이 4.8이 아니라면 아래 명령어로 버전을 맞추어주자

# Switch the low version gcc, g++ 
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 40

 

5. Nachos 디렉토리 만들고 이동, 소스코드 다운로드 

wget https://www.fit.hcmus.edu.vn/~ntquan/os/assignment/nachos_40.tar.gz
# NachOS의 소스 코드가 압축된 tar.gz 파일을 다운로드
wget https://www.fit.hcmus.edu.vn/~ntquan/os/assignment/mips-decstation.linux-xgcc.gz
# MIPS 아키텍처를 위한 크로스 컴파일러가 압축된 파일을 다운로드
wget https://www.fit.hcmus.edu.vn/~ntquan/os/assignment/nachos-gcc.diff.gz
# NachOS와 GCC 버전 간의 패치 파일이 압축된 파일을 다운로드

#403 에러 발생시 앞에 아래 명령어 붙여주기 
wget --user-agent="Mozilla/5.0"

 

6. zip 파일 추출 및 Maefiles 패치

 tar zxvf nachos_40.tar.gz
 tar zxvf mips-decstation.linux-xgcc.gz # MIPS cross-compiler
 tar zxvf nachos-gcc.diff.gz
 patch -p0  nachos-gcc.diff

 

7. NachOS 컴파일 및 실행

cd NachOS-4.0 
cd code/build.linux 
make depend 
make

# ~/nachos/NachOS4.0/code/build.linux>
 ./nachos

Machine halting! 이 나오면 성공적으로 컴파일이 됐다는 증거

여기서 말하는 make depend와 make는 무엇일까?

https://users.cs.duke.edu/~chase/nachos-guide/guide/nachos.htm

 

Nachos Project Guide, Duke University

 

users.cs.duke.edu

 

make

  • Nachos를 컴파일 하고 링크하는 일련의 명령이 실행되어 해당 디렉터리에 실행파일(nachos)생성
  • 항상 올바른 디렉터리에서 make를 실행하고, 해당 디렉터리에서 생성된 nachos 실행 파일을 사용해야 함
  • 여러 디렉터리(threads, userprog, vm 등)에서 각각 독립적으로 nachos 실행 파일이 생성되므로, 테스트할 때 반드시 올바른 디렉터리의 nachos를 실행해야 함

make depend

  • Makefile의 종속성줄을 자동 생성, 종속성 정보를 최신 상태로 유지 (ex.  cd threads; gmake depend 를 입력하면 threads/Makefile 에 종속성 정보가 다시 생성됨)
  • 헤더 파일의 종속성이 변경되거나 소스 코드의 위치가 변경될때마다 실행
  • 종속성 정보가 오래되면, 변경된 파일이 제대로 다시 컴파일되지 않아, 실제로는 코드가 바뀌었는데도 실행 파일에 반영되지 않는 문제가 발생할 수 있음.

8. NachOS 환경에서 유저 프로그램을 실행하기 위해 COFF → NOFF 포맷 변환

cd ../../coff2noff
make

 

9. test application 실행

cd ../code/test
make
../build.linux/nachos -x halt #Nachos 시뮬레이터에서 시스템을 종료하는 역할

사진과 같이 text, data, bss 영역이 어떻게 달라지는지 확인할 수 있다!

다음엔 NachOS에 구현되어있는 쓰레드와 Semaphore 코드를 분석하고 응용 프로그램을 짜는 포스팅으로 돌아오겠습니다~