일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 티스토리챌린지
- 백준
- 핀토스
- 리액트
- 코드트리
- pintos
- 모션비트
- corou
- JavaScript
- CSS
- 스택
- 시스템콜
- 나만무
- 소켓
- 큐
- 크래프톤 정글
- 자바
- TiL
- HTML
- 알고리즘
- Flutter
- 사이드프로젝트
- Java
- defee
- 자바스크립트
- userprog
- 크래프톤정글
- Vue.js
- 오블완
- 4기
- Today
- Total
목록코딩 (368)
미새문지
Atomic Operation(아토믹 오퍼레이션) 한 번에 완전히 수행되며, 중간에 다른 스레드나 프로세스에 의해 방해 받지 않는 연산을 말한다. 아토믹 오퍼레이션은 멀티스레딩 환경에서 공유 자원에 대한 접근을 동기화할 때 중요한 역할을 한다. 중요성 멀티스레딩 환경에서 여러 스레드가 동시에 같은 데이터에 접근하려 할 때, 데이터의 일관성과 무결성을 유지하기 위해 동기화 메커니즘이 필요하다. 아토믹 오퍼레이션은 이러한 동기화를 보장하는 가장 기본적인 단위이며, 아토믹 오퍼레이션이 아닌 경우, 한 스레드가 작업을 수행하는 도중 다른 스레드가 개입할 수 있기 때문에 예상치 못한 결과를 초래할 수 있다. 예시 변수의 증가 및 감소 i++나 i— 같은 연산은 간단해 보이지만, 실제론 읽기, 수정, 쓰기 세 단계..
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..
User Mode vs Kernel Mode Kernel Mode (커널 모드) 정의 커널 모드는 운영체제의 핵심 부분이 작동하는 모드이다. 이 모드에서는 CPU가 모든 하드웨어에 대한 전체적인 접근 권한을 갖는다. 커널 모드에서 실행되는 코드는 시스템의 모든 메모리와 하드웨어 리소스를 자유롭게 조작할 수 있다. 특징 커널 모드에서는 운영체제가 시스템의 낮은 수준의 작업을 수행한다. 이 모드에서 실행되는 코드는 시스템의 안정성과 보안에 직접적인 영향을 미칠 수 있기 때문에, 일반적으로 신뢰할 수 있는 운영체제의 핵심 부분에 한정되어 있다. 용도 하드웨어와의 직접적인 통신, 메모리 관리, 프로세스 및 스레드 생성 관리, 시스템 호출 처리 등 User Mode (유저 모드) 정의 사용자 모드는 일반 응용 프..
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..
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) * ..
오늘의 잔디심기 백준 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
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 (..
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의..