
목요일부터 협업을 위해 준비한 것들이 있어 해당 내용부터 작성하였습니다.이번주부터 PintOS 주차로 폼팩터에 대한 변화가 있을 예정입니다. 주로 팀을 기반으로 하는 프로젝트가 우선이므로 개인 노션을 쓸 시간이 없을 예정이므로 하루의 일정들과 개념들을 작성하겠습니다.

일부러 충돌 사항을 가정해서 병합 테스트를 했는데, 해당 과정에서 fatal: 파일 .git/config 안에 12번 줄에 잘못된 설정 이라는 문제가 생겼다. 이걸 해결하는 과정을 설명했다.
CPU를 스케줄링하는 5가지 방법. FCSFS, SJF, SRTF, Round Robin, Multilevel Queue Scheduling 을 정리해봤습니다.

주말이라 쉬엄쉬엄 쉬면서 공부했습니다. 팀원들과 함께 키워드를 정리해보는 시간을 가지며 코어타임에 전체 내용 정리를 마쳤습니다.

프로세스는 실행중인 프로그램이다. 이러한 프로세스의 하드웨어 상태 중 가장 중요한 구성 요소는 메모리이다. 명어들은 메모리에 저장된다. 실행 프로그램이 읽고 쓰는 데이터도 메모리에 저장된다. 프로세스의 하드웨어 상태를 구성하는 레지스터는

프로그램에서 한 순간에 하나의 명령어만을 실행하는 고전적인 관점에서 멀티 쓰레드 프로그램은 하나 이상의 실행 지점을 가지고 있습니다.

프로세스 / 쓰레드에서 공유 자원의 접근을 제어하는 정수형 변수입니다. 즉, 자원이 몇개 남았는지 나타내는 카운터입니다. 여러 스레드가 같은 변수 / 버퍼 / 장치 등에 동시에 접근하면 잘못된 결과를 낼 수 있기때문에 사용합니다.

뮤텍스는 한 번에 하나의 스레드만 임계 영역(공유 자원 독점 보장)을 실행할 수 있도록 하는 이진 세마 포어(1또는 0만 존재)에 가까운 동기화 방법입니다.Mutex는 mutual exclusion(상호배제)의 약자입니다.Lock 상태(flag): 현재 사용 중인지 아

해당 내용에는 세마포어, 뮤텍스, 모니터를 비교하는 도표도 포함합니다! 모니터는 데이터와 그 데이터를 다루는 함수들이 하나의 객체처럼 캡슐화된 동기화 구조입니다.

둘 이상의 스레드 또는 프로세스가 동시에 공유자원에 접근하면서 실행 순서에 따라 결과가 달라지는 상황입니다.→ 누가 먼저 실행되느냐에 따라 프로그램의 결과가 달라지고, 때로는 비정상적이나 예기치 못한 오류가 발생할 수 있습니다.

사실 제가 아는 데드록은 발로란트 요원 데드록밖에 모릅니다. 그러나 컴퓨터 시스템 개념중에 데드록이라는 개념이 있어 이번 시간에는 해당 개념에 대해 알아보는 시간을 가져보겠습니다.

스레드 우선순위(priority)를 동적으로 조정하며, 여러 개의 큐에서 스레드를 관리하는 스케줄링 기법입니다.피드백이라는 말처럼, CPU 사용량에 따라 스레드의 우선순위를 낮추거나 높이며, 사용자 개입 없이 스레드의 실행 순서를 자동으로 조정합니다.

`busy waiting`(바쁜 대기)는 CPU를 낭비하며 특정 조건이 만족될 때까지 반복적으로 루프를 도는 방식입니다. 즉, flag를 예시로 들면, CPU가 시그널이나 I/O 입력등의 조건이 될때까지 flag 상태만 체크하는 문제입니다.

오늘은 일요일이라 늦잠을 자고 출근했습니다. 군대에서 만난 동기(동생)을 만나 밥을 먹고 이런 저런 이야기를 나누었습니다. 키워드를 다 정리를 못해서 마무리를 하고 모든 블로그에 포스팅했습니다.

