우선, PintOS 운영체제 프로젝트를 위해서는 ubuntu18.04 작업 환경이 필요하다. (이상 버전부터는 종속성 에러가 발생한다고 한다.)
EC2가 ubuntu18.04를 프리 티어로 지원하지 않기 때문에, WSL로 환경을 구축하시는 분, docker를 이용해 환경을 구축하시는 분 등등 개발 환경을 구축하는 데에 있어서는 개인의 입맛에 따라 갈렸다.
나는 아래와 같은 형태의 작업 환경을 구축했다.
왜 굳이 이렇게 복잡하게 환경을 구축 했는지?
- 우선은 학구적 호기심!
docker도, EC2도. 여러 환경을 어쨌든 겪어보면서 친해지고 싶었다.
docker 자체가 사실 리눅스 환경에 친화적이라고 알고 있었기 때문에 리눅스 위에서 돌리고 싶었기도 했다.
- 함께 프로젝트 작업을 하시는 분들의 컴퓨터 환경이 모두 달랐다. windows를 쓰시는 분, iOS를 쓰시는 분 등등.
EC2라는 원격 컴퓨터를 이용해 환경을 구축한다면, 통합 솔루션이 될 수도 있을 것 같았다.
⚙️ AWS, EC2, docker를 활용한 ubuntu18.04 개발환경의 구축
- AWS EC2, docker를 활용한 ubuntu18.04 개발환경의 구축 1 - EC2에 docker 설치하기
https://velog.io/@takealittletime/AWS-EC2-docker를-활용한-ubuntu18.04-개발환경의-구축- AWS EC2, docker를 활용한 ubuntu18.04 개발환경의 구축 2 - VS Code에 연결하기
https://velog.io/@takealittletime/AWS-EC2-docker를-활용한-ubuntu18.04-개발환경의-구축-2-VS-Code에-연결하기
ubuntu18.04 환경 구축을 완료 했다면, 이제 본격적으로 pintOS 프로젝트를 받아 올 차례다.
git을 활용 해 팀 작업을 하는 데 있어 공부해보고 싶었던 니즈가 계속해서 있었는데, 좋은 기회다 싶어 팀 git 생성을 자처했다.
여러 방법이 있겠지만 나는 Organization을 만들어 팀 git 저장소를 마련했다.
아래 게시글에 해당 내용을 작성했다.
⚙️git을 통해 팀 협업하기::Organization과 Team Repository
https://velog.io/@takealittletime/git을-통해-팀-협업하기Organization과-Team-Repository
개발 환경을 구축하고, 팀 git을 생성하고, PintOS clone까지 끝 마쳤다면, 이제 pintOS가 동작을 잘 하는지 확인 해 볼 차례다.
다른 것보다도 qemu
라는 에뮬레이터를 먼저 다운로드 받아야 한다. 각자의 컴퓨터 환경이 모두 다르기 때문에, 이qemu
를 이용해서 pintOS를 굴린다.
sudo apt update
sudo apt install -y gcc make qemu-system-x86 python3
qemu
설치가 끝났다면, pintos_kaist
디렉토리에서 아래 명령어를 입력한다.source ./activate
activate
라는 실행 파일을 실행 해 pintos
라는 명령어를 속한 디렉토리에 상관없이 사용할 수 있도록 해준다.Tip. 💡
1.
source ./activate
자동 실행설정
- 위의
source ./activate
는 pintOS 환경에 새로 들어올 때마다 실행을 해줘야 하는데, home 디렉토리의bashrc
문서에 이를 추가해주면 그럴 필요가 없다.cd ~ code .bashrc //위와 같이 home 디렉토리로 이동해서, bashrc 문서를 열어준다. // 그리고 해당 문서 안에 아래와 같이 source ~activate를 적어준다. //ex) pintos_kaist 폴더 경로가 home/pintos_kaist인 경우 source /home/pintos_kaist/activate
2.
.gitignore
설정을 이용한 build 파일 배제
- 앞으로 PintOS를 구현하면서 정말 많은 test를 실행하게 될 것인데, 이 때마다
build
폴더에 여러 build 파일들이 자동으로 생성될 것이다.
이 때, 이 build 파일들까지 git 저장소에push
되면 오히려 귀찮아질 수 있으므로,~/pintos_kaist
폴더에 다음과 같은.gitignore
파일을 추가 해 주자.
- 내용에는 위와 같이
build/
만 적어주면 끝이다.* 이미 build 폴더를 추가해준 뒤라면?
git rm -r --cached threads/build/
- 위의 명령어를 통해 이미 git에 추가된
threads/build
폴더를 삭제해주고,.gitignore
파일을add
하고 commit, push 해준다.3.
pintos_kaist/tests/thread/mlfqs/Make.tests
파일 수정을 통한 테스트 시간 감축
- 1주차의
thread
수정 프로젝트에서make check
를 쓸 때마다 굉장히 많은 시간을 기다려야 한다.
이는pintos_kaist/tests/thread
폴더 내의 테스트 파일들 중에서도mlfqs
작동을 테스트 하는 파일들의 수행 시간이 오래 걸리기 때문인데,mlfqs
를 테스트하기 전까지는 이 기다림이 불필요하다.
pintos_kaist/tests/threads/mlfqs
폴더 내의Make.tests
파일을 위와 같이 열어보자.
맨 마지막 줄의$(MLFQS_OUTPUTS): TIMEOUT = 4800
부분을%(MLFQS_OUTPUTS): TIMEOUT = 1
과 같이 수정하면, 테스트 시간을 제한해make check
의 수행 시간을 단축할 수 있다.
- 대신, mlfqs 관련 테스트에서는 FAIL이 뜰 것이다. 나중에 mlfqs를 구현하고, 이를 테스트 할 때는 다시 해당 내용을 원상복구 해주도록 하자!
이제, threads/
디렉토리로 옮겨 가 make check
를 실행 해보자.
한참을 실행되다 다음과 같은 결과가 나오면 잘 실행 된 것이다.
위의 make check
명령은 현재 pintos 프로젝트에서 사용하는 테스트 파일들을 한 번씩 쭉 돌려보는 것이다.
그래서 상대적으로 시간이 오래 걸린다.
테스트케이스 하나의 경우에 대해서만 동작을 수행하고 싶다면,
pintos/(프로젝트 명)/build
에 들어가서
pintos -T (timeout이 걸리는 시간) -- -q run (테스트파일 명)
을 수행해주면 된다.
ex) pintos -T 10 -- -q run alarm-multiple
: alarm-multiple 파일을 수행하며, 10초 뒤에는 무조건 종료하라. (무한 루프 방지)
수행한 결과는 threads/build/tests/threads
디렉토리에서 확인할 수 있다.
(.output
파일이 내가 짠 코드의 Test Case 결과이며, 틀렸을 경우 Expected Output과 Actual Output이 비교되어 출력된다.)
테스트 케이스에 관한 정보나 코드는 pintos/tests/threads
에 있다.
벌써 PintOS 프로젝트 주차까지 왔다.
학부 때부터 공부했던 컴퓨터 시스템과 운영체제에 대한 내용들을 직접 구현해보면서 몸으로 체감할 수 있는 기회다.
일단은 무인도에 갑자기 툭 떨어진 기분이 좀 든다.
굉장히 범위도 넓고 큰 코드 더미를 받았는데, 어떻게 시작해야 할지 감도 잘 안 잡히고, 좀 막막한 기분이다.
하지만 동시에 그 만큼 설레이기도 한다.
'아무나 할 수 없는' 경험이라고 생각한다.
평생에 살면서 사용해볼 줄만 알았지, OS를 직접 구현해보리라고 상상도 해보지 못했다.
컴퓨터 공학을 전공하고, 앞으로 개발을 함에 있어 기억에 남을 일인 것 만큼은 확실하다.
열심히, 진지하게 임해보고 싶다.
KAIST:OSLAB:Pintos Slides
https://oslab.kaist.ac.kr/pintosslides/
PINTOS Project1 - Threads
https://one-step-a-day.tistory.com/126
[Week08]PintOS: WSL2 환경구축 & gh오류
https://velog.io/@jing93/Week08-정글끝까지-공부방향