분류 전체보기 47

[Week15] 나만의 무기를 갖기 - 3

키워드 추출하는 타이밍을 정하는 데에 ELMo를 사용하려고 시도했다. ELMo는 사전학습된 모델로 단어의 임베딩 섹터를 생성하여 문맥이 바뀌었을 때를 알 수 있는 모델이었다. 나는 이를 사용하여 문맥이 바뀔 때를 체크해서 Keyword의 추출타이밍으로 적용하거나 키워드를 묶을 때 다른 메인 아이디어로 묶고자 하였다. 찾아보니 한국어 모델이 mini 모델이지만 있긴 있어서 이를 사용하게 되었다. 그러나 세팅을 마치고 직접 사용해보니 mini model이어서 그런가 성능이 너무 안좋았다. 이 때 사용한 예시 스크립트는script = '여행 어디로 갈까? 대구나 부산 어때? 그럼 부산으로 가자. 우리 여행가서 먹을 점심 메뉴 고르자. 국밥이나 밀면 어때?' 였는 데, ELMo 에서 반환된 데이터는switchi..

[Week15] 나만의 무기를 갖기 - 2

프로젝트를 개발하며 Keyword를 추출하는 것이 아무래도 Main Server에서 수행하면 부하가 너무 심할 것 같아서 차라리 언어에 친화적인 NLP Server를 따로 구성하기로 했다. 그리고 사용할 수 있을 만한 기술들을 찾아봤는 데, KRWordRank, Elmo, KoBERT 등의 라이브러리와 언어모델을 사용할 수 있을 것 같다. KRWordRank는 비지도학습으로 키워드를 추출해주는 라이브러리다. 그래서 이를 이용하여 문장에서 단어를 추출하는 데 성공했고, 조사나 부사까지는 필터링이 가능하다는 것을 깨달았다. 그러나 다른 문제가 생겼다. KRWordRank는 이 문맥에서의 가장 중요한 단어를 추출한다기 보다는 반복적으로 많이 나오는 단어에 대해서 중요도가 올라가서 가장 중요한 단어 순서로 뽑아..

[Week14] 나만의 무기를 갖기 - 1

나는 해내야한다 조의 서포터로 팀에 참가했다. 원래 내가 팀장을 하고자하는 생각이 있었으나, 이전에 0주차에 같이 팀을 했었던 태리와 마음이 맞아 둘 중에 한명이 팀장을 하기로 했다. 나는 이전 회사에서도 파트장까지 달았었고, 게임을 할 때도 길드장을 한다던가 공대장을 하는 등 리더 위치에서 무언가 했던 경험이 많았고 프로팀 생활도 했었기 때문에, 이번에는 태리에게 팀장을 양보하기로 했다. 아무래도 포폴쓸 때 나보다는 태리에게 더 많은 도움이 될 것이라고 생각했다. 처음에 우여곡절이 많았다. 내가 프로젝트를 시작하자마자 3일정도 몸살에 걸려서 거의 아무것도 못하고 잠만 잤는데, 정신이 들었을 때 마다 한두마디씩 툭툭 던진 아이디어 로 나머지 팀원들이 아이디어를 추리고 재밌게 바꿔서 제출했다. 이 때 나 ..

Pintos의 Test Case는 완벽하지 않다

Pintos의 test를 맹신하지 마라. Test를 실행하다가 이상한 부분을 발견했는데 2번째 msg에서 실제로 값에 접근하지 않았는 데 VA가 정확히 ACTUAL로 부터 4096만큼 떨어진 곳에 위치한 곳에 ACTUAL + 4096이 있는 것을 발견했다.확인해 보니 실제로 프로그램은 ACTUAL + 4096을 할당해주긴 하지만 접근을 하지않아 page fault조차 뜨지 않았다. 이는 말이 안된다고 판단해서 내 코드를 계속 뜯어보다가 나중에 Test Case를 열어보게 되었다.#define ACTUAL ((void *) 0x10000000)voidtest_main (void){ int handle; void *map; CHECK ((handle = open ("sample.txt")) > 1, "..

왜 환경 별로 Test 결과가 다를까?

같은 Pintos Code를 갖고 EC2와 Docker, WSL에서 각각 다른 Result 가 나오는 경우가 있다. 이는 기본적으로 환경 별로 처리 속도가 다르기 때문인데 단적인 예시로 내 Docker 환경에서는 1초에 2.1억번 정도 loop가 수행된다.// DockerCalibrating timer... 209,715,200 loops/s. 그런데 같은 팀원의 환경에서 돌려본 결과 EC2는 1.3억번, WSL에서 돌려본 결과는 3.1억번 정도가 수행된다.// EC2Calibrating timer... 129,638,400 loops/s// WSLCalibrating timer... 314,163,200 loops/s. 이 때문에 보통 프로그램이 허술하면 EC2에서는 아무런 문제없이 도는데 Doc..

