728x90

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

1. Nachos란?

U.C.Berkeley대학의 Tom Anderson 교수가 운영체제 실습을 위해 만든 Operating System이다. Nachos와 운영체제의 차이점을 살펴보자면 운영체제는 기본적으로 컴퓨터의 하드웨어를 제어하고 응용소프트웨어를 위한 기반 환경을 제공하여, 사용자가 컴퓨터를 사용할 수 있도록 중재하는 프로그램이다. Nachos는 운영체제와는 달리 하드웨어 위에서 하드웨어를 직접 제어하는 OS가 아니라 HOST OS위에 작동하는 가상의 OS이며, MIPS machine을 가상으로 시뮬레이션하여 이 가상으로 작동하고 있는 MIPS 머신 위에서 커널로서 작동하게 된다.

종류 차이점 공통점
Nachos 유닉스나 리눅스의 응용프로그램의 형태, MIPS 또는 I386 machine 등의 하드웨어 위에서 구동된다. 인터럽트, 가상메모리, 입출력장치사용가능
실제 운영체제 하드웨어 기반에서 동작한다

Nachos의 경우 운영 체제 시뮬레이터는 단순히 Bochs/VMware와 유사한 다른 OS(호스트 OS) 위에 OS(게스트 OS)를 실행할 수 있다는 것을 의미한다다음에 대한 에뮬레이션 기능을 제공한다.

·         CPU(MIPS CPU)

·         하드 드라이브

·         인터럽트 컨트롤러, 타이머 및 misc. 기타 구성 요소

 

Nachos MIPS또는 i386 machine 등의 하드웨어 위에서 real OS로 사용할 수 있을 정도 수준이어서 실제 운영체제가 하는 것처럼 인터럽트, 가상메모리, 입출력장치 등을 시뮬레이션 할 수 있다. 교육 목적으로 만들어 진 것으로 소스 코드를 이해하는 것이 비교적 용의하며 kernel의 내부가 단순하고 체계적이므로 기본 os기능을 이해하기가 쉽다.

 

프로젝트 실습시에는 debugging이나 test의 편의를 위해 Nachos를 실제 하드웨어위에 동작 시키지 않고 LinuxSolaris등의 다른 운영 체제에서 하나의 응용 프로그램을 실행시킨다. 그래서 일반 응용 프로그램을 debugging하는 것과 마찬가지로 GDB 등을 그대로 사용할 수 있다. 이럴 경우에는 하드웨어를 대신할 수 있는 시뮬레이터를 사용하게 되며 일반적으로 Nachos MIPS 시뮬레이터 코드도 함께 포함하고 있어 Nachos 커널과 MIPS 시뮬레이터를 하나의 프로그램으로 링크하여 사용한다. Nachos C++로 만들어졌으며 코드를 이해하고 수정하기 위해서 C++언어를 알아야 한다.

OS 커널의 다양한 시스템 호출에 대한 함수는 일반적으로 UNIX 시스템 호출과 유사한 방식으로 구현된다. 다양한 부분에서 운영 체제의 native코드를 사용하여 개체로 instance화 된다. 예를 들어 클래스 Machine은 파일 시스템, 프로세서, 타이머, 등 다양한 하드웨어 측면을 시뮬레이션하기 위해 정의되는 다양한 개체를 포함한다.

Nachos를 컴파일하기 위해서는 gcc가 필요하며, Nachos가 수행시키는 응용 프로그램이 MIPS코드로 컴파일 되어 있어야 하므로 cross-compiler가 필요하다. 따라서 Nachos compile 하고 cross-compiler를 설치한 후, 응용프로그램을 MIPS binary code로 만들어 Nachos에서 수행시킨다.

 

더 많은 내용은 Nachos공식사이트(https://homes.cs.washington.edu/~tom/nachos/)에서 찾아볼 수 있다.

2. Nachos의 역사

Nachos 1992년 처음 개발되었을 때에는 C++로 만들어졌지만, 이식성 문제로 적극적으로 사용되지 않고 있었다. 2000UC Berkeley Dan Hennta JAVA로 다시 작성하여 학생들이 더 쉽게 Nachos를 사용할 수 있도록 만든 Nachos 5.0j 버전이 업데이트 되었다. 이는 JVM을 사용하여 쓰레드를 돌리는 것으로 확인되었다.

3. Nachos의 구조

그림2-1) Nachos의 구성
그림2-2) Nachos의 실행구조

그림2-1Nachos의 구조를 나타내고 있다.  Nachos HOST OS위에서 작동하는 가상의 OS이다. MIPS머신을 가상으로 시뮬레이션 하며 이 가상으로 작동하고 있는 MIPS머신위에서 커널로서 작동하게 됨을 알 수 있다.

4. Nachos의 구성요소

Nachos Machine 3가지로 구성된다. 이는 레지스터, 물리적 메모리, 가상메모리이다.

- 레지스터: 프로세서에 위치한 고속 메모리로 극히 소량의 데이터나 처리 중인 중간 결과와도 같은 프로세서가 바로 사용할 수 있는 데이터를 담고 있는 영역을 말한다. Nachos에서는 40개의 레지스터로 이루어진 하나의 array는 스택 포인터, 더블 레지스터, 프로그램 카운터, 넥스트 프로그램 카운터, 레지스터 타겟 등으로 이루어져 있다. 이 레지스터는 0~39의 번호가 할당되어 있다.


-
메인 메모리: Random Access Memory (랜덤 액세스 메모리)또는 RAM이라고 한다. 이것은 중앙 처리 장치 (CPU)가 작업을 수행하는 데 필요할 때 빠르고 직접 액세스 할 수 있도록 운영 체제 소프트웨어, 소프트웨어 응용 프로그램 및 기타 정보를 저장하는 컴퓨터의 일부이다.  Nachos에서 메모리는 바이트 단위의 주소를 가지며, 128바이트의 페이지들로 구성되어 있다. 이것은 디스크 섹터와 같은 크기이다. 메모리는 물리적인 주소를 메모리 주소로 엑세스 할 수 있게 한다. 기본적으로 Nachos Machine 31페이지의 물리적 메모리를 갖는다.

 

- 가상메모리: 가상 메모리는 메모리를 관리하는 방법의 하나로, 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식을 말한다. 이러한 방식은 멀티태스킹 운영 체제에서 흔히 사용되며, 실제 주기억장치(RAM)보다 큰 메모리 영역을 제공하는 방법으로 사용된다. Nachos single linear page나 소프트웨어로 관리되는 TLB 등으로 통해 가상메모리를 지원한다. 이러한 선택은 TLB Page Table 변수를 초기화 하는 것에 영향을 끼친다.

 

 

728x90

+ Recent posts