PintOS의 주차가 시작되었다!
PintOS는 2004년 스탠포드에서 만들어진 교육용 운영체제로, 우리는 그 imitation버전인 KAIST PintOS의 내용을 따라 진행하게 된다.
아직 공부를 시작하진 않았지만! 정말 운영체제를 코딩해보는 느낌이라 그전에 시간상 생략해둔 가상메모리, 커널, 쓰레드 등을 다시 제대로 깊게 공부할 시간이 주어진 것같아 기쁘고 기대된다!
하지만 안타깝게도, PintOS는 다음 후배들이 공부할 수 있도록 코드 블로깅을 자제하는게 좋다고 한다..그래서 이번에는 코드는 노션에 정리하고, 블로그에는 고찰할 내용들만 정리할까한다. 🥲
와후. kaist PinOS를 해본 카이스트 학생들과 정글 선배들이 없었으면, 프로그램 돌려보지도 못했을 것같다. 게다가 은혜롭게도 정글 5기 선배들이 kaist PintOS gitbook를 번역한 노션을 전달해 주셨다. 천사들..! 덕분에 해야하는 바를 빨리 파악할 수 있었다.
핀토스의 introduciton의 내용은 환경구축과 파일이 정상적으로 실행이 되는지 관한 내용이다.
나는 WSL2을 애용하기 때문에 microsoft store에서 ubuntu18.04를 다운받아서 환경을 설치해주었다.
sudo apt update # package list update
sudo apt upgrade # upgrade packages
sudo apt install gcc make valgrind gdb # gcc, make 등 개발 환경 설치
sudo apt install -y gcc make qemu-system-x86 python3
sudo apt install git
git clone {주소}.git .
여기서 다른 팀원이 repository를 만들면, git clone을 할 때 token으로 로그인을 해야하는데, 매번 git pull, git push를 할 때마다 로그인해야하는 불상사를 막기위해서는 git cli에서 gh로 auth login을 해줘야 한다.
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
sudo apt install gh
하지만 wsl2환경에서 'sudo apt install gh'를 하면 다음과 같은 오류를 보게된다.
패키지 의존성이 깨져서 발생하는 에러라고 하는데..wsl2에서 패키지를 깔다보면 가끔가다 나오는 문제인 것같다. 보통 해결방법을 찾아보면 삭제 후 다시깔기나 강제 overwrite로 해결한다.
리눅스가 친절하게 어디서 error가 났는지 경로를 보여주므로, 그 경로를 강제 overwrite를 해주자.
sudo dpkg --force-overwrite -i /var/cache/apt/archives/gh_2.27.0_amd64.deb
다시 ' gh auth login '을 시도하니 성공!
자, 뉴비의 자세로 하나씩 실행시켜보자. 먼저 다음과같이 pintos root디렉토리에서 다음 커멘드를 실행시킨다.
source ./activate
source 프로그램을 활성화 시켜야 'pintos' 라는 커멘드가 cli에서 인식이 된다. 마치 git이라는 커멘드가 인식이 되는 것처럼 말이다. 하지만 매번 터미널을 킬 때마다 해당 커멘드를 쓰기에는 번거로우므로 다음과 같이 bashrc파일에 다음 코드를 추가해 준다.
cd ~ # home 디렉토리로 이동
code .bashrc
//해당 코드 입력 -> 주의!!!!당신의 pintos-kaist폴더가 있는 디렉토리로 쓰세요!!!!
source ~/pintos-kaist/activate
앞으로 6주동안이나 이 폴더와 파일을 구석구석 매만져볼테니 핀토스의 구성에 익숙해지자. 먼저, devices(1주차), threads(1주차), userprog(2주차), vm(3주차), filesys(4주차) 폴더가 각 주차에 코딩해야할 폴더다. 그안에는 build폴더가 있는데, 각 주차의 폴더에 있는 코드를 실행해보고 싶으면, 그 폴더의 build에 들어가서 make, pintos 커맨드로 실행을 해야한다.
참고한 정글 선배님 글: https://one-step-a-day.tistory.com/126
일단은 전체적으로 코드가 돌아가는지 확인해보자.
cd threads # cd = change directory
make
//잘 되었는지 확인
make check
//test 프로그램이 돈 후 다음 message 가 나오면 정상
//20 of 27 tests failed.
생각하는 것보다 make check는 오래걸린다. 한 3~5분정도? 컴퓨터 사양에 따라서도 다른 것 같다. 코드가 정상이고, 환경이 구축됐다면 다음과 같은 output을 볼 수 있다.
pintos --gdb -- -q run alarm-multiple
휴. 이제 thread 프로젝트를 시작할 준비가 되었다. PintOS race start!