사실상 코드를 구현하느라 시간을 다써버리기도 했고, 해당과정을 모두 작성할 수 없어 일부 내용만 다음 포스팅에 디테일한 내용을 담았습니다. 참고하여 봐주시면 감사드리겠습니다.

컴퓨터는 켜지고 나서부터 스레드를 관리하기 위해 틱(초당 100회로 10ms)이라는 단위마다 스레드를 효과적으로 관리합니다. PintOS에서도 해당 방법을 통해 스레드를 관리합니다. 오늘 구현해야되는 해당 코드에 대해서 작성하는 것입니다.

오늘은 Priority Scheduling에 대해서 코드를 분석하고, 작성을 했습니다. 그 결과 일부 테스트는 구현 완료했습니다. 그러나 Donation은 아직 하지 못했습니다.

우선순위 기반 스케줄링을 위해서는 먼저 삽입된 쓰레드의 우선순위가 더 높다면, 즉시 양보(yield) 해줘야합니다. 이번 문제부터 세세하게 바뀌는 것도 있고 코드 순서대로 설명하는 것이 어렵습니다. 소제목의 순서를 참고하여 읽어주세요.

오늘은 Priority Scheduling에 대해서 코드를 분석하고, 작성합니다. 특히나 주석에 대한 번역을 진행하는 것이 좋을 것 같습니다. 분석이 완료되면 본격적으로 세마포어를 구현합니다. (원래는 donation인데 세마포어가 쉽다고 하여 바꿈)

강의를 들으면서 이해하고 빠르게 적어서 빠지거나 부족한 내용이 있습니다. 전체적으로 이러한 강의 형식임을 확인해보셨으면 좋겠습니다.

오늘은 9주차 발표를 진행합니다. 본격적으로 donation을 구현합니다. condvar에 대해서 학습하고 테스트 케이스를 통과합니다. 와 같은 목표를 가집니다.

해당내용은 크래프톤 채용팀, 퍼블리싱 플랫폼팀, 정글 선배분들의 종합적인 내용으로 이루어져 있습니다. 회사 내규에 따라 상황에 따라 언제든지 바뀔수 있으며, 그저 참고용으로만 확인하시면 좋겠습니다.Create original, Connect the world.

9주차에 나온 퀴즈에 대해서 답안을 확인하여 다시한번 복습해보았습니다. 개념적으로 디테일한 부분이 부족한것 같습니다.

함수 코드에서 수정 사항이 적을 경우 같은 코드 박스에 작성하였습니다. 그러나 수정 사항이 많은 경우 각각 다른 코드 박스에 작성하였습니다. 또한 세마포어 이론을 이해했다는 가정하에 설명하므로 참고하시면 좋겠습니다. 현재 기본으로 제공된 세

사실 해당 테스트 케이스가 금방 끝난다고 해서 먼저한건데, 하루정도 걸렸습니다… condvar은 condition variable (조건 변수) 를 잘 구현했는지 확인하는 테스트 케이스 입니다.

목표는 본격적으로 donation을 구현합니다. 9주차 정리가 마저 되면 노션을 정리합니다.priority-sema, priority-condvar 를 정리합니다. 전체적으로 정리하는 시간을 가지고, donation을 구현해봅니다.

주말간 있었던 일들을 정리해보았습니다. 프로젝트 1을 다 하지 못해 미련이 남아 좀 더 시도해봤는데, 시간이 너무 오래걸려서 토요일부터 프로젝트 2를 시작했습니다. 그리고 주말간 먹은 음식들과 했던 것들을 정리해봤습니다.

오늘은 정글에서 제공하는 키워드 공부 / 정리를 하려 했으나 코드 구현이 우선이라 코드 규현을 해보며 모르는 부분만 보충하는 것으로 결정했다. 먼저, 코드 파일들 전체 번역하고 본격적으로 argu에 대해 구현 시도해보았다.

유저모드와 커널모드에 대해 알아봅니다. 운영체제와 사용자 프로그램은 하드웨어, 소프트웨어 자원을 공유함에 따라 올바른 실행 보장을 위해 유저와 커널 모드로 구분할 수 있습니다.

