코딩 썸네일형 리스트형 pintOS - project1(Thread) synch.c synch.c 더보기 // 세마포어 초기화 void sema_init (struct semaphore *sema, unsigned value) { ASSERT (sema != NULL); // 세마포어가 없으면 종료 sema->value = value; // 해당 세마포어의 value값을 인자의 value로 저장 list_init (&sema->waiters); // 해당 세마포어의 대기자를 매개로 list 초기화 } 더보기 // 세마 감소(스레드 잠금 획득) void sema_down (struct semaphore *sema) { enum intr_level old_level; ASSERT (sema != NULL); ASSERT (!intr_cont.. 더보기 크래프톤 정글 week08, day64 - "User Mode vs Kernel Mode", "Register vs Memory", User Stack, 잔디심기 User Mode vs Kernel Mode Kernel Mode (커널 모드) 정의 커널 모드는 운영체제의 핵심 부분이 작동하는 모드이다. 이 모드에서는 CPU가 모든 하드웨어에 대한 전체적인 접근 권한을 갖는다. 커널 모드에서 실행되는 코드는 시스템의 모든 메모리와 하드웨어 리소스를 자유롭게 조작할 수 있다. 특징 커널 모드에서는 운영체제가 시스템의 낮은 수준의 작업을 수행한다. 이 모드에서 실행되는 코드는 시스템의 안정성과 보안에 직접적인 영향을 미칠 수 있기 때문에, 일반적으로 신뢰할 수 있는 운영체제의 핵심 부분에 한정되어 있다. 용도 하드웨어와의 직접적인 통신, 메모리 관리, 프로세스 및 스레드 생성 관리, 시스템 호출 처리 등 User Mode (유저 모드) 정의 사용자 모드는 일반 응용 프.. 더보기 pintOS - project1(Thread) thread.c - mlfqs thread.c - mlfqs 더보기 // 스레드의 고급 우선순위를 계산 int calculate_advanced_priority(struct thread* t){ // priority = PRI_MAX - (recent_cpu / 4) - (nice * 2) 공식 이용 int advanced_priority; advanced_priority = PRI_MAX - ROUND_TO_INT(DIV_INT(t->recent_cpu, 4)) - t->nice_value * 2; return advanced_priority; } 더보기 // 현재 스레드의 nice값 설정 void thread_set_nice (int ni.. 더보기 pintOS - project1(Thread) thread.c thread.c 더보기 // advanced scheduling 용도 //17.14 형식의 고정소수점 표현 #define P 17 #define Q 14 #define F (1 = 0 ? ((x + F/2)/F) : ((x - F/2)/F)) //고정소수점 기본 연산 #define ADD_FIXED(x,y) (x) + (y) #define SUB_FIXED(x,y) (x) - (y) #define MUL_FIXED(x,y) ((int64_t)(x)) * (y) / (F) #define DIV_FIXED(x,y) ((int64_t)(x)) * (F) / (y) #define ADD_INT(x, n) (x) + (n) * (F) #define SUB_INT(x, n) (x) - (n) * .. 더보기 크래프톤 정글 week08, day63 - 잔디심기, pintOS - Project1 result 오늘의 잔디심기 백준 15819 자바스크립트 브론즈1 너의핸들은 const fs = require("fs"); const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; let input = fs.readFileSync(filePath).toString().split("\n"); const yourHandle = (n, i) => { const handle = []; for(let i = 1; i 더보기 pintOS - Project 1 Thread WIL Krafton Jungle Week 7~8 Team 6 WIL alarm-single 문제: timer_sleep이 기존에 구현되어 있었으나, Busy-wait을 하는 방식으로 되어있었기 때문에 효율이 좋지 않았다. 더보기 void timer_sleep (int64_t ticks) { int64_t start = timer_ticks (); ASSERT (intr_get_level () == INTR_ON); while (timer_elapsed (start) 더보기 void timer_sleep (.. 더보기 pintOS - project1(Thread) timer.c timer.c 더보기 // 초당 타이머 인터럽트 횟수가 19 초과 1000 미만 #if TIMER_FREQ = 19 #endif #if TIMER_FREQ > 1000 #error TIMER_FREQ 더보기 /*초당 PIT_FREQ를 인터럽트하고 해당 인터럽트를 등록시킨다. pit = 프로그래밍된 카운트에 도달할 때 출력 신호를 생성하는 카운터*/ void timer_init (void) { /* 8254 입력 주파수를 TIMER_FREQ로 나눈 값을 가장 가까운 값으로 반올림 */ uint16_t count = (1193180 + TIMER_FREQ / 2) / TIMER_FREQ; /* outb (pit의.. 더보기 크래프톤 정글 week08, day62 - 잔디심기, mlfqs-load-avg까지 구현 오늘의 잔디심기 백준 15680 자바스크립트 브론즈5 연세대학교 const fs = require("fs"); const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; let input = fs.readFileSync(filePath).toString().split("\n"); const n = input[0]; if (n == 0) console.log('YONSEI'); else console.log('Leading the Way to the Future'); 단순 0과 1을 비교해서 출력만 하는 문제 pintos 구간은 도저히 알고리즘 문제를 못 풀것 같다. 10분도 안걸리는 문제들로 최대한 버티려고 하는 중 일요일은.. 더보기 이전 1 ··· 30 31 32 33 34 35 36 ··· 50 다음