728x90
반응형

크래프톤 정글 5기 48

PintOS 프로젝트 1주차 [Threads / 트러블 슈팅]

Alarm Clock1. sleep_list 정렬기존 thread_sleep() 함수에서는 sleep_list에서 깨울 스레드를 찾기 위해 모든 리스트 요소를 다 뒤져야 했다.따라서 불필요한 리스트 순회가 존재했다.// 로컬틱 넣고, state 변경하고, sleep_list에 넣고, 스케줄러 호출하기void thread_sleep(int64_t ticks) {     ......생략.....        // 현재 스레드가 idle이 아닐 경우    if(curThread != idle_thread) {                // 로컬 틱 설정        curThread->localTick = ticks;                // localTick 기준으로 정렬되어 삽입        li..

PintOS 프로젝트 1주차 [Threads / Priority Donation]

이전 Priority Scheduling과 이어지는 글이다.이 글에서는 저번 글에 이어서, Priority Donation을 구현하는 것을 메인으로 다룬다.  thread.hstruct thread {    /* Owned by thread.c. */    tid_t tid;                          /* Thread identifier. */    enum thread_status status;          /* Thread state. */    char name[16];                      /* Name (for debugging purposes). */    int priority;                       /* Priority. */    ..

PintOS 프로젝트 1주차 [Threads / Priority Scheduling]

Priority Scheduling은 우선순위 스케줄링을 의미한다. Alarm Clock에서는 ready_list에 우선순위를 생각하지 않고 스레드를 삽입했고, 모든 스레드가 공평하게 CPU를 사용했기에 더 자주 CPU를 사용해야 할 스레드가 자주 CPU를 사용하지 못해서 비교적 비효율적 이었다.(FIFO방식) 이번엔 스레드마다 우선순위(Priority)를 부여해서 ready_list에 우선순위 순으로 정렬하여 삽입하고, 우선순위가 높은 스레드부터 CPU를 점유하도록 개선할 것이다. 또한, 이미 특정 스레드가 CPU를 사용하고 있더라도 더 높은 우선순위의 스레드가 ready_list에 들어오면 CPU를 빼앗는 선점(Preemption)도 구현할 것이다. 단 timer_interrupt마다 thread_a..

PintOS 프로젝트 1주차 [Threads / Alarm Clock]

PintOS는 알람을 구현할 때 기본적으로 busy waiting 방식을 사용한다.따라서 sleep/wakeup 방식으로 개선하는 것이 목표이다.  timer_sleep 함수는, running중인 스레드를 지정된 ticks 동안 blocked 시키는 함수이다.기존의 timer_sleep은 위 사진처럼 busy waiting이 일어나도록 설계되어 있다. 지정된 ticks가 지날 때 까지 while문 조건을 끝없이 검사하며 의미없이 CPU를 잡아먹는다.즉, 지정된 시간을 기다리기만 할 뿐인 스레드가 무의미하게 while문을 돌며 CPU자원을 소모한다. 이것이 busy waiting이며, 개선해야 하는 부분이다.  어떻게 개선해야 하는가?- thread 구조체에, 깨어나야 할 시간을 의미하는 Local Tic..

크래프톤 장병규 의장님 티타임 / 창업과 관련된 답변들

성공한 사업가가 되기 위해 중요한 점- 수도 없이 많을 테지만, 주변에 능력 있고 멋진 사람이 많아야 한다.- 혼자 잘나서 성공할 수도 있지만 그것은 어렵다.- 또한 정말 큰 기업이 되려면 운도 굉장히 중요한 요소이다. 주변에 멋진 사람을 많이 만드는 법- 가장 먼저 스스로가 멋진 사람이 되어야 한다.- 사람을 최대한 많이 만나고, 경험하고 배워야 한다.- 스스로를 사람을 많이 만나는 환경에 노출시켜야 멋진 사람을 얻을 확률도 높아진다.- 의도적으로 멋진 사람을 많이 만나려고 노력해야 한다. 창업을 하기 위해서는..- 창업과 관련된 커뮤니티, 글, 책 등에 최대한 나를 노출시켜라.- 그곳에서 최대한 많은 지식과 정보를 접하고 익숙해져야 한다. 자연스레 창업에 관한 많은 것들을 배우고 어떤 방향으로 나아가..

[크래프톤 정글 5기] PintOS 프로젝트 여섯번째 날, Multiprocess vs Multithread, deadlock 해결 전략

응용 프로그램 구현 시, Multiprocess와 Multithread중 하나를 선택하는 기준1. 안정성 vs 자원 사용 : 시스템 안정성이 매우 중요하면 멀티프로세스가 선호된다. 리소스가 제한적인 경우 멀티스레드가 더 효율적일 수 있다.2. 구현의 복잡성 : 스레드는 공유 메모리로 인해 동기화 문제가 복잡해질 수 있다. 따라서 멀티스레드를 사용하려면 개발자의 동시성 제어에 대한 이해도가 중요하다.3. 응답 시간 : 멀티 스레드는 Context Switching이 빠르게 때문에, 빠른 응답 시간을 요구하는 경유 유리하다.4. 플랫폼 및 언어 지원 : 사용 중인 프로그래밍 언어나 플랫폼이, 멀티스레드 또는 멀티프로세스 중 어느 쪽을 더 잘 지원하는지 고려할 수 있다. 멀티프로세스 : 조금 느리고 쉽지만 안..

[Baekjoon 13717 / Java / 실버5] 포켓몬 GO

N : 포켓몬 종류 개수P : 포켓몬M : P 포켓몬에 대한 총 사탕 개수K : P 포켓몬을 진화시키기 위해 필요한 사탕 개수  포켓몬을 진화시키면 2개의 사탕을 추가로 받게 된다.모든 포켓몬을 총 몇 번 진화시켰는지, 그리고 가장 많이 진화한 포켓몬의 이름을 출력하면 된다. 총 진화횟수를 upgrade 변수에 세고, 각 포켓몬마다의 진화횟수를 count로 세서 가장 많이 진화한 포켓몬 이름을 갱신해 주었다.진화할 때마다 사탕 2개를 받게 되니, 진화 시 "총 사탕 개수 - 필요한 사탕 개수" 를 할 때 2개를 덜 빼주면 된다. import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;// ..

[크래프톤 정글 5기] 입소 55일차, 대망의 PintOS 프로젝트 시작

벌써 입소 후 55일이 지나 3일 전 목요일부터 PintOS 프로젝트가 시작되었다. 이젠 정글의 일상에 적응할 대로 적응해서 크게 힘들거나 하는 건 없다. 아니 물론 힘들긴 하다. 하지만 못 버틸 정도는 아닌 수준이다. 지난 주 webproxy 주차는 나름 나쁘지 않은 성과였지만, 시간이 너무 부족해 web server만 만들고 메인 과제인 proxy서버를 구현하지 못 해서 아쉬움이 남았다. 구현하지 못 한 게 아니라 접근조차 못 했다. proxy 전 과제인 tiny web server 를 끝낸 후 복습하면서 블로그에 정리 글을 올렸더니 이미 수요일이 끝나 있었다. 이틀.. 아니 딱 하루만 더 있었더라도 proxy서버까지 끝낼 수 있었을 텐데. 아쉬움이 남는다. 그나마 위안이 되는 것은 다른 사람들도 나..

[PintOS] 키워드 정리 ( Process, Thread, CPU Scheduling, Semaphore, Mutex, Race Condition, Deadlock, Context Switching, MLFQ )

프로세스(Process)- 관리하는 최소 단위의 작업, 주기억장치에 등록된 프로그램 즉 실행중인 프로그램- CPU에 의해 실행되는 시스템 및 사용자 프로그램- 하나의 응용 프로그램은 여러 개의 프로세스로 이루어질 수 있음 스레드(Thread)- “하나의 프로세스 내에서 동시에 진행되는” 작업 갈래, 흐름의 단위ex) 하나의 브라우저에서, 파일을 다운받으면서 음악을 듣고 쇼핑을 하고 게임도 하는 것- 멀티(다중) 스레드 : 스레드가 여러 개 있는 것- 스레드는 프로세스의 메모리 영역(Code, Data, Heap, Stack) 중 Stack만 할당받아 복사하며, 나머지 Code, Data, Heap은 다른 스레드들과 “공유” 한다.- 따라서 Stack은 별도이지만 Heap은 공유하기 때문에 서로 다른 스레..

[webproxy-lab] 웹 소켓 통신 / Tiny Web Server 구현 (C언어)

Tiny Web Server는 말 그대로 작은 웹 서버이다.클라이언트의 요청을 받아 두개의 수를 더하는 adder 프로그램을 실행할 수 있으며,클라이언트가 정적 컨텐츠를 요청하는지, 동적 컨텐츠를 요청하는지 판단하여 Response를 보낼 수 있다. main 함수int main(int argc, char **argv) {  int listenfd, connfd;  char hostname[MAXLINE], port[MAXLINE];  socklen_t clientlen;  struct sockaddr_storage clientaddr;    // 포트번호 인자가 없으면 사용법 출력  /* Check command line args */  if (argc != 2) {    fprintf(stderr, "..

728x90
반응형