오늘의 목표는 argu 구현하고 코드 어떻게 구현했는지 정리하는 것이 목표 였으나, 생각보다 argu 구현이 완료된 이후 디버깅을 하는 과정에서 시간을 많이 사용하여 정리는 내일 하는 걸로 했습니다. argu 구현 관련 내용은 내일 정리되는대로 올리겠습니다.

PintOS 프로젝트2 Argument Passing 해당 문서는 크래프톤 정글에서 진행하는 KAIST Pintos x86_64 기준으로 작성된 문서입니다. 통과 가능 테스트 케이스: args-none, args-single, args-multiple, args-m

오늘 목표는 argu 코드 어떻게 구현했는지 정리하기, 시스템콜 관련 공부를 하고 구현하기 입니다. 먼저, args가 스택에서 일부분이 짤리는 오류가 있어 디버깅을 권호님이랑 같이 진행했습니다. 관련 내용을 정리하고 시스템콜 구현에 들어갔습니다.

오늘은 시스템 콜을 구현하는데 목적이 있습니다. 오늘은 운영진 티타임이 있어 pintos 관련 꿀팁들을 공유해 보는 시간을 가졌습니다. 또한, 커리어 특강이 있어서 특강들으며 유익한 시간을 보냈습니다.

특강의 흐름을 기억에 남는대로 적어보았습니다. 완벽하지 않으니 흐름 파악정도로만 사용하시면 좋겠습니다. 오늘은 아바티의 이준홍 CTO님이 오셔서 강의를 하셨습니다.

오늘의 목표는 파일관련 시스템콜 관련 공부를 하고 구현는 것이다. 오늘 10시에 배틀 그라운트 토크 세션인데 알람이 안울렸는지… 내가 못들었는지 이제 일어나서 바로 교육장으로 뛰어갔다.

오늘의 목표는 fork 시스템콜 관련 공부를 하고 구현하기, fork전 모든 테스트 케이스 끝내기이다. 먼저, 어제 못 쓴 벨로그와 티스토리를 정리했다. 어제 구현한 시스템 콜 내용에 대해 정리도 했다. 오늘 마지막쯤에 read와 write관련 보강도 했다.

오늘의 목표는 fork 시스템콜 관련 공부를 하고 구현하기이다. 미뤘던 티스토리와 벨로그를 정리하고, 휴식을 가져보는 시간을 가졌다. 팀원분들과 같이 게임과 식사를 하며 시간을 가지니 기분좋은 하루였다.

오늘 목표는 fork 시스템콜 관련 공부를 하고 구현하기입니다. 어제 오류난 __do_fork를 해결해보고 있습니다. 끝나는대로 wait을 빨리 해봐야겠습니다.

오늘 목표는 11주차 발표 자료를 구상하고 fork, wait, exec를 구현합니다. 오늘은 꼭 구현가능했으면 좋겠습니다. 왜 자꾸가 오류가 나는지...

fsync와 sync는 컴퓨터의 디스크 I/O 연산은 커널 안의 버퍼 캐시나 페이지 캐시를 거칩니다. 따라서 프로세스가 파일에 데이터를 기록하면, 커널은 그 데이터를 커널의 버퍼들 중에 복사해서 내부적인 대기열에 등록해 두고, 적당한 시점이 되면 디스크에 기록합니다.

오늘 목표는 11주차를 마무리합니다. fork, wait, exec를 최대한 구현해봅니다. 먼저 발표 자료를 종합했다.11주차 발표를 진행했다. 굉장히 다양한 주제들을 살펴볼 수 있었다. 오늘은 랜덤런치날로 다른 동료분들과 식사를 했다.

11주차에 봤던 퀴즈를 복습해보았습니다. 커널, 파일 시스템, MLFQ, fsync 등의 내용이 주력적인 시험 내용으로 나왔습니다.

참고로 일부분의 함수들은 성공적으로 작성하였고, 테스트 케이스도 통과를 하였지만 모든 시스템콜을 구현하진 못했습니다. 참고하여 읽어주시면 감사드리겠습니다.설명하기에 앞서, 통과된 테스트 케이스는 다음과 같습니다. fork 이전까지 모두 통과했습니다.

