Welcome to Pintos. Pintos is a simple operating system framework for the 80x86 architecture.
Docker Build
bashFROM ubuntu:12.04 RUN sed -i -e 's/archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list RUN sed -i -e 's/security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list RUN apt-get update && apt-get install -y \\ bash \\ vim \\ build-essential \\ gcc-4.4 \\ gcc-multilib \\ g++-4.4 \\ perl \\ wget \\ patch \\ libncurses5-dev \\ libx11-dev libxrandr-dev xorg-dev \\ make RUN mv /usr/bin/gcc-4.4 /usr/bin/gcc RUN mv /usr/bin/g++-4.4 /usr/bin/g++ COPY ./bochs-2.2.6.tar.gz /root/ RUN mkdir /root/pintos RUN echo 'export PATH="$PATH:/root/pintos/src/utils"' >> ~/.bashrc CMD ["/bin/bash"]
bashgit clone git@github.com:NamJeongseok/PintOS-Docker-UNIST.git cd PintOS-Docker-UNIST
- amd64 (x86_64) (Window)
bashsudo docker build -t pintos .
- ARM64 (Silicon Mac)
bashdocker build --platform=linux/amd64 -t pintos .
Error
bashโ PintOS-Docker-UNIST git:(main) sudo docker build -t pintos . Password: [+] Building 1.8s (9/14) docker:desktop-linux => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 696B 0.0s => [internal] load metadata for docker.io/library/ubuntu:12.04 1.5s => [auth] library/ubuntu:pull token for registry-1.docker.io 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [1/9] FROM docker.io/library/ubuntu:12.04@sha256:18305429afa14ea462f810146ba44d4363ae76e4c8d 0.0s => => resolve docker.io/library/ubuntu:12.04@sha256:18305429afa14ea462f810146ba44d4363ae76e4c8d 0.0s => [internal] load build context 0.0s => => transferring context: 42B 0.0s => CACHED [2/9] RUN sed -i -e 's/archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources 0.0s => CACHED [3/9] RUN sed -i -e 's/security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/source 0.0s => ERROR [4/9] RUN apt-get update && apt-get install -y bash vim build-essential gcc-4.4 g 0.2s ------ > [4/9] RUN apt-get update && apt-get install -y bash vim build-essential gcc-4.4 gcc-multilib g++-4.4 perl wget patch libncurses5-dev libx11-dev libxrandr-dev xorg-dev make: 0.202 qemu: uncaught target signal 11 (Segmentation fault) - core dumped 0.206 E: Method http has died unexpectedly! 0.207 E: Sub-process http received a segmentation fault. ------ 1 warning found (use docker --debug to expand): - InvalidBaseImagePlatform: Base image ubuntu:12.04 was pulled with platform "linux/amd64", expected "linux/arm64" for current build (line 1) Dockerfile:6 -------------------- 5 | 6 | >>> RUN apt-get update && apt-get install -y \\ 7 | >>> bash \\ 8 | >>> vim \\ 9 | >>> build-essential \\ 10 | >>> gcc-4.4 \\ 11 | >>> gcc-multilib \\ 12 | >>> g++-4.4 \\ 13 | >>> perl \\ 14 | >>> wget \\ 15 | >>> patch \\ 16 | >>> libncurses5-dev \\ 17 | >>> libx11-dev libxrandr-dev xorg-dev \\ 18 | >>> make 19 | -------------------- ERROR: failed to solve: process "/bin/sh -c apt-get update && apt-get install -y \\tbash \\tvim \\tbuild-essential \\tgcc-4.4 \\tgcc-multilib \\tg++-4.4 \\tperl \\twget \\tpatch \\tlibncurses5-dev \\tlibx11-dev libxrandr-dev xorg-dev \\tmake" did not complete successfully: exit code: 100 View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/307xpyqphklv4cd5fc8tmb1eg
Rosetta ํค๊ธฐ
๋ด๊ฐ ์ ์ ํํ ์ค ๋ฏธ๋ฆฌ ํด๋ณด๋ ค๊ณ ๋ธ๋ก๊ทธ ์ฐพ์๋ณด๋ค๊ฐ ์ด ์ค์ ์ ๊บผ์ผ x86์ผ๋ก ํ์คํ๊ฒ ๋์๊ฐ๋ค๊ณ ํด์ ๊บผ๋จ์๋๋ฐ, ์ด๊ฑฐ ํค๋๊น ์ ๋๋ค.

