전체 글 41

Pintos Extra Questions

1. %rip, %rsp 레지스터의 의미와 CPU 동작에서의 역할%rip (Instruction Pointer Register): %rip는 현재 실행 중인 명령어의 메모리 주소를 가리키는 레지스터입니다. 프로세서가 명령어를 실행할 때마다 %rip는 다음에 실행할 명령어의 주소로 업데이트됩니다. 명령어 실행이 완료되면 %rip는 자동으로 다음 명령어의 주소로 증가하거나, 점프(분기) 명령에 따라 특정 주소로 설정됩니다.%rsp (Stack Pointer Register): %rsp는 현재 스택의 최상단을 가리키는 레지스터입니다. 함수 호출 시, 함수의 리턴 주소나 지역 변수를 저장하기 위해 스택을 사용하게 되며, 이때 %rsp는 스택의 최상단을 관리합니다. PUSH 및 POP 명령어는 %rsp를 조작하여..

WIL/스터디 2024.08.22

Red-Black Tree Extra Questions

1. Segmentation Fault (Core dumped)"Segmentation Fault (Core dumped)"라는 에러 메시지는 프로그램이 허용되지 않은 메모리 영역에 접근하려고 할 때 발생합니다. 이 메시지는 다음과 같은 문제들로 인해 발생할 수 있습니다:잘못된 포인터 참조 (예: NULL 포인터 참조, 초기화되지 않은 포인터 사용)배열 범위를 초과한 접근이미 해제된 메모리 접근스택 오버플로우core dumped는 프로세스가 비정상 종료되었을 때, 시스템이 해당 시점의 메모리 상태를 파일로 저장했다는 의미입니다. 이 파일을 사용해 프로그램이 종료된 시점의 상태를 분석할 수 있습니다.2. Core dumped ?core 파일은 프로세스가 비정상 종료될 때 메모리의 상태를 덤프한 파일입니다...

WIL/스터디 2024.08.21

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

최종발표까지 준비를 많이 했고, 서버 상태도 완벽하게 해놨는 데, 어이없게 발표 때 문제가 터지고 말았다. STT서비스인 리턴제로 쪽에 보내는 API가 한번에 뭉치는 문제가 생겨 429 에러코드가 계속 들어와서 STT가 되지 않았다. 한번도 이런 적이 없었는데... 무튼, 이 때문에 발표 중간에 NLP 서버를 재부팅했고, 다시 동작하는 것을 확인했다. 그러나 이 진행 상태를 알 리 없는 태리는 오류가 터지자마자 혹시 몰라서 준비해놨던 비상용 시연 영상을 빠르게 틀어버렸고, 우리는 시연을 하는 데에 실패했다. 발표가 끝나고 질문 시간에 아무도 질문을 하지 않아 조금 불안했다. 아무래도 지피티를 사용해서 남이 볼 때 아 그냥 쉽게 쉽게 갔구나로 보일 수도 있다고 생각했다. 그러다가 어떤 분이 오셔서 이것 저..

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

중간 발표를 마쳤는 데, 운영진 측에서 키워드 맵으로 문맥 파악이 전혀 안되는 데 문맥 파악이 되었다고 억지를 부리는 느낌이다. 수정하라는 피드백이 들어왔다. 이 때문에 다시 회의를 했는 데, 결국 문맥 파악이라는 것에 초첨을 두게 되면 키워드 맵으로는 당연히 단어끼리의 연결이기 때문에 될 수가 없었고, 다시 처음으로 돌아가 마인드 맵으로 수정해야 한다는 결론이 나왔다. 차라리 처음에 마인드맵으로 하지말고 키워드맵으로 하라는 피드백이 없었으면 더 나았을까? 라는 생각도 문득 스쳐지나갔다. 그러나 우리의 아키텍쳐는 이미 키워드 맵에 맞게 끔 수평 관계로 구성되어 있었다. 각 노드는 서로의 존재를 모르고 이 노드들을 연결하는 Edge라는 구조체가 있는 상태였다. 이를 마인드맵으로 수정하려면 일단 상하 관계가..

[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..