오늘의 목표는 프로젝트3를 시작합니다. 이후, 개념들을 살펴보고 정리해봅니다. 그리고 형상 관리 및 프로젝트 흐름도 구성해봅니다. 어제의 내용을 정리해서 벨로그와 티스토리에 올렸습니다. 어제 fork 디버그 내용을 다시 살펴보았습니다.

오늘의 목표는 pintos 카이스트 강의를 듣습니다. 깃북을 보고 개념을 이해하고 vm파일에 있는 주석들을 번역합니다. 물론 다하지 못하고 일부분만 완료했습니다.

오늘은 집에 갔다왔습니다. 정글에서 제공하는 키워드를 보고 정리했습니다. 10가지의 개념을 모두 정리하고 싶었지만, 7가지의 개념만 정리했습니다. 나머지 내용도 정리되는 대로 올려보겠습니다.

가상 메모리는 프로세스가 자신만의 연속적인 메모리 공간을 가지는 것처럼 보이도록 만들어주는 추상화입니다. 실제 물리 메모리는 제한적이고, 여러 프로세스가 동시에 실행될 수 있도록 하기 위해 운영체제는 이 가상 메모리를 물리 메모리에 “매핑”하는 작업을 수행합니다.

페이지 테이블은 가상 주소를 물리 주소로 변환하기 위해 운영체제가 유지하는 자료 구조입니다.가상 주소 공간을 물리 주소 공간으로 매핑하기 위해 존재합니다.페이지 단위로 메모리를 관리하기 위한 핵심 메커니즘입니다.프로세스마다 개별적으로 존재합니다. (주소 공간 격리)

TLB는 가상 주소 → 물리 주소 변환 정보를 캐시해 놓는 하드웨어 캐시입니다.주소 변환 시 매번 페이지 테이블을 참조하면 느리기 때문에, 자주 접근하는 페이지 매핑 정보를 빠르게 제공하기 위해 존재합니다.

Page Fault는 CPU가 아직 메모리에 존재하지 않는 가상 주소를 접근하려고 할 때 발생하는 예외(Exception)입니다.

Lazy Loading은 데이터를 즉시 로드하지 않고, 진짜 필요한 순간에 로딩하는 기법입니다. 운영체제에서는 페이지 접근 시점까지 메모리에 내용을 로딩하지 않는 방식을 말합니다.

말 그대로 페이지 교체 정책입니다. 운영체제가 메모리 부족 상황에서 어떤 페이지를 제거할지 결정하는 전략입니다.운영체제는 가상 메모리 덕분에 물리 메모리보다 큰 주소 공간을 다룰 수 있습니다.

익명 페이지는 파일에 연결되지 않은 메모리 페이지를 말합니다. 즉, 특정 파일을 백업으로 갖지 않고, 내용이 오직 메모리 안에만 존재하는 페이지입니다.Heap 영역: malloc() 이나 brk() 로 확장된 사용자 메모리에서 사용합니다.

Swap Disk는 운영체제가 메모리가 부족할 때, 일시적으로 데이터를 저장하는 디스크 영역입니다.운영체제는 가상 메모리 때문에 실제 물리 메모리보다 더 큰 메모리 공간을 지원할 수 있습니다. 부족하다면 페이지를 내보냅니다.

File-backed Page는 파일 내용을 메모리에 매핑하여 사용하는 페이지 입니다. 즉, 특정 파일의 일부가 가상 주소 공간에 직접 연결되어, 메모리처럼 접근 가능한 구조입니다.

DMA는 CPU를 거치지 않고 장치 (디스크, 네트워크 카드 등)가 메모리와 직접 데이터 전송을 수행할 수 있게 하는 하드웨어 매커니즘입니다. → CPU가 일일이 데이터를 복사하지 않아도, I/O 장치가 메모리에 직접 읽고 쓸 수 있게 해주는 기술입니다.

PML4는 x86_64 아키텍처에서 사용하는 4단계 페이지 테이블의 가장 상위 레벨입니다.즉, 64비트 가상 주소 → 물리 주소 변환 시, PML4는 첫 번째 인덱스로 접근되는 테이블입니다.64비트 주소는 최대 2⁶⁴개의 주소 공간을 다룰 수 있습니다.

