Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 모션비트
- TiL
- 스택
- 백준
- 시스템콜
- 리액트
- corou
- 코드트리
- Vue.js
- 큐
- 사이드프로젝트
- 나만무
- 자바스크립트
- 소켓
- pintos
- userprog
- CSS
- 알고리즘
- 핀토스
- 크래프톤 정글
- Flutter
- defee
- 4기
- JavaScript
- 크래프톤정글
- HTML
- 오블완
- 티스토리챌린지
- Java
- 자바
Archives
- Today
- Total
미새문지
크래프톤 정글 week07, day55 - 4BSD, Nice, Busy Waiting, 잔디심기 본문
728x90
4BSD(4th Berkeley Software Distribution)
- 4BSD 스케줄링 또는 BSD 스케줄링은 미국 캘리포니아 대학 버클리의 CSRG(Computer Systems Research Group )에서 개발한 유닉스 운영 체제의 버전 중 하나인 BSD에서 사용된 스케줄링 방식이다.
- 4BSD 스케줄링은 다단계 멀티 피드백 큐 스케줄링(MLFQS)을 기반으로 하며, 프로세스의 특성에 따라 우선순위를 변경하는 동적 우선순위 결정 방식을 사용한다.
- 4BSD의 특징
- 대화형(Interactive) 프로세스와 배치(batch) 프로세스를 구분한다. 대화형 프로세스는 사용자와 상호작용을 많이 하므로 빠른 반응 시간이 요구되며, 배치 프로세스는 CPU를 많이 사용하므로 높은 처리량이 요구된다.
- 프로세스의 우선순위를 동적으로 변경한다. 프로세스가 CPU를 많이 사용하면 우선순위를 낮추고, 입출력을 많이 요구하면 우선순위를 높인다.
- 이를 통해 CPU 사용량과 시스템 반응 시간 사이의 균형을 유지하게 된다.
- 우선순위의 조정은 ‘우선순위 감소(Decay)’라는 개념을 통해 이루어지며, 프로세스나 쓰레드가 CPU를 사용할 때마다 그 우선순위가 감소하며, 이는 프로세스가 CPU를 계속 점유하지 못하게 막는다.
- 4BSD 스케줄링에서 프로세스의 우선순위는 두 가지 요인에 의해 동적으로 변경된다.
- CPU 사용량
- 프로세스가 CPU를 많이 사용함, 즉 계속 CPU를 점유하려 할 때 그 프로세스와 우선순위를 낮춘다. 이렇게 하면 다른 프로세스들에게도 CPU를 사용할 기회를 제공하게 된다.
- 이를 통해 시스템은 프로세스 간의 공정한 CPU 사용을 보장하게 된다.
- 입출력 요청
- 프로세스가 입출력을 많이 요구하거나 대기 상태에 들어가면 그 프로세스의 우선순위를 높인다. 입출력을 많이 요구하는 프로세스는 대게 사용자와의 상호작용이 많은 프로세스인 경우가 많다.
- 이런 프로세스들에게 높은 우선순위를 부여함으로써 사용자에게 빠른 반응 시간을 제공할 수 있다.
- CPU 사용량
- 두 가지 요인만으로 프로세스의 특성과 동작 방식을 가장 잘 반영하므로 대부분의 경우에 효과적인 스케줄링이 가능하다.
Nice
- Unix와 Unix-like 시스템에서 프로세스의 우선순위를 조절하는데 사용되는 스케줄링 우선순위 조정 메커니즘이다.
- Nice는 프로세스에 할당된 CPU 시간의 비율을 조절하는 역할을 하며, 이 값은 사용자나 시스템 관리자가 직접 설명할 수 있다.
- Nice값의 범위는 시스템에 따라 다르지만, 일반적으로 -20에서 +19까지이다.
- 기본적으로 nice 값은 0으로 설정되며, 이 때 nice 값이 낮을 수록 프로세스의 우선순위가 높아진다.
- 즉, nice 값이 -20인 프로세스는 CPU 시간을 가장 많이 할당받고, +19인 프로세스는 CPU 시간을 가장 적게 할당 받는다.
- Nice 값은 프로세스 생성 시에 설정되며, 실행 중인 프로세스의 nice 값을 변경하려면 nice 또는 setpriority라는 시스템 콜을 사용한다.
- nice 값을 통해 프로세스의 우선순위를 조절하면, 시스템의 전반적인 성능을 향상시키고, 특정 프로세스의 실행 시간을 보장하는 등의 작업 수행이 가능하다.
nice() 함수
- 지정된 우선순위 값을 매겨 새 프로세스를 시작하는데 사용된다.
#include <unistd.h>
int main() {
int nice_value = 10;
nice(nice_value);
}
setpriority() 함수
- 이미 실행 중인 프로세스의 nice값을 변경하는데 사용
- 이 명령어를 사용하면, 특정 프로세스의 우선순위를 동적으로 조절할 수 있다.
#include <sys/time.h>
#include <sys/resource.h>
int main() {
int which = PRIO_PROCESS;
id_t pid;
int priority = 10;
pid = getpid(); // 현재 프로세스 ID를 가져옵니다.
setpriority(which, pid, priority);
// 이후 코드
}
Busy Waiting
- 바쁜 대기라고 불리며, OS에서는 권한을 얻을 때까지 확인하는 것을 의미한다.
- CPU 자원을 쓸데없이 낭비하기 때문에 좋지 않은 쓰레드 동기화 방식
- 쓰레드의 동기화를 위해선 busy waiting이 아니라 뮤텍스나 세마포어를 사용하는 것이 좋다.
- 대신에 자원의 권한을 얻는 데 걸리는 시간이 짧다면 busy waiting이 효율적이다.
Thread_sleep()
- 쓰레드의 동작을 일정 시간 유예하고, CPU가 다른 작업을 할 수 있도록 허용하는 함수
- 해당 함수가 실행되면 쓰레드는 timed_waiting 상태로 일시 정지되며, 명시한 시간이 지난 후 runnable을 거쳐 작업 실행을 하게 된다.
- 이 때 sleeptime이 지난 후 일시 정지된 작업을 바로 실행할 수 있다.
- 쓰레드를 일시 정지 시키면 해당 쓰레드의 CPU 사용이 사라져 전체 CPU 사용량을 감소시킬 수 있다.
오늘의 잔디심기
백준
|
3474
|
자바스크립트
|
실버3
|
교수가 된 현우 |
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().split("\n");
const professor_hyunwoo = (T) => {
for(let i = 1; i <= T; i++) {
let num = input[i];
let count = 0;
while(num >= 5) {
count += Math.floor(num / 5);
num /= 5;
}
console.log(count);
}
}
T = Number(input[0]);
professor_hyunwoo(T);
팩토리얼값의 뒷자리 0이 몇갠지 세는 문젠데 10의 단위 즉, 2*5의 n개 만큼 0이 생긴다. 하지만 2는 5보다 더 많기 때문에 최소값인 5의 n개를 구하면 끝
pintOS busy waiting 방식보다 더 효율 좋은 실행 중지 함수를 짜야 하는데 너무 어렵다.
학습 시간 : 10 ~ 26시
728x90
'크래프톤 정글 > TIL' 카테고리의 다른 글
크래프톤 정글 week07, day57 - 잔디심기, 바이너리 세마포어로 alarm_sleep 진행 중 (4) | 2024.03.05 |
---|---|
크래프톤 정글 week07, day56 - 잔디심기, 동기화 코드 학습 중 (1) | 2024.03.03 |
크래프톤 정글 week07, day53 - CPU 스케줄링 알고리즘, 잔디심기 (6) | 2024.03.01 |
크래프톤 정글 week06, day52 - Tiny Server Code, 잔디심기 (2) | 2024.02.29 |
크래프톤 정글 week06, day51 - CGI, WebServer, MIME Type, Proxy, 잔디심기 (2) | 2024.02.28 |