์ด์ ์ ํํ ์ค ๋ฏธ๋ฆฌ ํด๋ณด๋ ค๊ณ ํ ๋, ์ด๋ค ๋ธ๋ก๊ทธ ๋ณด๊ณ
์ ๊ฑธ ๊บผ์ผ x86์ผ๋ก ์ ํํ ์๋ํ๋ค๊ณ ํด์ ๊บผ๋จ์๋๋ฐ, ์ด๊ฒ ๋ฌธ์ ์๋ค.
Docker์์๋--platform=linux/amd64์ต์ ์ผ๋ก x86 ์ด๋ฏธ์ง๋ฅผ ์คํํ ๋, ๋ด๋ถ์ ์ผ๋ก QEMU๋ฅผ ์ด์ฉํด ์๋ฎฌ๋ ์ด์ ํจ.์ด๋ Rosetta๋ฅผ ํ์ฑํํ๋ฉด QEMU๊ฐ ๋ ์์ ์ ์ด๊ณ ๋น ๋ฅด๊ฒ ๋์ํจ. ํนํ ์ค๋๋ ๋ฆฌ๋ ์ค ์ด๋ฏธ์ง(Ubuntu 12.04 ๊ฐ์ ๊ฑฐ)์์ apt-get์ด ์ฃฝ๊ฑฐ๋ ์ธ๊ทธํดํธ ๋๋ ๊ฒฝ์ฐ, ๋๋ถ๋ถ Rosetta ๊บผ์ ธ ์์ด์ ์๊ธฐ๋ ๋ฌธ์ ์.
๋น๋ ์ฑ๊ณต
bashdocker build --platform=linux/amd64 -t pintos .