Syscall Entry Shell 내용을 뜯어보자

syscall_entry.S는 시스템콜이 호출되었을 때 user mode에서 작동하고 있던 프로세스를 kernel mode로 이동하여 시스템 콜을 수행하고 다시 ret하기까지 수행하는 shell 파일이다.// syscall-entry.S#include "threads/loader.h".text.globl syscall_entry.type syscall_entry, @functionsyscall_entry: movq %rbx, temp1(%rip) movq %r12, temp2(%rip) /* 저장된 레지스터 호출 */ movq %rsp, %rbx /* Store userland rsp */ movabs $tss, %r12 movq (%r12), %r1..

MLFQS를 구현함에 있어 All List에 관하여 (feat. dangling pointer)

먼저 사전에 알아야 하는 점이 있다. 바로 Pintos 학습자료가 32bit와 64bit로 나뉘어져 있다는 것이다. 아직까지 일부분만 학습하여 32bit와 64bit Pintos의 차이를 전부 알지는 못하지만 thread부분에서 체감할 수 있는 부분이 있었다.바로 all_list가 없다는 것. 이 페이지는 내가 학습한 내용이 너무 방대하여 만들었지만, 현재의 나도 정글의 선배 기수들의 자료들을 많이 참고하며 공부하고 있는데, 언젠가 다른 정글러들이 mlfqs를 구현하고자 하다가 헤메면서 꽁꽁 숨겨져있는 이 page까지 왔다면 아마 이러한 연유로 찾아오지 않았을까 하는 생각이 든다. 만약 MLFQS가 mlfqs-load-1 테스트는 성공했는데 mlfqs-load-60에서 잘 돌다가 120초에서 뜬금없이 에..

Thread.c에서 Context Switching 함수 분석을 해보자

다음 함수는 CPU Register를 흉내내어 만들어져 있는 구조체에서 %rsp를 포인터로 사용해 CPU Register로 올리는 함수이다.// thread.cvoid do_iret(struct intr_frame *tf) { /* Structure -> CPU Register로 데이터 이동 (Load) */ __asm __volatile( // 입력한 그대로 사용 "movq %0, %%rsp\n" // 인자 *tf의 주소를 RSP에 저장 이 때, %0을 처음보게 되어 무슨 뜻인지 몰랐었는데, 이는 input operands로 들어온 0번째 인자를 가리키게 되며 컴파일러는 먼저 가서 확인 한 후 돌아와 할당하게 된다. "movq 0(%..

[WEEK07] 정글 속 으로 - Pintos Kaist

Pintos 주간이 시작됐고 예상대로 너무나 바빠 week 06 log를 쓰지도 못했는데 생각 난 김에07 log부터 쓰기로 했다. 일단 확실하게 느낀 점은 SW정글은 코드를 잘 짜기를 보다는 CS를 배우는 커리큘럼이라는 것과 코드 짜느라 머리털 뜯을 시간에 PINTOS 코드 뜯어보면서 머리털 뜯는 게 낫다는 결론을 냈다. **(탈모는 어차피 온다)** 대신에 PINTOS부터는 내용이 너무 방대하고 기억하고 싶은 내용이 많아 Notion이나 Velog에 WIL나 TIL를 저장하고 싶은 욕심이 생겼는 데, 뭔가 남이 보는 건 부끄러워서 그냥 깃허브정글 아카이브에 마크다운으로 만들까 고민 중에 겸사겸사 로그를 작성했다.

[WEEK06] 탐험준비 - Webproxy Lab

6주차의 정글일지를 쓰는 현재는 무려 17주차 막바지... 팀플이 거의 막바지로 접어들면서 약간 한가해졌다. 그래서 미뤄뒀던 정글일지를 쓰고자 한다. 벌써 2달이 지난 시점이지만 이 때 당시의 기억을 해보면 새록새록 나는 것 같다. 먼저 민방위가 포함되어있는 주차였어서 최대한 빨리 끝내고자 했었다. 팀으로 영민님과 동환님이 배정됐다. 두 분 다 전공자기도 하고 정글내에서 잘하는 사람들로 유명해서 더 어려운 주간, 예를 들면 핀토스 주간에 같은 팀이 되었으면 좋겠다고 생각했었는데, 핀토스 직전에 팀이 돼버려서 조금 아쉬웠다. 여튼 팀이 되자마자 회의를 했는 데, 각각의 일정이 다 있는 상태였어서 같이 점심을 먹을 수 있는 횟수가 3번 정도밖에 되지 않았다. 그러나 모두의 목표는 동일했는데, 바로 자신의 일..