[크래프톤 정글 3기] 12/1(금) TIL

ClassBinu·2023년 12월 1일
0

크래프톤 정글 3기 TIL

목록 보기
48/120

벌써 12월이다..?
어제 정글 전체 회식함.
09:02 입실

어제 회식 끝나기 전 백코치님의 조언
모든 최신 자료는 영어로 나온다. 영어로 자료를 학습할 수 있어야 한다.
(크롬 번역 기능 써도 되나요?) 범용적인 기술이니까 그 정도는 된다. 하지만 번역이 정확할 거란 보장은 없다.
언어, 프레임워크가 아니라 기초가 중요하다.


Pintos

구현해야 하는 기능 이해하기

MLFQ

구현해야 하는 코드

/* Sets the current thread's nice value to NICE. */
void
thread_set_nice (int nice UNUSED) {
	/* TODO: Your implementation goes here */
}

/* Returns the current thread's nice value. */
int
thread_get_nice (void) {
	/* TODO: Your implementation goes here */
	return 0;
}
  • 스레드 우선순위는 0(PRI_MIN) ~ 63(PRI_MAX)
  • 스레드 우선순위는 초기화 시 or 4틱 마다 재계산
  • 스레드 우선순위 공식: PRI_MAN - (recent_cpu / 4) - (nice * 2)
  • recet_cpu는 스레드가 최근에 사용한 CPU 시간 추정치
  • nice는 스레드 nice 값(가까운 정수로 반올림)

recent_cpu

각 프로세스가 가장 최근에 받은 CPU 할당 시간을 측정

지수 가중 이동 평균

https://bruders.tistory.com/92

오래된 데이터가 미치는 영향을 지수적으로 감쇠

/* Returns 100 times the current thread's recent_cpu value. */
int
thread_get_recent_cpu (void) {
	/* TODO: Your implementation goes here */
	return 0;
}

load_avg()

시스템 로드 평균: 지난 몇 분 동안 실행할 준비가 된 평균 스레드 수 추정
(지수 가중 이동 평균)

시스템 부팅 시 0으로 초기화
이후 초당 다음 공식에 따라 업데이트
load_avg = (59/60) load_avg + (1/60) Ready_threads,

ready_threads는 업데이트 시점에서 실행 중이거나 실행할 준비가 된 스레드 수
(유휴 스레드는 제외)

/* Returns 100 times the system load average. */
/* 현재 시스템 로드 평균의 100배를 가장 가까운 정수로 반올림하여 반환합니다. */
int
thread_get_load_avg (void) {
	/* TODO: Your implementation goes here */
	return 0;
}

부동 소수점 이슈(고정 소수점)

recent_cpu, load_avg는 실수

Pintos 커널에서는 부동 소수점 연산 미지원
즉, 값을 정수로 변환해야 한다.


고정 소수점(17.14)

17.14 고정소수점 수 표현

32비트 정수의 하위 14비트를 소수 비트로 지정
부호비트(1) / 소수점 앞(17) / 소수점 뒤 (14) = 32비트

정수, 실수를 (17.14)로 인코딩 하는 과정을 거쳐 정수처럼 표기함.


부동 소수점

핀토스와 별개로 부동 소수점 빠르게 훑어보기!

소수를 V = x * 2^y 로 인코딩

표준화되지 않던 표기 방식이 IEEE(전지전자공학협회) 표준 754로 통일됨.

+는 생략할 수 있음.
e부터 지수부 시작.
소수점 없을수도 있음.


계속 구현하고 있지만 실패해서 롤백
내일 다시 달린다.

0개의 댓글