2010년 3월 22일 월요일

Pintos란?

Pintos는 미국 Stanford 대학교의 CS140 : Operating Systems 수업을 위해 제작된 교육용 OS입니다.


CS140 수업은 OS에 대한 기초적인 이슈들을 배우는 과목 같네요.

(물론 제가 스탠포드 학생도 아니고, 저 수업을 직접 듣진 못해서 정확힌 모릅니다만)

따라서 이 수업에서 Programming Project로써, 실습용으로 이용하기 위해 제작된 Pintos 역시

실제로 잘 돌아가는 실용적인 OS를 목적으로 설계된 것이라기보다는

크게 Thread, User Program Support, Virtual Memory, File System의 네 가지 주제를 중심으로

해당 주제와 관련된 기본적인 내용을 실제로 구현하며 익혀보는데 초점을 맞춰 만들어진 것 같습니다.


Pintos는 전체적으로는 일단 '돌아가게', 그리고 '전체 구조를 잡아' 얼추 완성이 되어 있는 상태이지만

핵심 기능들의 구현이 빠져있고 대신 간단하게 구현된 더미 코드가 들어가 있는 OS입니다.

가령 스택 메모리 영역을 지원하기는 하지만 스택의 크기를 키우는 기능은 없어서

만약 큰 스택을 사용하는 유저 프로그램을 실행시키면 스택이 자라야 할 때 바로 페이지 폴트가 나는 식으로

정말 '기본적인' 기능만을 하도록 구현되어 있습니다.

프로젝트의 목적은 저렇게 빠진 부분들을 직접 구현하여 채워 넣는 것입니다.

실제로 Project 3인 Virtual Memory를 구현하며 예시로 든 Stack의 growth를 구현해야 합니다;;


Pintos는 C 언어를 이용해 구현되어 있습니다.

Objective C나 C++, C# 그런거 없습니다.  그냥 C입니다.

코드를 보시면 완전 C 스타일입니다 -_-;;

불편하지만 어쩔 수 있겠습니까?  저걸로 채점한다는데;;

Makefile 부분도 있기 때문에 아마 기본적으로는 C 언어를 이용해 프로젝트를 수행하셔야 합니다.


OS이니만큼 직접 어셈블리를 이용해 CPU를 건드려야 하는 부분도 있긴 합니다.

근데 단순히 프로젝트를 수행하기만 하는 거라면 어셈블리를 이용해 프로그래밍 할 필요는 없습니다.

그 정도로 하드웨어에 가까운 부분들은 구현이 된 상태이며,

프로젝트 요구사항 중에도 어셈블리로 코딩해야 하는 부분은 없습니다.


빌드 할 때 make를 이용하며, OS를 돌리는 가상 머신으로 bochs나 qemu를 쓰기 때문에

리눅스나 유닉스 계열 머신에서 테스트 해 볼 수 있습니다.

저희 학교에서는 VMWare 상에서 돌아가는 우분투 위에서 프로젝트를 수행했습니다.



Pintos는 Stanford 대학에서 수업용으로 사용하려고 만든 프로젝트이지만

라이센스가 상당히 자유롭습니다.

덕분에 다른 대학들에서도 OS 수업에서 실습용으로 이 Pintos를 사용합니다.

저희 학교에서도 2008년에 잠시 다른 교수님께서 OS 수업을 맡으시면서

잠시 윈도우즈 리서치 커널을 이용한 해를 제외하고는

매년 OS 수업에서 Pintos 프로젝트가 나오고 있습니다.

물론 저도 OS 수업을 들었고, 거의 끝까지 완성했습니다 ㅠㅠㅠㅠ...



2010년 3월 현재, 지난학기 CS140의 수업 홈페이지는 아래 주소에서 확인하실 수 있습니다.

http://www.scs.stanford.edu/10wi-cs140/

한편, Pintos와 관련된 내용은 아래 주소에서 확인하실 수 있습니다.

http://www.scs.stanford.edu/10wi-cs140/reference/index.html


사이트 주소가 작년에 제가 학교에서 프로젝트 할 때와 다르게 바뀌었네요;;

시간이 지나면 저 사이트 주소도 바뀔 수 있지만

아마 Stanford 대학교 홈페이지에서 cs140 혹은 pintos를 검색한다면

해당 학기쯤에 개설된 cs140 홈페이지를 찾으실 수 있을 겁니다.




왜 제 블로그에 이런 글을 올리냐면,

작년에 OS 수업을 들으면서 개인적으로 이 프로젝트를 충분히 만족할 만큼 수행하지는 못하였기에

올해 여유 시간이 있을 때 이 프로젝트를 다시 수행해 보고자 하는데요

이 과정에서 가능하다면 문서도 한글로 번역해서 공개하고

수행 과정도 블로그에 공략집 형식(?)으로 정리할까 싶어서요.

관련 글들이 아마 천천히 올라갈 것 같습니다 ㅇㅅㅇ

2010년 3월 21일 일요일

블로그 시작합니다.

2010년 3월 22일, 블로그 시작합니다.

이 블로그는 주로 공개적인 작업물 등을 올리기 위해 사용할 것 같네요.



간단하게 자기소개를 하자면, 저는

- 20대 초반의 물리학 전공 학부생이고

- 컴퓨터공학을 복수전공하고 있으며

- 아직도 준회원이긴 하지만 PLUS에 소속되어 있는

그런 사람입니다. ^^


과학, 프로그래밍, 게임, 여행 등에 관심을 가지고 있으므로

아마 관련된 내용이 많이 포스팅될 것 같네요. ㅇㅅㅇ


잘 부탁드립니다.