Krafton_Jungle

길고 길었던 5개월이 벌써 다 지나가버렸다. 매일같이 회고를 적어야지 적어야지 하고 미루다 수료식을 마친 이제야 정말 끝났다는 실감이 나 이렇게 회고를 남겨본다, 정들었던 경기대학교 캠퍼스를 떠나기 전 내가 왜 크래프톤 정글에 뛰어들었는지, 내가 얻어간것과 잃은것은 무엇이 있는지 한번 정리해보려고 한다. 크래프톤 정글에 들어가야겠다고 다짐한 계기는 다음과 같다. 단순 Framework 만 다룰 줄 안다고 지속 가능한 개발자가 될 수 있는걸까?? 국비 지원 교육을 한차례 받고 Java Spring을 겨우 다룰 줄 알게 된 나는 이런 고민에서 벗어날 수 가 없었다. 자료구조와 각종 알고리즘, 그리고 컴퓨터의 기본 작동 방식도 아무것도 모르는 내가 고작 Spring boot 하나 다룰 줄 안다고 정말 좋은 개..
새벽에 팀원들과 코딩을 하다 뜬금없게도 내 근황을 전하고 싶어 이렇게 글을 남긴다. 정신없이 pintOS 주간이 지나가고, 한참 나만무 3주차에 접어들었다.그간 연속되는 밤샘에 한참 정신이 피폐해져 블로그에 공부한 내용을 정리하지 못했다.pintOS 주간은 말 그대로 정글의 모든것이였다고 말할 수 있다.정신없이 돌아가는 테스트 코드, 불편한 디버깅 환경, 앞으로 치고나가는 사람을 보며 느끼는 불안감... 매일 매일이 전쟁같은 시간이였고, 그곳에서 하나라도 더 얻어가려고 끊임없이 발버둥 치는 시간이였다. 그렇게 하루 이틀이 지나가나 보니 어느덧 모든 pintOS 프로젝트를 마치고 나만무 팀을 꾸리고 있더라. 난 나만무에서 과분하게도 팀장이라는 역할을 맡게되어, 마음 맞는 사람들과 내가 원하던 프로젝트를 진..
먼저 구현하기 쉬운 친구들부터서술하겠다.Syscall handler/* The main system call interface */void syscall_handler(struct intr_frame *f UNUSED){ int syscall_n = f->R.rax; /* 시스템 콜 넘버 */#ifdef VM thread_current()->rsp = f->rsp;#endif switch (syscall_n) { case SYS_HALT: halt(); break; case SYS_EXIT: exit(f->R.rdi); break; case SYS_FORK: thread_current()->parent_i..
구현 목표f_name을 통째로 file_name으로 바꿔주고 있다.[[strtok_r]] 를 사용해 토큰별로 쪼개준다 (공백 여러개 있을 때도 처리해야 함)그렇게 쪼개진 토큰을 list에 담아 intr_frame의 register에 세팅해준다.intprocess_exec (void *f_name) { char *file_name = f_name; bool success; /* We cannot use the intr_frame in the thread structure. * This is because when current thread rescheduled, * it stores the execution information to the member. */ struc..
Main goalImplement 4.4 BSD scheduler MLFQ like scheduler without the queues.MLFQS (Multi-level Feedback Queue Scheduling) 와 유사한 스케쥴러를 구현한다.MLFSQS like 일까?❌ Priority의 값에 따라 Ready-Queue 여럿 존재하며, 순위를 기준으로 Ready-Queue를 실행하며, Queue에 여러 쓰레드가 존재할 경우 Round-Robin 으로 큐를 실행한다. (Multi-Level)✅ Priority의 값을 일정 tick 마다 조정한다. (Feedback)여기서, 우리는 여러개의 Ready_Queue를 관리하는 것이 아니라, 한 개의 all_list 로 feedback system을 관리할..
핀토스는 사람을 병들게 한다.전체적인 코드를 보고싶으면 여기 있는 레포지토리에서 확인하시면 됩니다.https://github.com/jun9898/pintos-kaist 🐳 문제정의현재상황Pintos - thread - alarm_clock 까지 구현된 상태에서는 작업의 우선순위가 고려되지 않은 채 쓰레드 스케쥴링을 수행한다. ( thread_unblock, thread_set_priority )여기서 만약 Priority에 따라 Ready_list를 정렬한다고 할지라도, Priority Inversion이 발생할 수 있기 때문에 공유자원에 대한 관리 또한 필요하다. (sema_up, sema_down)Priority Inversion을 해결하기 위한 방법으로는 priority inheritance p..
우선순위 스케줄링비효율적인 쓰레드 스케쥴링 기법을 보다 효율적인 우선순위 스케줄링으로 변경하는 과제가 주어졌다.https://youtu.be/myO2bs5LMak?si=-XCZqOKd_C-SffJo좋은 동영상 강의가 있지만 이해한 내용을 정리하고 보다 쉬운 이해를 돕기 위해 미약하게나마 시각화를 해봤다. 만약 쓰레드에 5틱의 작업을 허용하는 OS가 있다고 치자. 작업들이 ready queue에서 순차적으로 수행될것이다.   여기서 우리는 Sleep list에 작업을 마치지 못한 쓰레드를 추가할 것인데, 추가하며 해당 쓰레드는 자신이 작업하는데 걸리는 시간 + 현재 시간을 더한 값을 feild값으로 설정한 뒤 Sleep list에 추가한다.여기서 만약 내가 가지고 있는 feild값이 sleep list에서..
ERROR분명 20개의 테스트가 성공해야하는데 내 도커 가상환경이 잘못된건지 계속해서 27개의 테스트가 모두 실패하고 나오는 대참사가 발생했다. 1번째 방법mac의 도커는 기본적으로 Rosetta를 사용하는데 pintOS의 공식 문서를 살펴보면 해당 옵션을 끄고 qemu를 사용해야 한다고 나와있다.  그리고 도커 이미지를 --platform linux/amd64 설정을 넣어 다시 받아주고 컨테이너를 새로 생성해줬다.docker run --platform linux/amd64 ubuntu:18.04  마지막으로 도커를 최신 버전으로 업그래이드하니 정상적으로 20/27점이 나오기 시작했다.  세상 모든 사람들을 찾아봐도 이런 문제를 겪은 사람은 나밖에 없는것같아서 이렇게 기록을 남긴다.
Network Programming 드디어 통신!클라이언트 서버프로그래밍 모델모든 네트워크 응용 프로그램은 클라이언트 서버 모델에 기초하고 있다.서버는 일부 리소스를 관리하고 이 리소스를 조작해서 클라이언트를 위한 일부 서비스를 제공한다.클라이언트-서버 모델에서 근본적인 연산은 트랜잭션이다.트랜젝션트랜잭션은 네단계로 구성된다.1. 클라이언트가 서비스를 필요로 할 때, 클라이언트는 한 개의 요청을 서버에 보내는것으로 트랜잭션을 개시한다.2. 서버는 요청을 받고, 해석하고, 자신의 자원들을 적절한 방법으로 조작한다.3. 서버는 응답을 클라이언트로 보내고, 그 후에 다음 요청을 기다린다.4. 클라이언트는 응답을 받고 이것을 처리한다.  네트워크네트워크네트워크는 단지 또 다른 I/O 디바이스이다. (네트워크는 ..
System-Level I/OUnix I/O파일은 연속된 m개의 바이트파일을 열때 응용 프로그램은 커널에 I/O 디바이스를 식별할 수 있는 식별자(descriptor) 라고 하는 비음수를 리요청한다.이 식별자는 표준입력(0번) 표준출력(1번) 표준에러(2)로 이루어진 기본 식별자를 가지고 있으며 프로그램의 요청에 의해 식별자가 반환된다.실제 파일의 끝에서 EOF라고 알려진 조건이 발생하면 파일이 종료된다.파일디렉토리는 링크들의 배열로 구성된다.. (점 한개)는 자신의 디렉토리로의 링크이고 ..(점 두개)는 부모 디렉토리로의 링크다.  RIO 패키지를 이용한 안정적인 읽기와 쓰기RIO 패키지짧은 카운트를 자동으로 처리하며 네트워크 프로그램으로 인한 통신에서 자료의 손상이 이뤄지지 않게 안정적으로 효율적인 ..
전낙타
'Krafton_Jungle' 카테고리의 글 목록