📌 공부한 내용 - 프로세스와 스레드 정리 - 알고리즘 정인셋 - Pintos -> User Programs No Lv Algorithm Name Judge etc 1449 S3 그리디,정렬 수리공 항승 solved 실버문제라 간단하게 품 1018 S4 브루트포스 체스판다시칠하기 solved 예전에 푼 문제라 안풀었는데 다시 풀어봐야할듯 21608 G5 구현 상어 초등학교 solved 구현 문제는 확실히 노가다 + 시간이 많이 드는것 같고 조금 어려운 것 같음 💭 느낀 점 & 배운 점 - 프로세스 - 스레드에 대한 개념은 아무래도 CS 면접에서 물어보기 너무 편해보여서 확실히 외워두는게 좋을 것 같음 알고리즘 문제들은 정글에 오기전과 비교해봤을때 확실히 많이 늘었다고 생각함, 아직 한참 모자르기 때문에 ..
1️⃣ - 쓰레드 상태 (무엇이 있는지, 어떤 함수 또는 인터럽트등이 불려지면 어떤 상태로 전환되는지) - thread에는 `Ready, Running, Dying, Blocked` 상태가 있고, ready_list에서 대기를 하다가 스케쥴러에 의해 running상태가 되었다가 running 상태에서는 sleep함수로 인해 blocked되면서 sleep_list로 옮겨지게 되고 대기 상태가 된다. 그리고 sleep_list에서 다시 unblock을 통해 ready_list로 가게되고 이 과정을 반복하다가 다 사용하게 되면 exit으로 종료처리가 된다. 2️⃣ - 스케줄링이 무엇인지? (1의 함수들 호출과 스케줄링 관계 설명) 스레드들이 ready_list에서 실행되기만을 기다리고 있는데, 무작정 실행 시..
📌 공부한 내용 선점형(Preemption) 선점형은 하나의 프로세스가 다른 프로세스 대신에 프로세서를 차지할 수 있다는 뜻이다. 빠른 응답시간을 요하는 대화식 시분할 시스템에 적합하며 긴급한 프로세서를 제어 할 수 있다. 선점형 방식의 스케쥴링에는 Round Robin : 시간 단위가 설정되어 각 시간동안 프로세스를 실행하고 시간이 지나면 다음 프로세스로 전환되게 한다. 전체적인 응답 속도가 빨라질수도 있으나, 시간 단위마다 프로세스를 전환할 때 문맥 전환에 따른 오버헤드가 발생할 수 있기 때문에 적당한 시간 단위 설정을 해야한다. 비선점형(Non-Preemption) 비선점형은 하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없다. 순서대로 처리되는 공정성이 있고, 다음에 처리해야..
📌 공부한 내용 Thread 개선 sleep/awake 방식 1️⃣ - struct thread 개선 스레드 구조체 안에 sleep할 시 깨워줘야 하는 시각을 집어넣는다. include/threads/thread.h/struct thread struct 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. */ ... /* wakeup tick : 깨어나야 할 tick(시각) */ int64_t wakeup_ti..
https://www.acmicpc.net/problem/13549 13549번: 숨바꼭질 3 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 📌 - 처음 생각한 풀이 방문 배열 -1로 초기화 방문 배열이 -1이거나 BFS로 탐색했을 때 방문한 배열의 값이 이전 값보다 작으면 교체 BFS를 통해서 시작 숫자부터 목표 숫자까지 -1, +1 , *2 반복 해당 번호에 도착하면 종료 및 출력 - 시간 복잡도는 따로 생각하지 않고 일단 로직이 맞는지 확인하고 싶어서 시간초과가 난다 생각하더라도 구현 함 - ..
📌 공부한 내용 💻 - Thread.c 코드 분석 1. ASSERT // ASSERT(조건식) 함수는 assert에 지정한 조건식이 거짓이면 프로그램을 중단하며 참이면 프로그램을 계속 실행한다. ASSERT(intr_get_level () === INTR_OFF); // => intr_get_level() 함수는 현재 interrupt가 disabled인지, enabled(INTR_OFF)인지 확인후 disabled(INTR_ON)일 경우 계속 진행 이 함수로 해당 결과가 제대로 진행됐는지 테스트 할 수 있다. 동기화 문제를 해결하는 가장 안 좋고 무식한 방법은 interrupts를 무력화(disabled) 시키는 것이다. 2. GDT static uint64_t gdt[3] = { 0, 0x00af9a..