이 강의에서 여러분이 처음으로 마주하게될 실습인 데이터랩(datalab)에서는 1강에서 배운 내용을 바탕으로 비트 연산자만 사용해서 다양한 함수를 구현해야 한다.
실습을 여러분이 직접 해볼 수 있도록 간단한 설명을 하겠다.
0강에서 말한대로 관련 파일을 다운했다면 그 폴더로 들어간다.
도커를 이용한 경우에는 터미널에
docker run -p 7777:7777 -v "$PWD/labs:/home/csapp/project" xieguochao/csapp
를 치고 vscode에 ctrl+shift+p를 쳐서 attach to running container를 클릭한다.
그러면 다음과 같이 여러 파일이 보일 것이다.
제일 중요한건 bits.c 파일이다. 여러분이 풀 문제가 여기 들어있다.
이런 식으로 문제와 함께 예시와 쓸 수 있는 연산자, 최대 연산자 수, 난이도가 적혀있다. 총 13문제가 준비되어 있으며 난이도는 4까지 있다.
참고로 조건문이나 반복문 등을 사용할 수 없으며 비트 연산자만 사용해 함수를 완성시켜야 한다. 자세한건 내가 번역해놓은 유인물을 참조하자. 여기에 번역된 실습 설명서(writeup), README, 그리고 bits.c 파일을 올려놓았다.
문제를 몇개만 더 보여주겠다.
아 또 pdf를 수정하고 싶은 사람들을 위해 .tex 파일도 깃허브에 올려두었다.
DeepL 번역기 덕분에 훨씬 덜 걸린것 같지만 문제를 이해하고 맥락에 맞게 수정해야하고, 또 LaTeX로 pdf 만들다 보니 한 세네시간 걸렸다.
이제 문제를 채점하려면 먼저 make 를 친다. 이러면 btest라는 프로그램이 컴파일된다.
그리고 ./btest 를 치면 각 문제에 대해 채점을 진행한다. 다만 btest는 문제를 맞혔는지 틀렸는지만 확인하지 그 이외의 것(스타일, 가이드라인, 최대 연산자 수를 넘는지 확인) 은 검사를 하지 않는다.
이런것들을 확인하려면 ./dlc bits.c 를 쳐야한다.
./btest -f <문제 이름>을 치면 주어진 문제에 대해서만 채점을 진행한다.
이렇게 테스트가 실패하였고 어디서 실패했는지도 알려준다. 여기서는 함수에 0x80000000을 넣으면 0x0이 나와야 하는데 내 함수에선 0x2가 나왔다고 한다.
코드를 수정한 후에는 make 를 쳐서 컴파일을 다시 해야 한다.
모든 문제를 다 푼 후엔 ./driver.pll 을 쳐서 최종 채점을 진행한다. 이 driver.pl 프로그램은 강사들이 당신의 코드를 채점할때 쓰는 프로그램이다.
이제 필요한건 다 알려줬으니까 직접 실습을 풀어볼 사람들은 풀어봐라. 나도 풀고있는데 logicalNeg하고 howManyBits에서 막혔다.
물론 인터넷에 치면 답 다 나오는데 최대한 안보고 직접 풀어봐라. 이렇게 잘 만들어진 문제 구하기 쉽지 않다.
다음 강의에선 어셈블리어를 배워보도록 하자.