Start
bashwget [<http://www.stanford.edu/class/cs140/projects/pintos/pintos.tar.gz>](<http://www.stanford.edu/class/cs140/projects/pintos/pintos.tar.gz>)
bashtar xvf pintos.tar.
ํ์ผ ๊ถํ ์๋ฌ ํด๊ฒฐ
์ง์ง ์ด๊ฑฐ๋๋ฌธ์ ๊ฐ๊ณ ์ํ์โฆ
Stanford์์ ๋ฐ์ ํ์ผ์ด ๊ถํ์ด ์๋ ์ฑ๋ก ์ฃผ๋๋ฐ,
์๋์ฐ์์๋ ์๋ ์๊ด์ด ์์ด์ ๊ด์ฐฎ์๋ฐ,
๋งฅ์์๋ ์คํ ๋ถ๊ฐ๋ฅํ์ฑ๋ก ์์ถ์ด ํ์ด์ ธ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํจ.
๊ทผ๋ฐ ์ด๊ฒ ๋ ์ด ์ํ๋ก Docker๋ก ์ฎ๊ฒจ์ ๊ทธ๋ฅ Permission Denied ํด๋ฒ๋ฆฌ๋๊น
์ด๊ฒ ๋๋์ฒด ์ ๊ทธ๋ฐ์ง GPT ์จ๋ ์ ๋ชฐ๋์.
Docker ๋์ด๊ฐ๊ธฐ ์ ๋ถํฐ ์๋ณธ ํ์ผ ๊ถํ์ด ๋ถ์กฑํด์ ๊ทธ๋ฐ๊ฑด๋ฐ Docker ํ์ผ ๊ณต์ ๋ฐฉ์๋๋ฌธ์ธ์ค์๊ณ ์ฝ์งํจ
bashxattr -rc pintos/
bashchmod -R u+rwX,go+rX pintos/
bashfind pintos/ -type f -exec ls -l {} \\;
์ ๋ช ๋ น์ด ํ๋ฉด ์๋์ฒ๋ผ file permission์ด ๋ธ
bash-rw-r--r--@ 1 hoon staff 333 9 27 2012 pintos//src/Makefile.kernel -rwxr-xr-x@ 1 hoon staff 1486 9 27 2012 pintos//src/misc/bochs-2.2.6-build.sh -rw-r--r--@ 1 hoon staff 511 9 27 2012 pintos//src/misc/bochs-2.2.6-solaris-link.patch
์ฌ๊ธฐ ๋ณด๋ฉด ์คํ ๊ฐ๋ฅํ ํ์ผ (.sh) ํ์ผ ๋ฑ์ x ํ์๊ฐ ์๊ธธ๊ฒ์.
๋๋ ์คํ ๊ฐ๋ฅํ ํ์ผ๋ง ๊ถํ ๋ณด๋ ค๋ฉด
bashfind pintos/ -type f -perm -111 -exec ls -l {} \\;
์๋์ฒ๋ผ ๋๋ค๋ฉด ์ฑ๊ณต
bash-rwxr-xr-x@ 1 hoon staff 1486 9 27 2012 pintos//src/misc/bochs-2.2.6-build.sh -rwxr-xr-x@ 1 hoon staff 4096 9 27 2012 pintos//src/tests/make-grade -rwxr-xr-x@ 1 hoon staff 2951 9 27 2012 pintos//src/utils/backtrace -rwxr-xr-x@ 1 hoon staff 4563 9 27 2012 pintos//src/utils/pintos-mkdisk -rwxr-xr-x@ 1 hoon staff 429 9 27 2012 pintos//src/utils/pintos-gdb -rwxr-xr-x@ 1 hoon staff 29821 9 27 2012 pintos//src/utils/pintos
์ปจํ
์ด๋ ๋ค์ด๊ฐ๊ธฐ ์ ์ ๋ก์ปฌ์์ ํธํ๊ฒ bochs ํ์ผ ์์
pintos/src/misc/bochs-2.2.6-build.sh

- ๋ค์ ๋ด์ฉ์ผ๋ก ์์
bashCFGOPTS="--enable-cpu-level=6 --with-x --with-x11 --with-term --with-nogui --prefix=$DSTDIR"
docker run
๋๋์ด ์ ๋๋ก ์คํํด๋ณด์.
bashdocker run --platform=linux/amd64 -it -p 80:80 \\ -v /Users/hoon/github/pintos/pintos:/root/pintos \\ --name pintos pintos
boch 2.6.6 ์ค์น
- ์์์ VSCode๋ก bochs ์์ ์ํ๋ค๋ฉดbash
cd pintos/src/miscbashvi bochs-2.2.6-build.shi : ์์ ๋ชจ๋
์์ ...
ESC : ์์ ๋ชจ๋ ๋๊ฐ๊ธฐ
:wq : ์ ์ฅ ํ ์ข ๋ฃ- ๋ค์ ๋ด์ฉ์ผ๋ก ์์
bashCFGOPTS="--enable-cpu-level=6 --with-x --with-x11 --with-term --with-nogui --prefix=$DSTDIR"
๐ข ๋ง์ฝ Container๋ฅผ ์ญ์ ํด์ ๋ค์ Runํ๋ค๋ฉด ์ด ๊ณผ์ ์ ๋ค์ ํด์ค์ผํ๋ค.
bashcd /root/pintos/src/misc
bashenv SRCDIR=/root/ PINTOSDIR=/root/pintos/ DSTDIR=/usr/local ./bochs-2.2.6-build.sh
bashwhich bochs bochs -v
Test
bashcd /root/pintos/src/threads
bashmake
bashcd build
bashpintos -q run alarm-multiple

github repo ์์ฑ
root/pintos/src ์์ ์์ํ๊ธฐ
ํ ๋๋ง๋ค root ํด๋์์ ์์ํ๋๋ฐฉ๋ฒ
ํ๋ฒ ์ณ์ฃผ๋ฉด ํญ์ ์ ์ฉ๋จ.
๋์ปคํ์ผ์ ๋ค์ ์ค์ ๋ฃ์ด๋ ๋๊ธด ํจ.
dockerWORKDIR /root/pintos/src
๊ทผ๋ฐ ์ด๋ฏธ ๋น๋ํ์ผ๋ ์๋ ๋ช ๋ น์ด๋ฅผ ์ปจํ ์ด๋ ๋ด๋ถ์์ ์น๋ฉด ๋จ
bashecho 'cd /root/pintos/src' >> ~/.bashrc
- ์ดํ bashrc ์ํฉbash
cat ~/.bashrcbash... ๋งจ ์๋์ค์ ๋ค์ ๋์ค์ด ์์ผ๋ฉด ์ฑ๊ณต export PATH="$PATH:/root/pintos/src/utils" cd /root/pintos/src
ํ๋ฒ Run ์ดํ Container ์์

์ปจํ
์ด๋์์ exit ๋ฅผ ํ๋ค๋ฉด,
์์ฒ๋ผ Container๋ ๋จ์์๊ณ , ์ค์ง๋์ด์์ ๊ฒ์ด๋ค.
bashdocker start -ai pintos
๋์ค์ ๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก exit ํ๊ณ ๋ฐ๋ณตํ๋ฉด ๋๋ค.
Branch
๋ธ๋์น ์์ฑ
bashgit checkout -b [your-branch-name]
bashgit checkout -b feat/alarm-clock
๐ค ๋ง๋ ๋ธ๋์น๋ฅผ GitHub์ ํธ์
bashgit push -u origin [your-branch-name]
bashgit push -u origin feat/alarm-clock
u์ต์ ์ ์ดํgit push/pull์ ๋ธ๋์น ์ด๋ฆ ์๋ต ๊ฐ๋ฅํ๊ฒ ์ฐ๊ฒฐํด์ค
- ๋ค์๋ถํฐ ๊ทธ๋ฅ push ํด๋ ๋จ.
- ์
feat/๋ฅผ ์ฐ๋๊ฐ?๋ธ๋์น ์ด๋ฆ ํจํด
Prefix ์๋ฏธ ์์ ๋ธ๋์น๋ช feat/์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ feat/alarm-clockfix/๋ฒ๊ทธ ์์ fix/overflow-bugrefactor/์ฝ๋ ๋ฆฌํฉํ ๋ง (๊ธฐ๋ฅ ๋ณํ X) refactor/thread-inittest/ํ ์คํธ ์ฝ๋ ์ถ๊ฐ/์์ test/userprog-testsdoc/๋ฌธ์, README ์์ doc/setup-instructionschore/๋น๋, ์ค์ ๋ณ๊ฒฝ ๋ฑ ์ก์ผ chore/dockerfile-updatehotfix/๊ธํ ๋ฒ๊ทธ ์์ (๋ฐฐํฌ ํ) hotfix/build-crash์ ์ด๋ ๊ฒ ์ฐ๋?
- ํ์ ์ค์ ๋ธ๋์น๊ฐ ๋ง์์ง ๋ โ ์ด๋ฆ๋ง ๋ณด๊ณ ์ฉ๋ ํ์ ๊ฐ๋ฅ
- GitHub Pull Request์์ ์๋ ์ ๋ ฌ์ด๋ ํํฐ๋ ํธ๋ฆฌํจ
- ํ ๋ด๋ถ์์ ์ผ๊ด๋ ์คํ์ผ ์ ์ง ๊ฐ๋ฅ
- ์ผ๋ถ ์๋ํ ๋๊ตฌ(CI/CD, Release notes)์๋ ์ ํธํ๋จ
- VSCode์์ ํ๋ค๋ฉด ์ด๋ ๊ฒ ์ปค๋ฐ ์ด๋์ ํ๋๊ฑด์ง ํ์ธํด ๋ณผ ์ ์์

Github Pull ์ดํ Error
์ด๊ฑด ๋งฅ์์ ๋ฐ์ํ ๊ฒ์ ์๋๊ณ , ํ์ ์๋์ฐ์์ git pull ํด์จ ํ .sh ํ์ผ์ ์คํํ์ ๋ ๋๋ ๋ฌธ์ ๋ค.
bashroot@04fedab3f530:~/pintos/src/misc# env SRCDIR=/root/ PINTOSDIR=/root/pintos/ DSTDIR=/usr/local bash ./bochs-2.2.6-build.sh ./bochs-2.2.6-build.sh: line 2: $'\\r': command not found ./bochs-2.2.6-build.sh: line 41: syntax error: unexpected end of file
$'\\r': command not found์ด ๋ฉ์์ง๋ ํ์ผ์ด Windows ์คํ์ผ ์ค๋ฐ๊ฟ (CRLF) ์ผ๋ก ์ ์ฅ๋์ด ์์ด์ ๋ฐ์ํ๋ ๊ฒ์ ๋๋ค. ์ ๋์ค/๋ฆฌ๋ ์ค์์๋ LF (\n) ์ค๋ฐ๊ฟ๋ง ์ฌ์ฉํด์ผ ํ๋ฏ๋ก, ์ด ์คํฌ๋ฆฝํธ๋ ๋ฆฌ๋ ์ค์์ ์ง์ ์คํ๋๊ธฐ ์ ์ ํฌ๋งท์ ๋ณํํด์ผ ํฉ๋๋ค.
syntax error: unexpected end of file์ค๋ฐ๊ฟ ๋ฌธ์ ๋ก ์ธํด ์์ด ์คํฌ๋ฆฝํธ์ ๊ตฌ์กฐ๋ฅผ ์ ๋๋ก ํด์ํ์ง ๋ชปํด ๋๋ถ๋ถ์์ ๋ฌธ๋ฒ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ์ ๋๋ค.
- ์๋์ฐ์์ git์ ์ค์นํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ ์ค์ ์ธ๋ฐ, ์ด๊ฒ ๋ฌธ์ ๋ค.
bashcore.autocrlf=true
์ด ์ค์ ์:
- clone/pull ํ ๋ โ CRLF๋ก ๋ณํ
- commit/push ํ ๋ โ LF๋ก ๋๋๋ฆผ
์ฆ, ์น๊ตฌ๊ฐ pullํ ๋ .sh ํ์ผ์ด CRLF๋ก ๋ฐ๋์ด๋ฒ๋ฆฐ ๊ฒ์ด๋ค.
Docker ์ฐ๋ถํฌ ์ปจํ ์ด๋๋ ๋ฆฌ๋ ์ค๋๊น CRLF ํด์ ๋ชป ํจ โ ์๋ฌ ๋ฐ์
ํด๊ฒฐ๋ฐฉ๋ฒ
bashgit config --global core.autocrlf # ํ์ฌ ์ค์ ํ์ธ
| ๊ฒฐ๊ณผ | ์๋ฏธ |
|---|---|
true | ์๋์ฐ์ฉ: pullํ ๋ CRLF, pushํ ๋ LF |
input | ๋งฅ/๋ฆฌ๋ ์ค์ฉ: pullํ ๋ LF ์ ์ง, pushํ ๋ LF |
| (์๋ฌด๊ฒ๋ ์์) | ๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ ์ค (๋ณดํต OS์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์๋) |
bashgit config --global core.autocrlf input
์ด๋ฏธ ๋ฐ์ ํ์ผ ๊ณ ์น๊ธฐ
๊ทธ๋ฅ ์ง์ ์ค๋ฐ๊ฟ ์คํ์ผ์ ๋ฐ๊ฟ์ฃผ๋๊ฑฐ๋ค.
๊ทผ๋ฐ .shํ์ผ ๋ค๋ฅธ๊ฒ๋ ๋ง๊ณ ์ด๊ฑด ๊ทธ๋ฅ ์์๋ฐฉํธ์ด๋ ๋ค์ pullํ๋๊ฑธ ์ถ์ฒ.
bashsed -i 's/\\r$//' bochs-2.2.6-build.sh
FF?
VSCode๋ก ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด FF๊ฐ ๋ค์ด๊ฐ ์ ๊ธฐํ ๋ฌธ์๊ฐ ์๋ค.

์ด FF๋ Form Feed (์ค ๋ฐ๊ฟ ๋ช
๋ น ์ค ํ๋)
ASCII ์ฝ๋๋ก๋ 0x0C (๋๋ ^L) ์ด๊ณ ,
ํฐ๋ฏธ๋์์๋ ํ์ด์ง ๋๊น ์ญํ ์ ํ๋ ์์ ๋ฌธ์
- ์์ ๊ต์ฌ/์๋ํฐ์์ ๋ณต๋ถํ ์ฝ๋
- ๋๊ตฐ๊ฐ
.cํ์ผ์^L๋ฃ์ด์ ๊ตฌ๋ถ์์ฒ๋ผ ์ฐ๋ ์ต๊ด
- ํํ ์ค๋ ์ค๋๋ ์ ๋์ค ๊ธฐ๋ฐ ์ฝ๋์์ ๊ฐ๋ ๋ณด์.
- VS Code๊ฐ ํน๋ณํ ๋ณด์ฌ์ฃผ๋ ๊ฑฐ๊ณ , ์ค๋ฅ๋ ์๋