오늘의 목표는 pintos 카이스트 강의를 듣기 -> (다른 사람 벨로그 내용으로 대체 예정), 깃북을 보고 개념을 이해하기, 정글에서 제공하는 키워드를 보고 정리하는데에 있습니다. 오늘부로 VM 코드 작성을 시작하였습니다.

목표는 spt 보충 테이블 관련 코드를 직접 구현하면서 vm을 알아가보기, 프레임 관련 내용을 이해하고 코드를 작성하기, 익명 페이지 관련된 내용을 이해하고 코드를 작성하기 등 입니다. 코드 작성 내용 위주로 포스팅했습니다.

오늘의 목표는 익명 페이지 관련된 내용을 이해하고 코드를 작성해보기, fork를 제외하고 모든 테스트 케이스가 돌아가는지 확인해보기 입니다. 주로 fork까지의 테스트 케이스를 통과하기 위해 디버깅을 많이 해볼 예정입니다.

오늘의 목표는 fork를 제외하고 모든 테스트 케이스가 돌아가는지 확인해봅니다. fork도 돌아갈 수 있는 코드를 만듭니다. 일단 벨로그 정리먼저하고 코드보겠습니다.

오늘의 목표는 fork를 제외하고 모든 테스트 케이스가 돌아가는지 확인해봅니다. 더나아가 kill 관련된 함수를 구현하여 fork도 돌아갈 수 있는 코드를 만듭니다. 참고로 말하자면 모두 문제 없이 성공했습니다.

참고로 이번 TIL에는 놀러간 이야기와 사진들이 많습니다! 주말간 목표는 stack growth를 구현하고 관련 테스트 케이스를 통과해봅니다. 놀러가기때문에, 가서 시간 남는대로 티스토리 정리해봅니다.

오늘의 목표는 mmap 전 통과안되는 코드들을 트러블 슈팅합니다. (어제 fork_read 하다가 말았음) stack growth를 구현한 코드를 이해해봅니다. mmap 구현을 해봅니다.

오늘의 목표는 mmap 구현을 해봅니다. 곧 pintos에 끝나므로 팀원들 코드를 merge 해봅니다. 13주차 퀴즈를 진행합니다. 어제 쓴 TIL에 대해 벨로그에 정리하고 mmap에 대해 이해를 해보았습니다.

오늘 목표는 mmap 구현을 해봅니다. 발표자료를 만듭니다. 13주차 퀴즈 오답 노트를 작성합니다. 어제 develop5에 merge한 것을 내가 작성한 코드에 맞게 merge했습니다.

13주차 Pintos 마지막 주차에 진행했던 퀴즈에 대해서 작성해보았습니다. 정글에서의 마지막 퀴즈가 될 수도 있겠네요...

해당 페이지 폴트는 Pintos x86_64 기준으로 설명합니다.Page fault는 프로세스가 참조하려는 가상 메모리 페이지가 현재 물리적 메모리에 로드되어 있지 않을때 발생합니다.

오늘 목표는 13주차 발표를 합니다. 13주차 및 pintos를 마무리합니다. 전체 정리를 합니다. 동료평가를 완료합니다. 13주차 퀴즈 오답 노트를 작성합니다.

저희는 Gitbook에 따라 먼저 spt 테이블을 구현합니다. 테이블을 구현하는 방식 중에는 배열, 리스트, 비트맵, 해시 테이블 등이 있는데 저같은 경우 해시 테이블을 채택했습니다.

※ 100% 완벽한 코드는 아닙니다! 참고용으로 봐주세요. ※해당 함수는 fork과정에서 부모의 주소를 자식에게 복사해주는 기능을 합니다.부모의 주소 공간을 src라 지칭하고, 자식의 주소 공간을 dst라고 지칭합니다.

운영진 티타임때 이야기를 나누었던 Devops 내용에 대해 간략히 정리해보았습니다. 이야기를 들으면서 빠르게 정리한 것이라 어순이 이상할 수도 있습니다. 양해부탁드립니다.